1亿个文件的跨账户S3副本

Cross account S3 copy of 100Million files

我有 1 亿个小的 csv 文件,我必须将它们从一个 aws 帐户复制到另一个。

我尝试使用 boto3 进行并行 S3 复制,还尝试使用 aws sync。但是由于文件量较大,我无法在合理的时间内完成。

有什么方法可以将如此大量的文件从一个帐户复制到另一个帐户的 S3 存储桶中。

您可以:

参见:Cross-account bulk transfer of files using Amazon S3 Batch Operations | AWS Storage Blog

假设您想在帐户(​​A 和 B)之间传输文件。

将存储桶策略附加到账户 A 中的源存储桶

1 获取账户 B(目标账户)中 IAM 身份(用户或角色)的亚马逊资源名称 (ARN)。 2 从账户 A 中,将存储桶策略附加到源存储桶,允许账户 B 中的 IAM 身份获取对象

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::222222222222:user/Jane"},
            "Action": ["s3:ListBucket","s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::awsexamplesourcebucket/*",
                "arn:aws:s3:::awsexamplesourcebucket"
            ]
        }
    ]
}

将 IAM 策略附加到账户 B 中的用户或角色

  1. 从账户 B 创建一个 IAM 客户托管策略,允许 IAM 用户或角色将对象从账户 A 的源存储桶复制到账户 B 的目标存储桶。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplesourcebucket",
                "arn:aws:s3:::awsexamplesourcebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::awsexampledestinationbucket",
                "arn:aws:s3:::awsexampledestinationbucket/*"
            ]
        }
    ]
}

  1. 将客户托管策略附加到您要用于在账户之间复制对象的 IAM 用户或角色。

使用账户 B 中的 IAM 用户或角色执行 cross-account 复制

设置存储桶策略和 IAM 策略后,账户 B 中的 IAM 用户或角色可以执行从账户 A 到账户 B 的复制。然后,账户 B 拥有复制的对象。

要将账户 A 中源存储桶中的所有内容同步到账户 B 中的目标存储桶,账户 B 中的 IAM 用户或角色可以 运行 使用 AWS 命令​​行界面 (AWS CLI ):

aws s3 sync s3://awsexamplesourcebucket s3://awsexampledestinationbucket

AWS Refrence