如何实现S3跨桶复制时将对象同步到目标桶的指定子目录
S3源桶全量同步到目标桶指定子目录的实现方案
一次性全量迁移(推荐简单场景使用)
直接使用AWS CLI的s3 sync命令即可满足需求,命令示例如下:
aws s3 sync s3://Bucket1/ s3://Bucket2/Folder1/Folder2/
该命令会自动递归拉取源桶所有对象,保留对象的相对路径拼接到目标前缀下,完全匹配你要求的路径映射规则。
额外可选参数
- 执行前加
--dryrun参数预览同步结果,确认路径符合预期再正式执行 - 如需保留源端ACL、存储类配置,可追加
--acl bucket-owner-full-control、--storage-class COPY参数 - 支持用
--exclude "*.log"、--include "2024/*"类参数过滤需要同步的对象范围
持续增量自动同步(适合需要实时同步的场景)
S3原生跨桶复制规则不支持自定义目标前缀,你可以搭配S3事件通知+Lambda实现自动同步:
- 先按上面的CLI同步方案完成所有存量对象的迁移
- 为源桶
Bucket1配置S3事件通知,触发条件为「对象创建/修改/删除」,触发目标设置为Lambda函数 - Lambda函数逻辑实现:
- 解析S3事件拿到源对象的键名
- 调用S3
CopyObject接口,将源对象复制到目标路径Folder1/Folder2/{源对象键名} - 如需同步删除操作,匹配源端对象删除事件调用目标端对应路径的
DeleteObject接口即可
- 为Lambda执行角色配置对应IAM权限:源桶的
s3:GetObject权限、目标桶指定前缀下的s3:PutObject、s3:DeleteObject权限
超大规模桶同步(适合对象量百万级以上的场景)
如果源桶容量大、对象数量多,CLI同步效率低,可以使用AWS S3 Batch Operations批量操作功能:
- 首先生成源桶的S3对象清单报告
- 创建S3批量操作任务,操作类型选择复制,统一指定目标前缀为
Folder1/Folder2/ - 平台会分布式调度执行复制任务,支持进度追踪、失败重试,比手动执行CLI效率高数十倍
内容的提问来源于stack exchange,提问作者Cyberdogs7
相关产品推荐
相关产品推荐

