0

我为另一个账户中的存储桶启用了 S3 复制。将对象复制到目标存储桶后,有什么方法可以从源存储桶中删除它们吗?

我似乎找不到一个简单的方法来做到这一点。

4

1 回答 1

0

看来您的实际目标是将对象从一个存储桶“移动”到另一个存储桶。

这可以通过在源存储桶中创建新对象时由 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
        )
于 2021-09-17T00:41:18.930 回答