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

问题描述 投票:-1回答:2

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

尝试将此策略附加到目标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错误

amazon-web-services amazon-s3
2个回答
2
投票

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

最简单的方法是使用AWS Command-Line Interface (CLI)aws s3 cp命令使用aws s3 sync。它将代表您致电CopyObject()。例如:

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

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

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

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

我更喜欢第一个选项,因为目标帐户将文件“拉”到自己的帐户中,因此它默认拥有这些文件。


3
投票

最简单的方法是使用同步,这很简单:

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

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

您还必须调整源和目标存储桶的存储桶策略以分别允许获取和放置。

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

© www.soinside.com 2019 - 2024. All rights reserved.