使用 Amazon S3 配置 AWS DataSync 传输 - AWS DataSync

使用 Amazon S3 配置 AWS DataSync 传输

要将数据传入或传出您的 Amazon S3 存储桶,您需要创建一个 AWS DataSync 传输位置。DataSync 可以将此位置用作传输数据的源或目标。

向 DataSync 提供访问 S3 存储桶的权限

DataSync 需要访问权限,才能访问您要向其中传入或从其中传出数据的 S3 存储桶。为此,您必须创建一个 AWS Identity and Access Management(IAM)角色,该角色将由 DataSync 承担,并具有访问存储桶所需的权限。然后,在为 DataSync 创建 Amazon S3 位置时指定此角色。

所需的权限

您的 IAM 角色所需的权限取决于存储桶是 DataSync 源位置还是目标位置。Outposts 上的 Amazon S3 需要一组不同的权限。

Amazon S3 (source location)
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" }, { "Action": [ "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
Amazon S3 (destination location)
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } }, { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectTagging" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }
Amazon S3 on Outposts
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "s3-outposts:ListBucket", "s3-outposts:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": [ "arn:aws:s3-outposts:us-east-1:123456789012:outpost/outpost-id/bucket/amzn-s3-demo-bucket", "arn:aws:s3-outposts:us-east-1:123456789012:outpost/outpost-id/accesspoint/bucket-access-point-name" ] }, { "Action": [ "s3-outposts:AbortMultipartUpload", "s3-outposts:DeleteObject", "s3-outposts:GetObject", "s3-outposts:GetObjectTagging", "s3-outposts:GetObjectVersion", "s3-outposts:GetObjectVersionTagging", "s3-outposts:ListMultipartUploadParts", "s3-outposts:PutObject", "s3-outposts:PutObjectTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3-outposts:us-east-1:123456789012:outpost/outpost-id/bucket/amzn-s3-demo-bucket/*", "arn:aws:s3-outposts:us-east-1:123456789012:outpost/outpost-id/accesspoint/bucket-access-point-name/*" ] }, { "Action": "s3-outposts:GetAccessPoint", "Effect": "Allow", "Resource": "arn:aws:s3-outposts:us-east-1:123456789012:outpost/outpost-id/accesspoint/bucket-access-point-name" } ] }

为 DataSync 创建 IAM 角色以访问 Amazon S3 位置

在控制台中创建 Amazon S3 位置时,DataSync 可以自动创建并承担 IAM 角色,该角色通常具有访问 S3 存储桶的正确权限。

在某些情况下,您可能需要手动创建此角色(例如,访问具有额外安全层的存储桶,或对不同 AWS 账户 中的存储桶执行数据传入或传出操作)。

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格的访问管理下,选择角色,然后选择创建角色

  3. 选择可信实体页面中,为可信实体类型选择 AWS 服务

  4. 对于用例,在下拉列表中选择 DataSync,然后选择 DataSync。选择下一步

  5. 添加权限页面上,选择下一步。输入角色名称,然后选择创建角色

  6. 角色页面上,搜索您刚刚创建的角色并选择其名称。

  7. 在角色的详情页面上,选择权限选项卡。选择添加权限,然后选择创建内联策略

  8. 选择 JSON 选项卡,然后在策略编辑器中添加访问存储桶所需的权限

  9. 选择下一步。为您的策略输入名称,然后选择创建策略

  10. (推荐)为防止出现跨服务混淆代理问题,请执行以下操作:

    1. 在角色的详情页面上,选择信任关系选项卡。选择编辑信任策略

    2. 使用以下示例更新信任策略,其中包括 aws:SourceArnaws:SourceAccount 全局条件上下文键:

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "datasync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "444455556666" }, "ArnLike": { "aws:SourceArn": "arn:aws:datasync:us-east-1:444455556666:*" } } } ] }
    3. 选择更新策略

您可以在创建您的 Amazon S3 位置时指定此角色。

使用服务器端加密访问 S3 存储桶

DataSync 可以将数据传输到使用服务器端加密的 S3 存储桶,或从中复制数据。存储桶使用的加密密钥类型决定了您是否需要允许 DataSync 访问存储桶的自定义策略。

