以快速方式将数据从一个 s3 存储桶复制到不同帐户的另一个 s3 存储桶,只需使用两者的 access_id、secret_access_key 信用

问题描述

我有两个 aws 存储桶的 access_key 和 access_id 属于不同的帐户。我必须将数据从一个位置复制到另一个位置,有没有办法更快地做到这一点。

我尝试过基于 map-reduced 的 distcp,但没有提供令人满意的性能

解决方法

在不同账户中的 Amazon S3 存储桶之间复制数据的最佳方法是使用一组有权从源存储桶读取和写入目标存储桶的凭证

然后,您可以通过 CopyObject() 命令使用这些凭据,这将在 S3 存储桶之间复制对象而无需下载和上传对象。即使存储桶位于不同账户甚至不同区域,副本也将由 Amazon S3 服务完全管理。该副本不涉及向/从您自己的计算机传输任何数据。

如果您使用 AWS CLI aws s3 cp --recusiveaws s3 sync 命令,复制将并行执行,从而非常快速地复制对象。

复制有两种方式:

推送

  • 使用一组来自源帐户的凭据,该凭据有权从源存储桶中读取数据
  • 在目标存储桶上添加一个存储桶策略,允许对这些凭据进行写入访问
  • 执行复制时,使用 ACL=bucket-owner-full-control 将对象的所有权分配给目标帐户

  • 使用一组来自目标帐户的凭据,该凭据有权写入目标存储桶
  • 在源存储桶上添加一个存储桶策略,允许对这些凭据进行读取访问
  • (不需要 ACL,因为“拉取”文件会自动将所有权授予发出命令的帐户)