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

最終更新日: 2022 年 7 月 27 日

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

簡単な説明

注: ソースアカウントは、DynamoDB テーブルが存在するアカウントです。宛先アカウントは、Amazon S3 バケットが存在するアカウントです。

  1. ソースアカウントで、DataPipeline サービスロールと DataPipeline リソースロールに Amazon S3 許可を付与する AWS Identity and Access Management (IAM) ポリシーをアタッチします。
  2. 宛先アカウントで、ソースアカウントの DataPipeline サービスロールと DataPipeline リソースロールが S3 バケットにアクセスできるようにするバケットポリシーを作成します。
  3. ソースアカウントで、[Export DynamoDB table to S3] (S3 への DynamoDB テーブルのエクスポート) Data Pipeline テンプレートを使用してパイプラインを作成します。
  4. パイプラインの EmrActivity オブジェクトの [Step] (ステップ) フィールドに BucketOwnerFullControl または AuthenticatedRead の既定アクセスコントロールリスト (ACL) を追加します。
  5. パイプラインをアクティブ化して、DynamoDB テーブルを宛先アカウントの S3 バケットにバックアップします。
  6. 宛先アカウントで DynamoDB テーブルを作成します。
  7. 宛先アカウントにソーステーブルを復元するには、[Import DynamoDB backup data from S3] (S3 からの DynamoDB バックアップデータのインポート) Data Pipeline テンプレートを使用してパイプラインを作成します。

解決方法

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

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.    [Review policy] (ポリシーの確認) をクリックします。

5.    ポリシーの名前を入力し、[ポリシーの作成] を選択します。

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

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

8.    DataPipeline サービスロールと DataPipeline リソースロールを選択し、[ポリシーのアタッチ] を選択します。

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] (S3 への DynamoDB テーブルのエクスポート) Data Pipeline テンプレートを使用してパイプラインを作成します。

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

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.    [保存] を選択してから [アクティブ化] を選択してパイプラインをアクティブ化し、DynamoDB テーブルを宛先アカウントの S3 バケットにバックアップします。

(オプション) 宛先アカウントでバックアップを復元する

  1. 宛先アカウントで、DynamoDB テーブルを作成します。テーブルは空である必要はありません。ただし、インポートプロセスでは、エクスポートファイルの項目と同じキーを持つ項目が置き換えられます。
  2. Import DynamoDB backup data from S3 Data Pipeline テンプレートを使用してパイプラインを作成します:
    [Parameters] (パラメータ) セクションの [Input S3 folder] (入力 S3 フォルダ) で、DynamoDB バックアップが保存されている S3 バケットを入力します。
    [Security/Access] (セキュリティ/アクセス) セクションの [IAM roles] (IAM ロール) について、[Default] (デフォルト) を選択します。
  3. パイプラインをアクティブ化して、バックアップを宛先テーブルに復元します。

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?