自动将对象从一个s3存储桶移动到另一个存储桶



我想自动将对象从第一个s3 bucket移动到第二个bucket。当一个文件被创建或上传到第一个bucket时,它应该被移到第二个bucket。传输后,源存储桶上不应该有该文件的任何副本。

我看到过aws3同步的例子,但这会在源bucket上留下一个副本,而且它不是自动的。

cli中的aws-mv命令将跨文件移动,但说明如何自动化该过程。创建一个lambda通知并将文件发送到第二个bucket可以解决问题,但我正在寻找一个更自动化、更简单的解决方案。不确定我们是否可以对SQS做些什么?我们可以在源bucket上设置什么东西来自动将对象发送到第二个bucket吗?感谢的任何想法

没有"移动";AmazonS3中的命令。相反,它涉及CopyObject()DeleteObject()。即使是AWS CLIaws mv命令也会执行"复制"one_answers"删除"操作。

实现目标的最简单方法是:

  • 在源bucket上配置事件以触发AWS Lambda函数
  • 编写Lambda函数,将对象复制到目标bucket,然后删除源对象

下面是一些示例代码:

import boto3
import urllib
TARGET_BUCKET = 'my-target-bucket'
def lambda_handler(event, context):
# Get incoming bucket and key
source_bucket = event['Records'][0]['s3']['bucket']['name']
source_key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
# Copy object to different bucket
s3_resource = boto3.resource('s3')
copy_source = {
'Bucket': source_bucket,
'Key': source_key
}
s3_resource.Bucket(TARGET_BUCKET).Object(source_key).copy(copy_source)
# Delete the source object
s3_resource.Bucket(TARGET_BUCKET).Object(source_key).delete()

它会将对象复制到目标bucket中的相同路径,然后删除源对象。

Lambda函数应分配一个IAM角色,该角色对源存储桶中的GetObject和目标存储桶中CopyObject+PutObject具有足够的权限。

这是一个后续问题。如何设置到目标S3存储桶的S3复制。目标存储桶上的文件可以触发Lambda来清理源存储桶。底线问题:与S3复制((相比,S3复制是否更高效?

相关内容

  • 没有找到相关文章

最新更新