1亿个文件的跨账户S3副本
Cross account S3 copy of 100Million files
我有 1 亿个小的 csv 文件,我必须将它们从一个 aws 帐户复制到另一个。
我尝试使用 boto3 进行并行 S3 复制,还尝试使用 aws sync。但是由于文件量较大,我无法在合理的时间内完成。
有什么方法可以将如此大量的文件从一个帐户复制到另一个帐户的 S3 存储桶中。
您可以:
- 使用Amazon S3 Inventory生成对象列表,它可以提供列出所有对象的每日或每周CSV文件
- 将列表传递给 S3 Batch Operations 并将其配置为执行 复制 操作
参见: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 中的用户或角色
- 从账户 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/*"
]
}
]
}
- 将客户托管策略附加到您要用于在账户之间复制对象的 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
我有 1 亿个小的 csv 文件,我必须将它们从一个 aws 帐户复制到另一个。
我尝试使用 boto3 进行并行 S3 复制,还尝试使用 aws sync。但是由于文件量较大,我无法在合理的时间内完成。
有什么方法可以将如此大量的文件从一个帐户复制到另一个帐户的 S3 存储桶中。
您可以:
- 使用Amazon S3 Inventory生成对象列表,它可以提供列出所有对象的每日或每周CSV文件
- 将列表传递给 S3 Batch Operations 并将其配置为执行 复制 操作
参见: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 中的用户或角色
- 从账户 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/*"
]
}
]
}
- 将客户托管策略附加到您要用于在账户之间复制对象的 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