将 DataSync 与使用服务器端加密的 S3 存储桶结合使用时,请记住以下几点:

  • 如果您的 S3 存储桶使用 AWS 托管密钥加密 — 在默认情况下,如果您的所有资源都在同一个 AWS 账户 中,DataSync 可以访问该存储桶的对象。

  • 如果您的 S3 存储桶使用客户管理的 AWS Key Management Service(AWS KMS)密钥(SSE-KMS)加密密钥政策必须包含 DataSync 用于访问存储桶的 IAM 角色。

  • 如果您的 S3 存储桶使用客户管理的 SSE-KMS 密钥加密,并且位于不同的 AWS 账户 中:DataSync 需要权限才能访问其他 AWS 账户 中的存储桶。您可以通过以下步骤完成上述设置:

    • 在 DataSync 使用的 IAM 角色中,您必须使用密钥的完全限定 Amazon 资源名称(ARN)来指定跨账户存储桶的 SSE-KMS 密钥。该密钥 ARN 与您用来配置存储桶默认加密的密钥 ARN 相同。在这种情况下,您不能指定密钥 ID、别名名称或别名 ARN。

      下面是一个密钥 ARN 示例:

      arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

      有关在 IAM 策略声明中指定 KMS 密钥的更多信息,请参阅 AWS Key Management Service 开发人员指南

    • 在 SSE-KMS 密钥政策中,指定 DataSync 使用的 IAM 角色

  • 如果您的 S3 存储桶使用客户管理的 AWS KMS 密钥(DSSE-KMS)加密,以实现双层服务器端加密密钥政策必须包含 DataSync 用于访问存储桶的 IAM 角色。(请记住,DSSE-KMS 不支持可降低 AWS KMS 请求成本的 S3 存储桶密钥。)

  • 如果您的 S3 存储桶已使用客户提供的加密密钥 (SSE-C) 进行加密 — DataSync 将无法访问此存储桶。

以下示例是客户托管的 SSE-KMS 密钥的密钥政策。此政策与使用服务器端加密的 S3 存储桶关联。

如果要使用此示例,请将以下值替换为您自己的值:

  • account-id — 您的 AWS 账户。

  • admin-role-name:可以管理密钥的 IAM 角色名称。

  • datasync-role-name:允许 DataSync 在访问存储桶时使用密钥的 IAM 角色名称。

JSON
{ "Id": "key-consolepolicy-3", "Version":"2012-10-17", "Statement": [ { "Sid": "Enable IAM Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/admin-role-name" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/datasync-role-name" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*" } ] }

访问受限的 S3 存储桶

如果您需要向通常拒绝所有访问的 S3 存储桶传输数据,或从该存储桶传出数据,您可以编辑存储桶策略,使 DataSync 只能为您的传输访问存储桶。

  1. 复制以下 S3 存储桶策略。

    JSON
    { "Version":"2012-10-17", "Statement": [{ "Sid": "Deny-access-to-bucket", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringNotLike": { "aws:userid": [ "datasync-iam-role-id:*", "your-iam-role-id" ] } } }] }
  2. 在策略中,替换以下值:

    • amzn-s3-demo-bucket:指定受限 S3 存储桶的名称。

    • datasync-iam-role-id:指定 DataSync 用于访问存储桶的 IAM 角色的 ID。

      运行以下 AWS CLI 命令以创建 IAM 角色 ID:

      aws iam get-role --role-name datasync-iam-role-name

      在输出中,查找 RoleId 值:

      "RoleId": "ANPAJ2UCCR6DPCEXAMPLE"

    • your-iam-role-id:指定用于为存储桶创建 DataSync 位置的 IAM 角色的 ID。

      运行以下命令以创建 IAM 角色 ID:

      aws iam get-role --role-name your-iam-role-name

      在输出中,查找 RoleId 值:

      "RoleId": "AIDACKCEVSQ6C2EXAMPLE"

  3. 将此策略添加到 S3 存储桶策略中。

  4. 使用 DataSync 完成受限存储桶的操作后,从存储桶策略中移除这两个 IAM 角色的条件。

通过受限 VPC 的访问权限访问 S3 存储库

限制访问特定虚拟私有云(VPC)端点或 VPC 的 Amazon S3 存储桶将拒绝 DataSync 将数据传入或传出该存储桶。要在此类情况下启用传输,您可以更新存储桶的策略,使其包含您在 DataSync 位置中指定的 IAM 角色。

Option 1: Allowing access based on DataSync location role ARN

在 S3 存储桶策略中,您可以指定 DataSync 位置 IAM 角色的 Amazon 资源名称(ARN)。

以下示例是一个 S3 存储桶策略,除两个 VPC(vpc-1234567890abcdef0vpc-abcdef01234567890)之外,它将拒绝所有 VPC 访问。但是,该策略还包括 ArnNotLikeIfExists 条件和 aws:PrincipalArn 条件密钥,允许 DataSync 位置角色的 ARN 访问存储桶。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "Access-to-specific-VPCs-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-1234567890abcdef0", "vpc-abcdef01234567890" ] }, "ArnNotLikeIfExists": { "aws:PrincipalArn": [ "arn:aws:iam::111122223333:role/datasync-location-role-name" ] } } } ] }
Option 2: Allowing access based on DataSync location role tag

