在 DynamoDB 中请求表导入 - Amazon DynamoDB

在 DynamoDB 中请求表导入

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

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

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

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

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

设置 IAM 权限

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBImportAction", "Effect": "Allow", "Action": [ "dynamodb:ImportTable", "dynamodb:DescribeImport" ], "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/*", "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/*" }, { "Sid": "AllowDynamoDBListImports", "Effect": "Allow", "Action": "dynamodb:ListImports", "Resource": "*" } ] }

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/*" } ] }

AWS Key Management Service

创建用于导入的新表时,如果您选择的静态加密密钥不是由 DynamoDB 拥有,则必须提供相应的 AWS KMS 权限,这些权限是操作使用客户自主管理型密钥加密的 DynamoDB 表所需要的。有关更多信息,请参阅授权使用 AWS KMS 密钥。如果 Amazon S3 对象使用服务器端加密 KMS(SSE-KMS)进行加密,请确保启动导入的角色或用户有权使用 AWS KMS 密钥进行解密。此功能不支持使用客户提供的加密密钥(SSE-C)加密的 Amazon S3 对象。

CloudWatch 权限

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

请求使用 AWS Management Console 导入

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

请求表导入
  1. 登录 AWS 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. 源 S3 URL 中,输入 Amazon S3 源 URL。

    如果您拥有源存储桶,请选择浏览 S3 来搜索该存储桶。或者,按以下格式输入存储桶的 URL:s3://bucket/prefixprefix 是 Amazon S3 键前缀。它既可以是您要导入的 Amazon S3 对象名称,也可以是由您要导入的所有 Amazon S3 对象共享的键前缀。

    注意

    您不能使用与 DynamoDB 导出请求相同的前缀。导出功能为所有导出创建文件夹结构和清单文件。如果您使用相同的 Amazon S3 路径,则会导致错误。

    相反,您应将导入指向包含来自该特定导出的数据的文件夹。在这种情况下,正确路径的格式将是 s3://bucket/prefix/AWSDynamoDB/<XXXXXXXX-XXXXXX>/Data/,其中 XXXXXXXX-XXXXXX 是导出 ID。您可以在导出 ARN 中找到导出 ID,该 ARN 的格式如下:arn:aws:dynamodb:<Region>:<AccountID>:table/<TableName>/export/<XXXXXXXX-XXXXXX>。例如,arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4

  6. 指定您是否是 S3 存储桶拥有者。如果源存储桶由其他账户拥有,请选择一个不同的 AWS 账户。然后输入存储桶拥有者的账户 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”(活动),此时可以开始使用该表。

在 AWS Management Console 中获取以前导入的详细信息

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

请求使用 AWS 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": ";"}}'
注意

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

在 AWS 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