如何通过端点及访问密钥实现S3桶到MinIO桶的数据传输
S3与MinIO跨存储数据传输方案解答
跨桶直接传输API支持情况
MinIO原生兼容AWS S3 API,本身支持你说的指定两端凭证直接传输的场景。但你不需要自行封装调用底层API,官方已经提供了现成的、更稳定的实现方案。
最优实现方案:使用MinIO客户端mc直接同步
这种方案不需要把数据落地到EC2本地磁盘,全程走流式传输,只占用EC2网络带宽,同时原生支持断点续传、大对象分片、并发控制等能力,开发和维护成本最低。
操作步骤
- 先为mc客户端配置两端的存储别名
- 配置AWS S3别名:
mc alias set s3 https://s3.<AWS区域代码>.amazonaws.com <S3访问密钥> <S3私密密钥>- 配置自建MinIO别名:
mc alias set minio http://<MinIO服务地址>:<服务端口> <MinIO访问密钥> <MinIO私密密钥> - 按需执行同步操作
- 一次性全量同步整个桶:
mc mirror s3/<源S3桶名> minio/<目标MinIO桶名>- 持续同步源桶新增数据(监听模式):
mc mirror --watch s3/<源S3桶名> minio/<目标MinIO桶名>- 同步指定前缀的部分数据:
mc cp -r s3/<源S3桶名>/<指定前缀> minio/<目标MinIO桶名>/<指定前缀>
性能优化建议
- 如果你部署MinIO的EC2和S3桶在同一AWS区域,建议给EC2配置S3 VPC端点,同步流量走AWS内网,避免公网带宽限制,同时节省公网流量费用。
- 大桶同步可以添加
--parallel <并发数>参数调整并发请求量,根据你的EC2带宽和MinIO集群规模调整,比如设置32并发:
mc mirror --parallel 32 s3/<源S3桶名> minio/<目标MinIO桶名>
自研API实现说明
如果确实需要自行通过API实现,可以直接调用MinIO的S3兼容PutObject接口和AWS S3的GetObject接口,拉取S3对象流直接写入MinIO即可,不需要本地存储。但需要自行处理异常重试、断点续传、分片上传等逻辑,复杂度远高于直接使用mc客户端,非特殊需求不推荐。
内容的提问来源于stack exchange,提问作者SAIJAL
相关产品推荐
相关产品推荐

