将文件从一个 S3 存储桶传输到另一个存储桶的最便宜方法是什么?



我打算通过Commander One文件管理器直接复制粘贴所有内容,但事实证明这将花费一大笔钱。我想这算作下载然后重新上传所有内容。我被告知改用一个实例并以这种方式传输它们(仍在尝试弄清楚如何做到这一点)。但是还有其他简单的方法吗?

尝试将此策略附加到目标 Bukkit:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS":"arn:aws:iam::<id number here>:user/<username here>"},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<bucket to get files from>/*"
]
},
{
"Effect": "Allow",
"Principal": {"AWS":"arn:aws:iam::<id number here>:user/<username here>"},
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::<bucket to put files in>"
]
}
]
}

收到policy has invalid resource错误

您应该使用CopyObject()命令,该命令直接在 Amazon S3 存储桶之间复制对象,无需下载/上传。由于存储桶位于同一区域,因此唯一的成本是一些 API 请求(每 1000 个请求 0.005 美元)。

执行此操作的最简单方法是使用 AWS 命令行界面 (CLI),使用aws s3 cpaws s3 sync命令。它将代表您呼叫CopyObject()。例如:

aws s3 sync s3://bucket-a/folder/ s3://bucket-b/folder/

请注意,您用于执行复制的凭证必须具有对源存储桶的读取权限和对目标存储桶的写入权限

假设您正在从Account-ABucket-A复制到Account-B中的Bucket-B。这可以通过以下方式完成:

  • 使用来自Account-B的 IAM 用户的凭证 (User-B)。在允许User-B从存储桶读取Bucket-A上添加存储桶策略或者
  • 使用来自Account-A的 IAM 用户的凭证 (User-A)。在允许User-A写入存储桶的Bucket-A上添加存储桶策略复制时,请务必添加--acl bucket-owner-full-control以将对象所有权授予Account-B

我更喜欢第一个选项,因为目标帐户将文件"拉取"到自己的帐户中,因此默认情况下它拥有文件。

最简单的方法是使用同步,它非常简单:

aws s3 sync s3://sourcebucket s3://destinationbucket

阅读更多: https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/

您还必须调整源存储桶和目标存储桶的存储桶策略,以分别允许 get 和 put。

至于成本,如果它在同一地区,它是免费的。从技术上讲,您不是将数据传输到互联网,而是将其传输到同一区域内的另一个 s3 存储桶。

最新更新