在 S3 存储桶策略中,您可以指定附加到 DataSync 位置 IAM 角色的标签。

以下示例是一个 S3 存储桶策略,除两个 VPC(vpc-1234567890abcdef0vpc-abcdef01234567890)之外,它将拒绝所有 VPC 访问。但是,该策略还包括 StringNotEqualsIfExists 条件和 aws:PrincipalTag 条件键,它们允许具有标签键 exclude-from-vpc-restriction 和值 true 的主体访问。您可以通过指定附加到 DataSync 位置角色的标签,在存储桶策略中尝试类似的方法。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "Access-to-specific-VPCs-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-1234567890abcdef0", "vpc-abcdef01234567890" ], "aws:PrincipalTag/exclude-from-vpc-restriction": "true" } } } ] }

Amazon S3 传输的存储类别注意事项

当您的目标位置是 Amazon S3 时,DataSync 可以将您的数据直接传输到指定的 Amazon S3 存储类别

有些存储类别的行为会影响您的 Amazon S3 存储成本。使用可能会因覆盖、删除或检索对象而产生额外费用的存储类别时,更改对象数据或元数据会产生此类费用。有关更多信息,请参阅 Amazon S3 定价

重要

传输到 Amazon S3 目标位置的新对象使用您在创建位置时指定的存储类别进行存储。

除非将任务配置为传输所有数据,否则 DataSync 默认保留目标位置中现有对象的存储类别。在这种情况下,创建位置时指定的存储类别适用于所有对象。

Amazon S3 存储类 注意事项
S3 标准 选择“S3 标准”将您经常访问的文件冗余存储在地理上分开的多个可用区中。如果您没有指定存储类别,则这是默认设置。
S3 智能分层

选择“S3 智能分层”,可通过自动将数据移动到最具成本效益的存储访问层来优化存储成本。

您需要为存储在 S3 智能分层存储类别中的每个对象按月支付相关费用。这项 Amazon S3 费用包括监控数据访问模式和在层之间移动对象。

S3 标准 - IA

选择“S3 标准 - IA”将您不常访问的对象冗余存储在地理上分开的多个可用区中。

存储在“S3 标准 - IA”存储类别中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。更改对象数据或元数据等同于删除一个对象后再创建一个新对象来替换它。这将导致存储在“S3 标准 - IA”存储类别中的对象产生额外费用。

小于 128 KB 的对象小于“S3 标准 - IA”存储类别中每个对象的最小容量费用。这些对象存储在 S3 标准存储类别中。

S3 单区 - IA

选择“S3 单区 - IA”:将您不常访问的对象存储在单个可用区中。

存储在“S3 单区 - IA”存储类别中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。更改对象数据或元数据等同于删除一个对象后再创建一个新对象来替换它。这会导致存储在“S3 单区 - IA”存储类别中的对象产生额外费用。

小于 128 KB 的对象小于“S3 单区 - IA”存储类别中每个对象的最小容量费用。这些对象存储在 S3 标准存储类别中。

S3 Glacier Instant Retrieval

选择“S3 Glacier 即时检索”可存档很少访问但需要在毫秒内检索的对象。

与“S3 标准-IA”存储类别相比,存储在“S3 Glacier 即时检索”存储类中的数据可以节省成本,同时享有与“S3 标准-IA”存储类别相同的延迟和吞吐量性能。“S3 Glacier 即时检索”的数据访问成本高于“S3 标准-IA”。

存储在“S3 Glacier 即时检索”存储类中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。更改对象数据或元数据等同于删除一个对象后再创建一个新对象来替换它。这会导致存储在“S3 Glacier 即时检索”存储类别中的对象产生额外费用。

小于 128 KB 的对象小于“S3 Glacier 即时检索”存储类别中每个对象的最小容量费用。这些对象存储在 S3 标准存储类别中。

S3 Glacier 灵活检索

选择“S3 Glacier 灵活检索”,获取更多活跃档案。

存储在“S3 Glacier 灵活检索”存储类中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。更改对象数据或元数据等同于删除一个对象后再创建一个新对象来替换它。这会导致存储在“S3 Glacier 灵活检索”存储类别中的对象产生额外费用。

S3 Glacier Flexible Retrieval 存储类别要求为每个归档对象提供 40KB 的额外元数据。DataSync 会将小于 40KB 的对象放入 S3 标准存储类别。

