【发布时间】:2017-02-04 02:20:15
【问题描述】:
我正在尝试使用 EC2 服务器上的命令行界面在不同区域的两个 S3 存储桶之间进行复制。
地区信息:
EC2 实例:us-west-2
S3 来源: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_profileaws 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”在两台机器上是相同的)
【问题讨论】:
-
您在 EC2 服务器上为 S3 使用 VPC 终端节点。我认为这是因为它位于 VPC 的私有子网中。因此,您在 EC2 服务器上通过与在本地计算机上不同的方法访问 S3。这就是为什么它的行为不同。如果 VPC 端点不支持您尝试执行的操作,那么除了首先将所有文件复制到 EC2 服务器之外,确实没有其他解决方法。
-
如果我理解正确,请告诉我。第一个命令使用 VPC 端点连接到单个存储桶并且它可以工作。第二个命令使用不同的端点连接到不同的单个存储桶并且它可以工作。第三个命令使用之前的 vpc 端点之一尝试连接到两个不同的存储桶,但无法连接到其中一个?
-
它与“连接到存储桶”的能力无关。第一个命令将文件从一个 S3 存储桶复制到另一个存储桶,其中两个存储桶位于同一区域。第二个命令将文件从一个 S3 存储桶复制到另一个存储桶,其中两个存储桶位于同一区域中。第三个命令将文件从一个 S3 存储桶复制到另一个存储桶,这些存储桶位于不同的区域。错误消息是说 VPC 端点不支持特定场景。
-
启用跨区域复制,让亚马逊为您运行。
-
看起来解决方案是关闭 VPC Endpoints,我不知道所有细节,我认为如果这是一次性操作,创建一个没有端点的新 VPC 并执行那里的操作。
标签: amazon-web-services amazon-s3 amazon-ec2