如何在北京(中国)存储桶和全球存储桶之间同步 S3 中的数据?

Shu*_*uan 7 amazon-s3 amazon-web-services

北京(中国)地区非常独特,因为它几乎所有的东西都是独立的(与 AWS 全球分开)。例如,要使用 AWS CLI 列出我们必须指定的对象region和endpoint-url:

aws --region cn-north-1 \
  --endpoint-url https://s3.cn-north-1.amazonaws.com.cn \
  --profile AN_AWS_CN_PROFILE \
  s3 ls s3://AN_AWS_CN_BUCKET/
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在北京(中国)存储桶和全球存储桶之间同步数据?首先,无法使用指定的region&识别全局存储桶endpoint-url。例如,

aws --region cn-north-1 \
  --endpoint-url https://s3.cn-north-1.amazonaws.com.cn \
  --profile AN_AWS_CN_PROFILE \
  s3 cp s3://AN_AWS_CN_BUCKET/ s3://AN_AWS_IRELAND_BUCKET/
Run Code Online (Sandbox Code Playgroud)

会给

致命错误:调用ListObjects操作时发生错误(NoSuchBucket):指定的bucket不存在

(目标存储桶确实存在。)

到目前为止,我已经探索了 CLI 参数和.aws/config文件来定义配置文件。也许有可能使用多个profile在一个单一的命令,但它似乎并不可能配置endpoint-url的.aws/config,因为没有提到它在这里。

现在我只是将文件复制到本地然后上传,随着数据集的快速增长,这将成为一个问题。使用 EMR 可以解决扩展问题,但它增加了额外的复杂性。我想知道是否有更好且可能更简单的解决方案?谢谢你。

小智 5

BJS/ZHY 区域与经典区域在不同的分区下(BJS/ZHY 为 aws-cn,其他区域为 aws)

不同的分区阻止了来自 BJS 和经典区域的账户相互交谈——他们无法理解来自其他分区的 ARN,也无法将来自其他分区的账户列入白名单或授予权限。

中国地区的 S3 也存在一些问题,即某些 S3 url/IP 被本地网络提供商阻止。

根据我的经验,实现这一目标的最佳方法是创建一个 Lambda 函数将 S3 对象上传到经典分区中的存储桶,或者配置 SNS->SQS->SQS 侦听器模式。