您必须先恢复存储在此存储类别中的对象,然后 DataSync 才能读取它们。有关信息,请参阅《Amazon S3 用户指南》中的使用已归档的对象

使用“S3 Glacier 灵活检索”时,请选择仅验证传输的数据任务选项,以便在传输结束时比较数据和元数据校验和。不能对此存储类别使用验证目标中的所有数据选项,因为它需要检索目标中的所有现有对象。

S3 Glacier 深度存档

选择“S3 Glacier 深度存档”来存档文件,以提供长期数据留存和数字保留,每年可以在其中访问一次或两次数据。

存储在“S3 Glacier 深度存档”存储类中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。更改对象数据或元数据等同于删除一个对象后再创建一个新对象来替换它。这会导致存储在“S3 Glacier 深度存档”存储类别中的对象产生额外费用。

S3 Glacier Deep Archive 存储类别要求为每个归档对象提供 40KB 的额外元数据。DataSync 会将小于 40KB 的对象放入 S3 标准存储类别。

您必须先恢复存储在此存储类别中的对象,然后 DataSync 才能读取它们。有关信息,请参阅《Amazon S3 用户指南》中的使用已归档的对象

使用“S3 Glacier 深度存档”时,请选择仅验证传输的数据任务选项,以便在传输结束时比较数据和元数据校验和。不能对此存储类别使用验证目标中的所有数据选项,因为它需要检索目标中的所有现有对象。

S3 Outposts

Amazon S3 on Outposts 的存储类别。

评估使用 DataSync 时的 S3 申请费用

对于 Amazon S3 位置,您需要支付与 DataSync 发出的 S3 API 请求相关的费用。本节可以帮助您了解 DataSync 是如何使用这些请求的,以及它们会如何影响您的 Amazon S3 成本

DataSync 发出的 S3 请求

下表描述了当您将数据复制到 Amazon S3 位置或从其中复制数据时,DataSync 可以发出的 S3 请求。

S3 请求 DataSync 是如何使用它的

ListObjectV2

DataSync 向每个以正斜杠 (/) 结尾的对象发出至少一个 LIST 请求,以列出以该前缀开头的对象。此请求是在任务的准备阶段调用的。

HeadObject

在任务的准备验证阶段,DataSync 会发出 HEAD 请求以检索对象元数据。每个对象可以有多个 HEAD 请求,具体取决于您希望 DataSync 如何验证其传输的数据的完整性

GetObject

在任务的传输阶段,DataSync 会发出从对象读取数据的 GET 请求。对于大型对象可能会发出多个 GET 请求。

GetObjectTagging

如果您将任务配置为复制对象标签,则在任务的准备传输阶段,DataSync 会发出这些 GET 请求以检查对象标签。

PutObject

在任务的传输阶段,DataSync 会发出 PUT 请求以在目标 S3 存储桶中创建对象和前缀。由于 DataSync 使用 Amazon S3 分段上传功能,因此可能会有多个针对大型对象的 PUT 请求。为了最大限度地降低您的存储成本,我们建议您使用生命周期配置来停止未完成的分段上传。

PutObjectTagging

如果您的源对象有标签,并且您将任务配置为复制对象标签,则 DataSync 会在传输这些标签时发出这些 PUT 请求。

CopyObject

只有在对象的元数据发生更改时,DataSync 才会发出 COPY 请求以创建该对象的副本。如果您最初使用未保留其元数据的其他服务或工具将数据复制到 S3 存储桶,则可能会发生这种情况。

费用注意事项

每次运行任务时,DataSync 都会在 S3 存储桶上发出 S3 请求。在某些情况下,这可能会导致费用增加。例如:

  • 您经常将对象传入或传出 S3 存储桶。

  • 您可能没有传输太多数据,但是您的 S3 存储桶里有很多对象。在这种情况下,您仍然可能被收取高额费用,因为 DataSync 会对存储桶的每个对象发出 S3 请求。

  • 您在 S3 存储桶之间进行传输,因此 DataSync 正在源存储桶和目标存储桶上发出 S3 请求。

为了帮助最大限度地降低与 DataSync 相关的 S3 请求成本,请考虑以下几点:

我使用的是哪些 S3 存储类别?

S3 请求费用可能因对象使用的 Amazon S3 存储类别而有所不同,特别是对于存储对象的存储类别(例如 S3 Glacier 即时检索、S3 Glacier 灵活检索和 S3 Glacier 深度存档)。

