如何使用 Data Pipeline 将 DynamoDB 表备份到另一个账户下的 S3 存储桶?

上次更新时间:2020 年 7 月 1 日

我想使用 AWS Data Pipeline 将 Amazon DynamoDB 表备份到另一个 AWS 账户下的 Amazon Simple Storage Service (Amazon S3) 存储桶。

简短描述

1.    在源账户中,附加一条 AWS Identity and Access Management (IAM) 策略,授予 DataPipelineDefaultRoleDataPipelineDefaultResourceRole 角色 Amazon S3 权限。

2.    在目标账户中,创建一条存储桶策略,允许源账户中的 DataPipelineDefaultRoleDataPipelineDefaultResourceRole 角色访问 S3 存储桶。

3.    在源账户中,使用将 DynamoDB 表导出到 S3 Data Pipeline 模板创建管道。

4.    将 BucketOwnerFullControlAuthenticatedRead 预装访问控制列表 (ACL) 添加到管道的 EmrActivity 对象的步骤字段中。

5.    激活管道以将 DynamoDB 表备份到目标账户下的 S3 存储桶。

6.    在目标账户中创建 DynamoDB 表。

7.    要将源表还原到目标表,请使用从 S3 导入 DynamoDB 备份数据 Data Pipeline 模板创建管道

解决方法

将 IAM 策略附加到 Data Pipeline 默认角色

1.    在源账户中,打开 IAM 控制台

2.    选择策略,然后选择创建策略

3.    选择 JSON 选项卡,然后输入与以下内容类似的 IAM 策略。将 awsdoc-example-bucket 替换为目标账户中的 S3 存储桶名称。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsdoc-example-bucket/*",
                "arn:aws:s3:::awsdoc-example-bucket"     
            ]
        }
    ]
}

4.    选择查看策略

5.    输入策略的名称,然后选择创建策略

6.    在策略列表中,选中刚刚创建的策略名称旁边的复选框。您可以使用筛选条件菜单和搜索框来过滤策略列表。

7.    选择策略操作,然后选择附加

8.    选择 DataPipelineDefaultRole DataPipelineDefaultResourceRole ,然后选择附加策略

将存储桶策略添加到 S3 存储桶

在目标账户中,创建与以下内容类似的存储桶策略。替换以下示例中的相关值:

  • 111122223333:Data Pipeline 账户的 ID。有关更多信息,请参阅查找 AWS 账户 ID
  • awsdoc-example-bucket:S3 存储桶的名称
{
    "Version": "2012-10-17",
    "Id": "",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": "s3:*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/DataPipelineDefaultRole",
                    "arn:aws:iam::111122223333:role/DataPipelineDefaultResourceRole"
                ]
            },
            "Resource": [
                "arn:aws:s3:::awsdoc-example-bucket",
                "arn:aws:s3:::awsdoc-example-bucket/*"
            ]
        }
    ]
}

创建并激活管道

1.    在源账户中,使用将 DynamoDB 表导出到 S3 Data Pipeline 模板创建管道

参数部分,输入源 DynamoDB 表名称输出 S3 文件夹。为存储桶使用格式 s3://awsdoc-example-bucket/
安全/访问部分,选择 IAM 角色默认设置

2.    激活管道之前,请选择在 Architect 中编辑

3.    打开 Activities 部分,然后找到 EmrActivity 对象。

4.    在步骤字段中,添加 BucketOwnerFullControlAuthenticatedRead 预装访问控制列表 (ACL)。这些预装 ACL 为 Amazon EMR Apache Hadoop 作业提供写入目标账户中的 S3 存储桶的权限。请务必使用以下格式:-Dfs.s3.canned.acl = BucketOwnerFullControl。在 org.apache.hadoop.dynamodb.tools.DynamoDbExport#{output.directoryPath} 之间插入语句。例如:

s3://dynamodb-dpl-#{myDDBRegion}/emr-ddb-storage-handler/4.11.0/emr-dynamodb-tools-4.11.0-SNAPSHOT-jar-with-dependencies.jar,org.apache.hadoop.dynamodb.tools.DynamoDBExport,-Dfs.s3.canned.acl=BucketOwnerFullControl,#{output.directoryPath},#{input.tableName},#{input.readThroughputPercent}

5.    选择保存,然后选择激活以激活管道,并将 DynamoDB 表备份到目标账户中的 S3 存储桶。

在目标账户中还原备份

1.    在目标账户中,创建 DynamoDB 表。该表不必为空。但是,导入过程将替换与导出文件中的项目具有相同键的项目。

2.    使用从 S3 导入 DynamoDB 备份数据 Data Pipeline 模板创建管道

参数部分的输入 S3 文件夹字段,输入存储 DynamoDB 备份的 S3 存储桶。
安全/访问部分,选择 IAM 角色默认设置

3.    激活管道以将备份还原到目标表。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?