Data Pipeline を使用して DynamoDB テーブルを別のアカウント内の S3 バケットにバックアップする方法を教えてください。

最終更新日: 2020 年 7 月 1 日

AWS Data Pipeline を使用して、Amazon DynamoDB テーブルを別の AWS アカウントにある Amazon Simple Storage Service (Amazon S3) バケットにバックアップしたいです。

簡単な説明

1.    ソースアカウントで、DataPipelineDefaultRole ロールと DataPipelineDefaultResourceRole ロールに Amazon S3 アクセス許可を付与する AWS Identity and Access Management (IAM) ポリシーをアタッチします。

2.    デスティネーションアカウントで、ソースアカウントの DataPipelineDefaultRole ロールと DataPipelineDefaultResourceRole ロールが S3 バケットにアクセスできるようにするバケットポリシーを作成します。

3.    ソースアカウントで、Export DynamoDB table to S3 Data Pipeline テンプレートを使用してパイプラインを作成します。

4.    パイプラインの EmrActivity オブジェクトの Step フィールドに BucketOwnerFullControl または AuthenticatedRead の定型アクセスコントロールリスト (ACL) を追加します。

5.    パイプラインをアクティブ化して、DynamoDB テーブルをデスティネーションアカウントの S3 バケットにバックアップします。

6.    デスティネーションアカウントで DynamoDB テーブルを作成します。

7.    デスティネーションアカウントにソーステーブルを復元するには、Import DynamoDB backup data from S3 Data Pipeline テンプレートを使用してパイプラインを作成します。

解決方法

Data Pipeline のデフォルトロールに IAM ポリシーをアタッチするには

1.    ソースアカウントで、[IAM コンソール] を開きます。

2.    [Policies] をクリックしてから、 [Create policy] をクリックします。

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.    ポリシーの 名前 を入力し、 [Create policy] をクリックします。

6.    ポリシーリストで、上で設定したポリシー名前のチェックボックスにチェックを入れます。[Filter] メニューと検索ボックスを使用して、ポリシーリストをフィルタリングすることも可能です。

7.    [Policy actions] を選択して、 [Attach] をクリックします。

8.    [DataPipelineDefaultRole] および [DataPipelineDefaultResourceRole] を選択し 、[Attach policy] をクリックします。

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.    ソースアカウントで、次のように Export DynamoDB table to S3 Data Pipeline テンプレートを使用してパイプラインを作成します。

[パラメータ] セクションに、ソース DynamoDB テーブル名および出力 S3 フォルダーを入力します。バケットには s3://awsdoc-example-bucket/という形式を使用します。
[セキュリティ/アクセス] セクションの IAM ロールに対して、[デフォルト] を選択します。

2.    パイプラインをアクティブ化する前に、[Edit in Architect] を選択します。

3.    [Activities] セクションを開き、[EmrActivity] オブジェクトを見つけます。

4.    [Step] フィールドに、BucketOwnerFullControl または AuthenticatedRead定型アクセスコントロールリスト (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.    [Save] を選択してから [Activate] をクリックしてパイプラインをアクティブ化し、DynamoDB テーブルをデスティネーションアカウントの S3 バケットにバックアップします。

デスティネーションアカウントでバックアップを復元する

1.    デスティネーションアカウントで、DynamoDB テーブルを作成します。テーブルは空である必要はありません。ただし、インポートプロセスでは、エクスポートファイルの項目と同じキーを持つ項目が置き換えられます。

2.    Import DynamoDB backup data from S3 Data Pipeline テンプレートを使用してパイプラインを作成します。

[パラメータ] セクションの Input S3 folder に、DynamoDB バックアップが保存されている S3 バケットを入力します。
[セキュリティ/アクセス] セクションの IAM ロールに対して、[デフォルト] を選択します。

3.    パイプラインをアクティブ化して、バックアップをデスティネーションテーブルに復元します。