【发布时间】:2021-02-16 04:51:06
【问题描述】:
我正在尝试跨不同的 iam 帐户将一个 aws 存储桶同步到另一个存储桶。 如何定期执行此操作,以便写入源存储桶的任何文件都会自动转换到目标?我需要使用 lambdas 来执行 aws cli sync 命令吗?
谢谢
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda
我正在尝试跨不同的 iam 帐户将一个 aws 存储桶同步到另一个存储桶。 如何定期执行此操作,以便写入源存储桶的任何文件都会自动转换到目标?我需要使用 lambdas 来执行 aws cli sync 命令吗?
谢谢
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda
选项 1:AWS CLI 同步
您可以定期运行aws s3 sync,它只会复制新的/更改的文件。这使它非常有效。但是,如果有大量文件(超过 10,000 个),则需要很长时间才能确定需要复制哪些文件。您还需要安排命令在某处运行(例如 cron 作业)。
选项 2:AWS Lambda 函数
您可以创建一个 AWS Lambda 函数,该函数在创建新对象时由 Amazon S3 触发。 Lambda 函数将通过 event 参数传递存储桶和对象的详细信息。然后,Lambda 函数可以调用CopyObject() 来立即复制对象。这种方法的优点是对象一被创建就被复制。
(不要使用 AWS Lambda 函数来调用 AWS CLI。上述函数将分别为每个文件调用。)
选项 3:Amazon S3 复制
您可以将Amazon S3 Replication 配置为自动在存储桶之间复制新创建的对象(包括不同AWS 账户之间的存储桶)。这是最简单的选项,因为它不需要任何编码。
权限
在账户之间复制 S3 对象时,您需要使用一组凭据,该凭据集对源存储桶具有读取权限,对目标存储桶具有写入权限。这可以通过两种方式完成:
PutObject 放入存储桶。复制时,指定ACL=public-read 将对象所有权授予目标帐户。或
GetObject 凭据。【讨论】: