我为另一个账户中的存储桶启用了 S3 复制。将对象复制到目标存储桶后,有什么方法可以从源存储桶中删除它们吗?
我似乎找不到一个简单的方法来做到这一点。
我为另一个账户中的存储桶启用了 S3 复制。将对象复制到目标存储桶后,有什么方法可以从源存储桶中删除它们吗?
我似乎找不到一个简单的方法来做到这一点。
看来您的实际目标是将对象从一个存储桶“移动”到另一个存储桶。
这可以通过在源存储桶中创建新对象时由 Amazon S3 触发的AWS Lambda 函数来完成。Lambda 函数应该:
这避免了配置 S3 复制的需要。
重要提示:将对象复制到其他 AWS 账户拥有的存储桶时,请务必使用ACL=bucket-owner-full-control以便目标账户在复制操作后“拥有”该对象。
代码将类似于:
import boto3
import urllib
DESTINATION_BUCKET = 'bucket2'
def lambda_handler(event, context):
s3_client = boto3.client('s3')
# Get the bucket and object key from the Event
for record in event['Records']:
source_bucket = record['s3']['bucket']['name']
key = urllib.parse.unquote_plus(record['s3']['object']['key'])
# Copy object
s3_client.copy_object(
Bucket = DESTINATION_BUCKET,
Key = key,
CopySource= {'Bucket': source_bucket, 'Key': key},
ACL = 'bucket-owner-full-control'
)
# Delete source object
s3_client.delete_object(
Bucket = source_bucket,
Key = key
)