在 DynamoDB 中请求表导入 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 DynamoDB 中请求表导入

通过 DynamoDB 导入,您可以将数据从 Amazon S3 存储桶导入新 DynamoDB 表。您可以使用 DynamoDB 控制台CLICloudFormationDynamoDB API 请求表导入。

如果要使用 Amazon CLI,必须先对其进行配置。有关更多信息,请参阅访问 DynamoDB

注意
  • “导入表”功能与多个不同的 Amazon 服务(例如 Amazon S3 和 CloudWatch)交互。在开始导入之前,请确保调用导入 API 的用户或角色有权访问该功能所依赖的所有服务和资源。

  • 不要在导入过程中修改 Amazon S3 对象,否则可能会导致操作失败或被取消。

有关错误和故障排除的更多信息,请参阅 导入格式配额和验证

设置 IAM 权限

可以从您具有读取权限的任何 Amazon S3 存储桶导入数据。源存储桶无需与源表位于同一区域或具有同一所有者。您的 Amazon Identity and Access Management (IAM) 必须包含对源 Amazon S3 存储桶的相关操作,以及提供调试信息所需的 CloudWatch 权限。下面显示了一个示例策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBImportAction", "Effect": "Allow", "Action": [ "dynamodb:ImportTable", "dynamodb:DescribeImport", "dynamodb:ListImports" ], "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Sid": "AllowS3Access", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::your-bucket/*" }, { "Sid": "AllowCloudwatchAccess", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws-dynamodb/*" } ] }

Amazon S3 权限

在另一个账户拥有的 Amazon S3 存储桶源上开始导入时,请确保该角色或用户有权访问 Amazon S3 对象。您可以通过执行 Amazon S3 GetObject 命令并使用凭据进行检查。使用 API 时,Amazon S3 存储桶拥有者参数默认为当前用户的账户 ID。对于跨账户导入,请确保使用存储桶拥有者的账户 ID 正确填充此参数。下面的代码是源账户中的示例 Amazon S3 存储桶策略。

{ "Version": "2012-10-17", "Statement": [ {"Sid": "ExampleStatement", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }

KMS

创建用于导入的新表时,如果您选择的静态加密密钥不属于 DynamoDB,则必须提供操作使用 CM-CMK 加密的 DynamoDB 表所需的 Amazon KMS 权限。有关更多信息,请参阅授权使用 Amazon KMS 密钥。如果 Amazon S3 对象使用 SSE-KMS 加密,请确保启动导入的角色或用户有权使用 Amazon KMS 密钥进行解密。此功能不支持 SSE-C 加密的 Amazon S3 对象。

CloudWatch 权限

启动导入的角色或用户针对与导入关联的日志组和日志流,将需要具有创建和管理权限。

请求使用 Amazon Web Services Management Console 导入

以下示例演示如何使用 DynamoDB 控制台将现有数据导入名为 MusicCollection 的新表中。

请求表导入
  1. 登录 Amazon Web Services Management Console,并打开 DynamoDB 控制台:https://console.aws.amazon.com/dynamodb/

  2. 在控制台左侧的导航窗格中,选择 Import from S3(从 S3 导入)。

  3. 在显示的页面上选择 Import from S3(从 S3 导入)。

  4. 选择 Import from S3(从 S3 导入)。

  5. 输入 Amazon S3 源 URL。

    如果源存储桶是您的账户所有的,可以使用 Browse S3(浏览 S3)按钮查找。或者,您可以输入 s3://bucket/prefix 格式的存储桶 URL。prefix 是一个 Amazon S3 键前缀,它既可以是您要导入的 Amazon S3 对象名称,也可以是由您要导入的所有 Amazon S3 对象共享的键前缀。

  6. 指定您是否是 S3 存储桶拥有者。如果源存储桶由其他账户拥有,请选择一个不同的 Amazon 账户。然后输入存储桶拥有者的账户 ID。

  7. Import file compression(导入文件压缩)下,根据需要选择 No compression(不压缩)、GZIPZSTD

  8. 选择适当的导入文件格式。选项有 DynamoDB JSONAmazon IonCSV。如果选择 CSV,您将有两个额外的选项:CSV header(CSV 标头)和 CSV delimiter character(CSV 分隔符)。

    对于 CSV header(CSV 标头),选择是从文件的第一行获取标头还是进行自定义。如果选择 Customize your headers(自定义标头),可以指定导入时要使用的标头值。此方法指定的 CSV 标头区分大小写,并且应包含目标表的键。

    对于 CSV delimiter character(CSV 分隔符),您可以设置用于分隔项目的字符。默认选择的是逗号。如果您选择 Custom delimiter character(自定义分隔符),则分隔符必须与正则表达式模式匹配:[,;:|\t ]

  9. 选择 Next(下一步)按钮,然后为将创建用于存储数据的新表选择选项。

    注意

    主键和排序键必须与文件中的属性匹配,否则导入将失败。属性区分大小写。

  10. 选择 Next(下一步)再次查看您的导入选项,然后单击 Import(导入)开始导入任务。您将首先看到您的新表在“Tables”(表)中列出,状态为“Creating”(正在创建)。此时无法访问该表。

  11. 导入完成后,状态将显示为“Active”(活动),此时可以开始使用该表。

在 Amazon Web Services Management Console 中获取以前导入的详细信息

单击导航侧边栏的 Import from S3(从 S3 导入),然后选择 Imports(导入)选项卡,查找过去运行的导出任务的信息。导入面板包含过去 90 天创建的所有导入的列表。选择“Imports”(导入)选项卡中列出任务的 ARN 将检索该导入的信息,包括您选择的任何高级配置设置。

请求使用 Amazon CLI 导入

以下示例将 CSV 格式的数据从名为 bucket 且前缀为 prefix 的 S3 存储桶导入到名为 target-table 的新表中。

aws dynamodb import-table --s3-bucket-source S3Bucket=bucket,S3KeyPrefix=prefix \ --input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"hk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"hk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}' \ --input-format-options '{"Csv": {"HeaderList": ["hk", "title", "artist", "year_of_release"], "Delimiter": ";"}}'
注意

如果选择使用 Amazon Key Management Service (Amazon KMS) 保护的密钥对导入进行加密,密钥必须与目标 Amazon S3 存储桶位于同一区域。

在 Amazon CLI 中获取以前导入的详细信息

您可以使用 list-imports 命令,查找以前运行的导入任务信息。此命令返回过去 90 天创建的所有导入的列表。请注意,尽管导入任务元数据会在 90 天后过期,列表中不再显示早于该日期的作业,但 DynamoDB 不会删除 Amazon S3 存储桶中的任何对象或导入期间创建的表。

aws dynamodb list-imports

要检索有关特定导入任务的详细信息(包括任何高级配置设置),请使用 describe-import 命令。

aws dynamodb describe-import \ --import-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/exp