以下是一些在使用 DataSync 时存储类别可能会影响您的 S3 请求费用的场景:

  • 每次运行任务时,DataSync 都会发出检索对象元数据的 HEAD 请求。即使您没有移动任何对象,这些请求也会产生费用。这些请求对账单的影响程度取决于您的对象使用的存储类别以及 DataSync 扫描的对象数量。

  • 如果您将对象移至 S3 Glacier 即时检索存储类别(直接或通过存储桶生命周期配置),则对该类中对象的请求比其他存储类别中的对象更昂贵。

  • 如果您将 DataSync 任务配置为验证源位置和目标位置是否完全同步,则所有存储类别(S3 Glacier 灵活检索和 S3 Glacier 深度存档除外)中的每个对象都将收到 GET 请求。

  • 除了 GET 请求之外,您还会产生 S3 标准-IA、S3 单区-IA 或 S3 Glacier 即时检索存储类别中的对象的数据检索成本。

有关更多信息,请参阅 Amazon S3 定价

我需要多久传输一次数据?

如果您需要定期移动数据,请考虑一个不会超出所需任务的时间表

您也可以考虑限制传输范围。例如,您可以将 DataSync 配置为聚焦于某些前缀中的对象,或者筛选要传输的数据。这些选项可以帮助减少每次运行 DataSync 任务时发出的 S3 请求数量。

Amazon S3 传输的对象注意事项

  • 如果您要从 S3 存储桶中传输,请使用 S3 Storage Lens 存储分析功能确定要移动的对象数量。

  • 在 S3 存储桶之间传输时,建议使用增强型任务模式,因为这种传输不受 DataSync 任务配额的约束。

  • DataSync 可能无法传输名称中包含非标准字符的对象。有关更多信息,请参阅《Amazon S3 用户指南》中的对象键命名指南

  • 将 DataSync 与使用版本控制的 S3 存储桶结合使用时,请记住以下几点:

    • 传输到 S3 存储桶时,如果在源位置修改了对象,DataSync 会创建该对象的新版本。这会导致额外收费。

    • 对象在源存储桶和目标存储桶中具有不同的版本 ID。

    • 只有每个对象的最新版本才会从源存储桶传输。早期版本不会复制到目标。

  • 在最初将数据从 S3 存储桶传输到文件系统(例如 NFS 或 Amazon FSx)后,随后运行的同一 DataSync 任务将不包括已修改但大小与第一次传输时相同的对象。

为 Amazon S3 通用存储桶创建传输位置

要创建用于传输的位置,您需要一个现有的 S3 通用存储桶。如果还没有存储桶,请参阅《Amazon S3 用户指南》

重要
  1. 打开 AWS DataSync 控制台,地址:https://console.aws.amazon.com/datasync/

  2. 在左侧导航窗格中,展开数据传输,然后选择 位置创建位置

  3. 对于位置类型,选择 Amazon S3,然后选择通用存储桶

  4. 对于 S3 URI,输入或选择要用于相应位置的存储桶和前缀。

    警告

    DataSync 无法传输前缀以斜杠(/)开头或包含 ///.//../ 模式的对象。例如:

    • /photos

    • photos//2006/January

    • photos/./2006/February

    • photos/../2006/March

  5. 对于 用作目标时的 S3 存储类别,请选择您希望对象在以 Amazon S3 为传输目标时使用的存储类别。

    有关更多信息,请参阅 Amazon S3 传输的存储类别注意事项

  6. 对于 IAM 角色,执行以下操作之一:

    • 选择自动创建,以让 DataSync 自动创建具有访问 S3 存储桶所需权限的 IAM 角色。

      如果 DataSync 之前为该 S3 存储桶创建过 IAM 角色,则默认选择该角色。

    • 选择您创建的自定义 IAM 角色。有关更多信息,请参阅 为 DataSync 创建 IAM 角色以访问 Amazon S3 位置

  7. (可选)选择添加新标签以标记您的 Amazon S3 位置。

    标签可帮助您管理、筛选和搜索资源。我们建议为您的位置创建一个名称标签。

  8. 选择创建位置

  1. 复制以下 create-location-s3 命令:

    aws datasync create-location-s3 \ --s3-bucket-arn 'arn:aws:s3:::amzn-s3-demo-bucket' \ --s3-storage-class 'your-S3-storage-class' \ --s3-config 'BucketAccessRoleArn=arn:aws:iam::account-id:role/role-allowing-datasync-operations' \ --subdirectory /your-prefix-name
  2. 对于 --s3-bucket-arn,指定要用作位置的 S3 存储桶的 ARN。

  3. 对于 --s3-storage-class,指定您希望对象在以 Amazon S3 为传输目标时使用的存储类别。

  4. 对于 --s3-config,请指定 DataSync 访问存储桶时所需 IAM 角色的 ARN。

    有关更多信息,请参阅 为 DataSync 创建 IAM 角色以访问 Amazon S3 位置

  5. 对于 --subdirectory,指定 S3 存储桶中的一个前缀,DataSync 将从该存储桶读取数据或向其写入数据(取决于该存储桶是源位置还是目标位置)。

    警告

    DataSync 无法传输前缀以斜杠(/)开头或包含 ///.//../ 模式的对象。例如:

    • /photos

    • photos//2006/January

    • photos/./2006/February

    • photos/../2006/March

  6. 运行 create-location-s3 命令。

    如果命令成功,您将收到一条响应,显示您创建位置的 ARN。例如:

    { "LocationArn": "arn:aws:datasync:us-east-1:111222333444:location/loc-0b3017fc4ba4a2d8d" }

