S3跨账号复制配置:源桶对象完成复制后自动删除的实现方法
S3跨账号复制成功后自动删除源桶对象的实现方案
目前有两种经过验证的可行方案,你可以根据自己的业务场景选择:
方案1:S3生命周期规则(无代码、低维护成本,优先推荐)
这是S3原生支持的功能,不需要额外开发服务,具体配置步骤如下:
- 首先确认你的跨账号复制规则已经开启了复制状态跟踪,开启后源桶对象完成复制后,元数据会自动标记
x-amz-replication-status: COMPLETED状态 - 进入源桶的生命周期管理页面,新建生命周期规则
- 规则筛选条件选择按对象复制状态筛选,匹配值选「已完成复制(Completed)」
- 规则动作配置为「永久删除对象」,触发时间设置为对象创建后0天即可,只要对象复制状态变为已完成,就会被生命周期规则自动清理
- 如果源桶开启了版本控制,需要额外按需配置删除历史版本、清理删除标记的动作
注意:该方案的删除延迟取决于S3生命周期的扫描周期,一般在几分钟到几小时不等,适合对删除实时性要求不高的场景,没有额外运行成本。
方案2:S3事件通知+Lambda函数(低延迟、支持自定义逻辑)
如果需要复制完成后立刻删除,或者要添加额外校验逻辑,可以选择该方案:
- 同样先确保复制规则开启了复制状态跟踪
- 为源桶配置事件通知,触发事件选择「复制完成(Replication:OperationComplete)」,触发目标绑定你账号下的Lambda函数
- 为Lambda配置执行权限,需要包含源桶的
s3:DeleteObject权限,以及Lambda基础运行权限 - Lambda核心逻辑示例(Python):
import boto3 s3_client = boto3.client('s3') def lambda_handler(event, context): for record in event['Records']: source_bucket = record['s3']['bucket']['name'] object_key = record['s3']['object']['key'] # 若开启版本控制可以传入VersionId参数删除指定版本 s3_client.delete_object(Bucket=source_bucket, Key=object_key)
注意:该方案删除延迟一般在秒级,支持自定义删除前的校验、日志留存等操作,会产生少量的Lambda运行费用。
两种方案的删除操作都在源账号侧执行,不需要给目标跨账号开放源桶的删除权限,不会产生额外的安全风险。
内容的提问来源于stack exchange,提问作者Dean
相关产品推荐
相关产品推荐

