Laz*_*zer 7 amazon-s3 amazon-ec2 amazon-web-services
我试图使用EC2服务器上的命令行界面在不同区域的两个S3存储桶之间进行复制.
地区信息:
EC2实例:us-west-2
S3 origin:us-east-1
S3目的地:us-west-2
以下命令可从EC2服务器完美运行:
aws s3 cp s3://n-virginia/origin s3://n-virginia/destination --recursive --source-region us-east-1 --region us-east-1 --profile my_profile
aws s3 cp s3://oregon/origin s3://oregon/destination --recursive --source-region us-west-2 --region us-west-2 --profile my_profile
我需要从EC2服务器运行以下命令:
aws s3 cp s3://n-virginia/origin s3://oregon/destination --recursive --source-region us-east-1 --region us-west-2 --profile my_profile
如果我从本地计算机运行该命令它可以工作,但如果我从我用于前两个命令的EC2服务器运行它,我会收到以下错误:
错误:"A client error (AccessDenied) occurred when calling the CopyObject operation: VPC endpoints do not support cross-region requests"
我能够将文件从原始存储桶复制到EC2服务器,然后从EC2服务器复制到目标存储桶,但这不是生产中可接受的解决方案.我不明白为什么它可以在本地机器上工作但不在EC2服务器上工作(两台机器上的"my_profile"相同)
正如评论中指出的,问题是您的 VPC 有一个端点,并且不支持跨区域副本。
要解决此问题,请通过更新您的 VPC 路由表暂时禁用 VPC 终端节点,或者只是创建一个没有 VPC 终端节点的新 VPC 并在那里启动 EC2。
跨区域复制将是理想的,但正如所指出的,这只会影响存储桶中的新项目
而不是使用aws s3 cp您可能想要使用aws s3 sync. 同步只会复制更改过的文件,因此您可以在它被中断时再次重新运行它。例如:
aws s3 sync s3://n-virginia/origin s3://oregon/destination
Run Code Online (Sandbox Code Playgroud)
还需要注意的是这两个cp和sync你不使用保留的ACL。因此,如果您更改了单个文件的 ACL 权限,它们将在复制后全部设置为默认值。还有一些其他工具应该保留 ACL,例如https://s3tools.org,这似乎对我有用。
| 归档时间: |
|
| 查看次数: |
4868 次 |
| 最近记录: |