您可以将此位置用作 DataSync 任务的源位置或目标位置。

为 S3 on Outposts 存储桶创建传输位置

要创建用于传输的位置,您需要一个现有的 Amazon S3 on Outposts 存储桶。如果还没有存储桶,请参阅《Amazon S3 on Outposts 用户指南》

您还需要 DataSync 代理。有关更多信息,请参阅 在 AWS Outposts 上部署代理

从包含大型数据集(例如数十万或数百万个对象)的 S3 on Outposts 存储桶前缀传输数据时,您的 DataSync 任务可能会超时。为避免这种情况,可以考虑使用 DataSync 清单,它允许您指定需要传输的确切对象。

  1. 打开 AWS DataSync 控制台,地址:https://console.aws.amazon.com/datasync/

  2. 在左侧导航窗格中,展开数据传输,然后选择 位置创建位置

  3. 对于位置类型,选择 Amazon S3,然后选择 Outposts 存储桶

  4. 对于 S3 存储桶,请选择一个可以访问 S3 on Outposts 存储桶的 Amazon S3 接入点。

    有关更多信息,请参阅 Amazon S3 用户指南

  5. 对于 用作目标时的 S3 存储类别,请选择您希望对象在以 Amazon S3 为传输目标时使用的存储类别。

    有关更多信息,请参阅 Amazon S3 传输的存储类别注意事项。对于 Amazon S3 on Outposts,DataSync 默认使用 S3 Outposts 存储类别。

  6. 对于代理,请指定 Outpost 上的 DataSync 代理的 Amazon 资源名称(ARN)。

  7. 对于文件夹,请在 DataSync 从其读取或向其写入(取决于存储桶是源位置还是目标位置)的 S3 存储桶中输入前缀。

    警告

    DataSync 无法传输前缀以斜杠(/)开头或包含 ///.//../ 模式的对象。例如:

    • /photos

    • photos//2006/January

    • photos/./2006/February

    • photos/../2006/March

  8. 对于 IAM 角色,执行以下操作之一:

    • 选择自动创建,以让 DataSync 自动创建具有访问 S3 存储桶所需权限的 IAM 角色。

      如果 DataSync 之前为该 S3 存储桶创建过 IAM 角色,则默认选择该角色。

    • 选择您创建的自定义 IAM 角色。有关更多信息,请参阅 为 DataSync 创建 IAM 角色以访问 Amazon S3 位置

  9. (可选)选择添加新标签以标记您的 Amazon S3 位置。

    标签可帮助您管理、筛选和搜索资源。我们建议为您的位置创建一个名称标签。

  10. 选择创建位置

  1. 复制以下 create-location-s3 命令:

    aws datasync create-location-s3 \ --s3-bucket-arn 'bucket-access-point' \ --s3-storage-class 'your-S3-storage-class' \ --s3-config 'BucketAccessRoleArn=arn:aws:iam::account-id:role/role-allowing-datasync-operations' \ --subdirectory /your-folder \ --agent-arns 'arn:aws:datasync:your-region:account-id::agent/agent-agent-id'
  2. 对于 --s3-bucket-arn,指定一个可访问 Amazon S3 on Outposts 存储桶的 Amazon S3 接入点。

    有关更多信息,请参阅 Amazon S3 用户指南

  3. 对于 --s3-storage-class,指定您希望对象在以 Amazon S3 为传输目标时使用的存储类别。

    有关更多信息,请参阅 Amazon S3 传输的存储类别注意事项。对于 Amazon S3 on Outposts,DataSync 默认使用 S3 Outposts 存储类别。

  4. 对于 --s3-config,请指定 DataSync 访问存储桶时所需 IAM 角色的 ARN。

    有关更多信息,请参阅 为 DataSync 创建 IAM 角色以访问 Amazon S3 位置

  5. 对于 --subdirectory,指定 S3 存储桶中的一个前缀,DataSync 将从该存储桶读取数据或向其写入数据(取决于该存储桶是源位置还是目标位置)。

    警告

    DataSync 无法传输前缀以斜杠(/)开头或包含 ///.//../ 模式的对象。例如:

    • /photos

    • photos//2006/January

    • photos/./2006/February

    • photos/../2006/March

  6. 对于 --agent-arns,指定 Outpost 上 DataSync 代理的 ARN。

  7. 运行 create-location-s3 命令。

    如果命令成功,您将收到一条响应,显示您创建位置的 ARN。例如:

    { "LocationArn": "arn:aws:datasync:us-east-1:111222333444:location/loc-0b3017fc4ba4a2d8d" }

