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

时间:2019-04-09 22:02:55

标签: amazon-web-services amazon-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错误

2 个答案:

答案 0 :(得分:3)

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

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

更多信息,请访问:https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/

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

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

答案 1 :(得分:2)

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

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

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

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

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

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

我首选第一种选择,因为目标帐户会将文件“拉”到其自己的帐户中,因此默认情况下它拥有文件。