您可以将此位置用作 DataSync 任务的源位置或目标位置。

跨 AWS 账户 的 Amazon S3 传输

借助 DataSync,您可以将数据移入或移出不同的 AWS 账户。有关更多信息,请参阅以下教程:

商业区域和 AWS GovCloud (US) Regions 之间的 Amazon S3 传输

默认情况下,DataSync 不会在商业区域和 AWS GovCloud (US) Regions 的 S3 存储桶之间传输。但您仍然可以在传输中为一个 S3 存储桶创建对象存储位置,从而设置这种传输。无论使用不使用代理,都可以执行这种类型的传输。如果使用代理,必须将任务配置为基本模式。要在没有代理的情况下进行传输,就必须使用增强模式。

开始之前:请确保了解在区域间进行传输的成本影响。有关更多信息,请参阅 AWS DataSync 定价

向 DataSync 提供访问对象存储位置存储桶的权限

在为此传输创建对象存储位置时,您必须向 DataSync 提供具有访问该位置 S3 存储桶权限的 IAM 用户凭证。有关更多信息,请参阅 所需的权限

警告

IAM 用户具有长期凭证,这会带来安全风险。为帮助减轻这种风险,我们建议仅向这些用户提供执行任务所需的权限,并在不再需要这些用户时将其移除。

创建您的 DataSync 代理(可选)

如果要使用基本模式运行传输,就需要使用代理。由于您是在商业区域和 AWS GovCloud (US) Region 之间进行传输,因此您要在其中一个区域中将 DataSync 代理作为 Amazon EC2 实例部署。我们建议您的代理使用 VPC 服务端点,以避免将数据传输至公共互联网时产生的费用。有关更多信息,请参阅 Amazon EC2 数据传输定价

根据您计划运行 DataSync 任务的区域,从下方描述如何创建代理的情景中选择一个。

下图展示了 DataSync 任务和代理都位于商业区域的传输。

部署在商业区域的 DataSync 代理,用于实现向 AWS GovCloud (US) Region 中 S3 存储桶的跨区域传输。
参考 描述
1 在运行 DataSync 任务的商业区域中,从源 S3 存储桶传输数据。源存储桶配置为商业区域中的 Amazon S3 位置
2 通过 DataSync 代理传输数据,该代理位于 VPC 服务端点和网络接口所在的相同 VPC 和子网中。
3 数据传输至 AWS GovCloud (US) Region 中的目标 S3 存储桶。目标存储桶配置为商业区域中的对象存储位置

您也可以使用相同的设置,从 AWS GovCloud (US) Region 向商业区域进行相反方向的传输。

要创建 DataSync 代理
  1. 在您的商业区域部署 Amazon EC2 代理

  2. 将您的代理配置为使用 VPC 服务端点

  3. 激活您的代理

下图展示了 DataSync 任务和代理都位于 AWS GovCloud (US) Region 的传输。

DataSync 代理部署在 AWS GovCloud (US) Region 中,或进行跨区域传输至相同 AWS GovCloud (US) Region 中的 S3 存储桶。
参考 描述
1 数据从商业区域的源 S3 存储桶传输到正在运行 DataSync 任务的 AWS GovCloud (US) Region。源存储桶配置为 AWS GovCloud (US) Region 中的对象存储位置
2 在 AWS GovCloud (US) Region 中,数据通过 DataSync 代理,在 VPC 服务端点和网络接口所在的相同 VPC 和子网中传输。
3 数据传输至 AWS GovCloud (US) Region 中的目标 S3 存储桶。目标存储桶被配置为 AWS GovCloud (US) Region 中的 Amazon S3 位置

您也可以使用相同的设置,从 AWS GovCloud (US) Region 向商业区域进行相反方向的传输。

要创建 DataSync 代理
  1. 在 AWS GovCloud (US) Region 中部署 Amazon EC2 代理

  2. 将您的代理配置为使用 VPC 服务端点

  3. 激活您的代理

如果您的数据集具有高度可压缩性,您可以在商业区域创建代理,同时在 AWS GovCloud (US) Region 运行任务,这样可能会降低成本。与通常情况相比,创建此代理需要进行更多的设置,包括为在商业区域使用代理做好准备。有关为此设置创建代理的信息,请参阅 Move data in and out of AWS GovCloud (US) with AWS DataSync 博客文章。

为 S3 存储桶创建对象存储位置

如果 S3 存储桶位于不运行 DataSync 任务的区域,您需要为其设置对象存储位置。

  1. 打开 AWS DataSync 控制台,地址:https://console.aws.amazon.com/datasync/

  2. 确保您处于计划运行任务的同一区域。

  3. 在左侧导航窗格中,展开数据传输,然后选择 位置创建位置

  4. 对于 位置类型,选择 对象存储

  5. 对于代理,选择为此传输创建的 DataSync 代理。

  6. 对于服务器,使用以下格式之一为存储桶输入 Amazon S3 端点:

    • 商业区域存储桶:s3.your-region.amazonaws.com

    • AWS GovCloud (US) Region 存储桶s3.your-gov-region.amazonaws.com

    有关 Amazon S3 端点的列表,请参阅 AWS 一般参考

  7. 对于存储桶名称,请输入 S3 存储桶的名称。

  8. 对于文件夹,请在 DataSync 从其读取或向其写入(取决于存储桶是源位置还是目标位置)的 S3 存储桶中输入前缀。

    警告

    DataSync 无法传输前缀以斜杠(/)开头或包含 ///.//../ 模式的对象。例如:

    • /photos

    • photos//2006/January

    • photos/./2006/February

    • photos/../2006/March

  9. 选择需要凭证,然后执行以下操作:

    • 对于访问密钥,输入可以访问存储桶的 IAM 用户的访问密钥。

    • 对于私有密钥,输入同一 IAM 用户的私有密钥。

  10. (可选)选择 添加标签来标记您的位置。

    标签可帮助您管理、筛选和搜索资源。我们建议为您的位置创建一个名称标签。

  11. 选择创建位置

  1. 复制以下 create-location-object-storage 命令:

    aws datasync create-location-object-storage \ --server-hostname s3-endpoint \ --bucket-name amzn-s3-demo-bucket \ --agent-arns arn:aws:datasync:your-region:123456789012:agent/agent-01234567890deadfb
  2. 对于 --server-hostname 参数,使用以下格式之一,为存储桶指定 Amazon S3 端点:

    • 商业区域存储桶:s3.your-region.amazonaws.com

    • AWS GovCloud (US) Region 存储桶s3.your-gov-region.amazonaws.com

    对于端点中的区域,确保指定的区域与计划运行任务的区域相同。

    有关 Amazon S3 端点的列表,请参阅 AWS 一般参考

  3. 对于 --bucket-name 参数,指定 S3 存储桶的名称。

  4. 对于 --agent-arns 参数,指定为此传输创建的 DataSync 代理。

  5. 对于 --access-key 参数,指定可以访问存储桶的 IAM 用户的访问密钥。

  6. 对于 --secret-key 参数,输入同一 IAM 用户的私有密钥。

  7. (可选)对于 --subdirectory 参数,指定 S3 存储桶中的一个前缀,DataSync 将从该存储桶读取数据或向其写入数据(取决于该存储桶是源位置还是目标位置)。

    警告

    DataSync 无法传输前缀以斜杠(/)开头或包含 ///.//../ 模式的对象。例如:

    • /photos

    • photos//2006/January

    • photos/./2006/February

    • photos/../2006/March

  8. (可选)对于 --tags 参数,指定代表位置资源标签的键值对。

    标签可帮助您管理、筛选和搜索资源。我们建议为您的位置创建一个名称标签。

  9. 运行 create-location-object-storage 命令。

    您会收到一条回复,表明您刚刚创建的位置 ARN。

    { "LocationArn": "arn:aws:datasync:us-east-1:123456789012:location/loc-01234567890abcdef" }

您可以将此位置用作 DataSync 任务的源位置或目标位置。对于此传输中的其他 S3 存储桶,创建一个 Amazon S3 位置

后续步骤

后续可能采取的一些步骤包括:

  1. 如果需要,创建其他位置。有关更多信息,请参阅 我可以在哪里通过 AWS DataSync 传输数据?

  2. 配置 DataSync 任务设置,例如要传输哪些文件、如何处理元数据等选项。

  3. 为 DataSync 任务设置时间计划

  4. 为 DataSync 任务配置监控

  5. 开始任务。