AWS Data Pipeline を使用して DynamoDB データをエクスポートおよびインポートする - Amazon DynamoDB

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

AWS Data Pipeline を使用して DynamoDB データをエクスポートおよびインポートする

AWS Data Pipeline を使用して、DynamoDB テーブルから Amazon S3 バケット内のファイルにデータをエクスポートできます。コンソールを使用して、Amazon S3 から同じまたは異なる AWS リージョンにある DynamoDB テーブルにデータをインポートできます。

データのエクスポートおよびインポート機能は多くシナリオで役立ちます。たとえば、テスト目的で一連のベースラインデータを保守するとします。ベースラインデータを DynamoDB テーブルに入力し、Amazon S3 にエクスポートできます。続いて、テストデータを変更するアプリケーションを実行した後、Amazon S3 から DynamoDB テーブルにインポートして戻すことで、ベースラインデータを「リセット」できます。別の例としては、データの誤った削除や誤った DeleteTable オペレーションもあります。このような場合は、Amazon S3 にある前回のエクスポートファイルからデータを復元できます。ある AWS リージョン内の DynamoDB テーブルからデータをコピーし、Amazon S3 に保存し、続いて Amazon S3 から別のリージョン内の同じ DynamoDB テーブルにインポートすることもできます。別のリージョン内のアプリケーションは、最も近い DynamoDB エンドポイントにアクセスし、データの独自のコピーを操作できるため、同時に、ネットワークレイテンシーが短くなります。

重要

DynamoDB バックアップとリストアは、完全に管理された機能です。本番アプリケーションのパフォーマンスや可用性に影響を与えることなく、数メガバイトから数百テラバイトまでのデータをバックアップできます。テーブルは、 AWS マネジメントコンソール または単一のAPIコール。以下を使用することを強くお勧めします。 DynamoDBではなく、のネイティブ バックアップ/リストア機能 AWS Data Pipeline. 詳細については、DynamoDB のオンデマンドバックアップおよび復元 を参照してください。

次の図に、AWS Data Pipeline を使用した DynamoDB データのエクスポートおよびインポートの概要を示します。

DynamoDB テーブルをエクスポートするには、AWS Data Pipeline コンソールを使用して新しいパイプラインを作成します。パイプラインによって、実際のエクスポートを実行する Amazon EMR クラスターが起動されます。Amazon EMR は、DynamoDB からデータを読み込み、Amazon S3 バケット内のエクスポートファイルにデータを書き込みます。

このプロセスは、データが Amazon S3 バケットから読み込まれて DynamoDB テーブルに書き込まれること以外、インポートでも同様です。

重要

DynamoDB データのエクスポートまたはインポート時、基礎となる次の AWS サービスの使用に対して追加コストが発生します。

  • AWS Data Pipeline — インポート/エクスポートのワークフローを管理します。

  • Amazon S3 — DynamoDB に対してエクスポートまたはインポートするデータを格納します。

  • Amazon EMR — マネージド型 Hadoop クラスターを実行して、Amazon S3 と DynamoDB の間で読み込みと書き込みを行います。クラスター構成は、1 つの m3.xlarge インスタンスマスターノードと 1 つの m3.xlarge インスタンスコアノードです。

詳細については、AWS Data Pipeline 料金表Amazon EMR 料金表Amazon S3 料金表を参照してください。

データをエクスポートおよびインポートデータするための前提条件

データのエクスポートとインポートに AWS Data Pipeline を使用するときは、パイプラインによって実行できるアクションと消費できるリソースを指定する必要があります。許可されるそれらのアクションとリソースは AWS Identity and Access Management (IAM) ロールを使用して定義します。

また、IAM ポリシーを作成し、IAM ユーザーまたはグループにアタッチすることで、アクセスを制御できます。これらのポリシーでは、DynamoDB データに対してインポートおよびエクスポートが許可されるユーザーを指定できます。

重要

エクスポートとインポートを実行する IAM ユーザーには、アクティブな AWS アクセスキー ID とシークレットキーが必要です。詳細については、以下を参照してください。 IAMユーザーのアクセスキーの管理IAM ユーザーガイド.

AWS Data Pipeline の IAM ロールを作成する

AWS Data Pipeline を使用するには、次の IAM ロールが AWS アカウントにあることが必要です。

  • DataPipelineDefaultRole — パイプラインによって自動的に実行されるアクション。

  • DataPipelineDefaultResourceRole — パイプラインによって自動的にプロビジョニングされる AWS リソース。DynamoDB データのエクスポートとインポートの場合、これらのリソースには Amazon EMR クラスターと、そのクラスターに関連付けられている Amazon EC2 インスタンスが含まれます。

これまでに AWS Data Pipeline を使用したことがない場合は、DataPipelineDefaultRoleDataPipelineDefaultResourceRole を自分で作成する必要があります。作成したそれらのロールを使用して、必要に応じていつでも DynamoDB データをエクスポートしたりインポートしたりできます。

注記

以前に AWS Data Pipeline コンソールを使用してパイプラインを作成した場合、DataPipelineDefaultRoleDataPipelineDefaultResourceRole はその時点で自動的に作成されています。これ以上の操作は必要ありません。このセクションをスキップし、DynamoDB コンソールを使用したパイプラインの作成を開始できます。詳細については、「DynamoDB から Amazon S3 にデータをエクスポートする」および「Amazon S3 から DynamoDB にデータをインポートする」を参照してください。

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. IAM コンソールダッシュボードで [ロール] をクリックします。

  3. [ロールの作成] をクリックし、次の操作を実行します。

    1. [AWS のサービス] の信頼されたエンティティで、[Data Pipeline (データパイプライン)] を選択します。

    2. [ユースケースの選択] パネルで、[Data Pipeline (データパイプライン)]、[Next:Permissions (次へ: 許可)] の順に選択します。

    3. AWSDataPipelineRole ポリシーが自動的にアタッチされることに注意してください。[Next: Review (次へ: レビュー)] を選択します。

    4. [ロール名] フィールドで、ロール名として DataPipelineDefaultRole を入力し、[ロールの作成] を選択します。

  4. [ロールの作成] をクリックし、次の操作を実行します。

    1. [AWS のサービス] の信頼されたエンティティで、[Data Pipeline (データパイプライン)] を選択します。

    2. [ユースケースの選択] パネルで、[EC2 Role for Data Pipeline (データパイプラインの EC2 ロール)]、[Next:Permissions (次へ: 許可)] の順に選択します。

    3. AmazonEC2RoleForDataPipelineRole ポリシーが自動的にアタッチされることに注意してください。[Next: Review (次へ: レビュー)] を選択します。

    4. [ロール名] フィールドで、ロール名として DataPipelineDefaultResourceRole を入力し、[ロールの作成] を選択します。

これらのロールを作成できたので、DynamoDB コンソールを使用したパイプラインの作成を開始できます。詳細については、「DynamoDB から Amazon S3 にデータをエクスポートする」および「Amazon S3 から DynamoDB にデータをインポートする」を参照してください。

IAM ユーザーおよびグループへのエクスポートおよびインポートタスクを実行するためのアクセス権限の付与

他の IAM ユーザーまたはグループにその DynamoDB テーブルのデータのエクスポートとインポートを許可するには、IAM ポリシーを作成し、指定したユーザーまたはグループにアタッチできます。ポリシーには、これらのタスクを実行するために必要なアクセス権限のみが含まれます。

AWS 管理ポリシーを使用したフルアクセスの付与

次の手順は、AWS 管理ポリシー AmazonDynamoDBFullAccesswithDataPipeline を IAM ユーザーにアタッチする方法を説明しています。この管理ポリシーは、AWS Data Pipeline および DynamoDB リソースへのフルアクセスを提供します。

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. IAM コンソールダッシュボードで、[ユーザー] をクリックし、変更するユーザーを選択します。

  3. [アクセス許可] タブで [ポリシーのアタッチ] をクリックします。

  4. [ポリシーのアタッチ] パネルで AmazonDynamoDBFullAccesswithDataPipeline を選択し、[ポリシーのアタッチ] をクリックします。

注記

同様の手順を使用して、この管理ポリシーをユーザーではなくグループにアタッチできます。

特定の DynamoDB テーブルへのアクセスの制限

アクセスを制限し、ユーザーがテーブルのサブセットのエクスポートまたはインポートのみできるようにするには、カスタマイズした IAM ポリシードキュメントを作成する必要があります。AWS 管理ポリシー AmazonDynamoDBFullAccesswithDataPipeline をカスタムポリシーの開始点として使用し、このポリシーを変更して、ユーザーが、指定されたテーブルのみを操作するようにできます。

たとえば、IAM ユーザーに ForumThreadReply のテーブルに対してのみエクスポートまたはインポートを許可するとします。この手順では、ユーザーがそれらテーブルを操作できるが、それ以外は操作できないようにするカスタムポリシーを作成する方法を示します。

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. IAM コンソールダッシュボードから [ポリシー] をクリックし、[ポリシーの作成] をクリックします。

  3. [ポリシーの作成] パネルで、[AWS 管理ポリシーをコピー] に移動し、[選択] をクリックします。

  4. [AWS 管理ポリシーをコピー] パネルで、AmazonDynamoDBFullAccesswithDataPipeline に移動し、[選択] をクリックします。

  5. [ポリシーの確認] パネルで、以下の作業を行います。

    1. 自動生成される [ポリシー名] および [説明] を確認します。必要に応じて、これらの値を変更できます。

    2. [ポリシードキュメント] テキストボックスで、特定のテーブルへのアクセスを制限するポリシーを編集します。デフォルトでは、ポリシーはすべてのテーブルのすべての DynamoDB アクションを許可します。

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "dynamodb:*", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "sns:Unsubscribe" ], "Effect": "Allow", "Resource": "*", "Sid": "DDBConsole" }, ...remainder of document omitted...

      ポリシーを制限するには、最初に次の行を削除します。

      "dynamodb:*",

      次に、ForumThread、および Reply のテーブルのみへのアクセスを許可する新しい Action を作成します。

      { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Forum", "arn:aws:dynamodb:us-west-2:123456789012:table/Thread", "arn:aws:dynamodb:us-west-2:123456789012:table/Reply" ] },
      注記

      us-west-2 は DynamoDB テーブルがあるリージョンに置き換えてください。123456789012 は AWS アカウント番号に置き換えてください。

      最後に、ポリシードキュメントに新しい Action を追加します。

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Forum", "arn:aws:dynamodb:us-west-2:123456789012:table/Thread", "arn:aws:dynamodb:us-west-2:123456789012:table/Reply" ] }, { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "sns:Unsubscribe" ], "Effect": "Allow", "Resource": "*", "Sid": "DDBConsole" }, ...remainder of document omitted...
  6. ポリシーの設定が正しいことを確認したら、[ポリシーの作成] をクリックします。

ポリシーを作成したら、IAM ユーザーにポリシーをアタッチできます。

  1. IAM コンソールダッシュボードで、[ユーザー] をクリックし、変更するユーザーを選択します。

  2. [アクセス許可] タブで [ポリシーのアタッチ] をクリックします。

  3. [ポリシーのアタッチ] パネルでポリシー名を選択し、[ポリシーのアタッチ] をクリックします。

注記

同様の手順を使用して、ポリシーをユーザーではなくグループにアタッチできます。

DynamoDB から Amazon S3 にデータをエクスポートする

このセクションでは、1 つ以上の DynamoDB テーブルから Amazon S3 バケットにデータをエクスポートする方法について説明します。エクスポートを実行する前に、Amazon S3 バケットを作成する必要があります。

重要

これまでに AWS Data Pipeline を使用したことがない場合は、この手順を実行する前に 2 つの IAM ロールを設定する必要があります。詳細については、AWS Data Pipeline の IAM ロールを作成する を参照してください。

  1. Sign in to the AWS マネジメントコンソール and open the AWS Data Pipeline console at https://console.aws.amazon.com/datapipeline/.

  2. すでに現在の AWS リージョンにパイプラインがない場合は、[今すぐ始める] を選択します。

    それ以外の場合、少なくとも 1 つのパイプラインがある場合は、[Create new pipeline (新しいパイプラインの作成)] を選択します。

  3. [Create Pipeline (パイプラインの作成)] ページで、次の操作を実行します。

    1. [Name (名前)] フィールドで、パイプラインの名前を入力します。たとえば、 と指定します。MyDynamoDBExportPipeline.

    2. [Source (ソース)] パラメータで、[Build using a template (テンプレートを使用してビルドする)] を選択します。ドロップダウンテンプレートのリストから、[Export DynamoDB table to S3 (DynamoDB テーブルを S3 にエクスポートする)] を選択します。

    3. [Source DynamoDB table name (ソース DynamoDB テーブル名)] フィールドに、エクスポートする DynamoDB テーブルの名前を入力します。

    4. [Output S3 Folder (出力 S3 フォルダ)] テキストボックスに、エクスポートファイルが書き込まれる Amazon S3 の URI を入力します。例: s3://mybucket/exports

      この URI の形式は s3://bucketname/folder で、次のような構成になっています。

      • bucketname は Amazon S3 バケットの名前です。

      • folder はそのバケット内のフォルダーの名前です。フォルダーが存在しない場合は、自動的に作成されます。フォルダーの名前を指定しない場合は、s3://bucketname/region/tablename という形式で名前が付けられます。

    5. [S3 location for logs (S3 ログの場所)] テキストボックスに、エクスポート用のログファイルが書き込まれる Amazon S3 の URI を入力します。例: s3://mybucket/logs/

      [S3 Log Folder (S3 ログフォルダ)] の URI 形式は [Output S3 Folder (出力 S3 フォルダ)] と同じです。URI はフォルダに解決される必要があります。ログファイルを S3 バケットの最上位に書き込むことはできません。

  4. すべての設定が正しいことを確認したら、[Activate (有効化)] をクリックします。

これで、パイプラインが作成されます。このプロセスが完了するまでに数分かかることがあります。AWS Data Pipeline コンソールで進捗状況をモニターすることができます。

エクスポートが完了したら、Amazon S3 コンソールに移動して、エクスポートファイルを表示できます。出力ファイル名は、 のように識別子の値で、拡張子はありません。ae10f955-fb2f-4790-9b11-fbfea01a871e_000000。 このファイルの内部形式については、で説明します。 データエクスポートファイルの確認AWS Data Pipeline 開発者ガイド.

Amazon S3 から DynamoDB にデータをインポートする

このセクションでは、すでに DynamoDB テーブルからデータをエクスポートし、エクスポートファイルが Amazon S3 バケットに書き込まれているとします。このファイルの内部形式については、で説明します。 データエクスポートファイルの確認AWS Data Pipeline 開発者ガイド. これは DynamoDB が AWS Data Pipeline を使用してインポートできる唯一のファイル形式であることに注意してください。

ソーステーブルという用語は、データのエクスポート元となったテーブルに使用します。インポート先テーブルという用語は、データのインポート先となるテーブルに使用します。エクスポートファイルから Amazon S3 にデータをインポートできます。ただし、次のすべての条件を満たしていることが前提です。

  • インポート先テーブルがすでに存在する (インポートプロセスによってテーブルは作成されません)

  • インポート先テーブルとソーステーブルのキースキーマが同じ

インポート先テーブルは空である必要はありません。ただしインポートプロセスでは、インポート先テーブルのデータ項目のうち、エクスポートファイルの項目とキーが同じものはすべて置き換えられます。たとえば、Customer テーブルに CustomerId というキーがあり、そのテーブルに 3 つの項目 (CustomerId 1、2、3) のみがあるとします。エクスポートファイルにも CustomerID 1、2、3 のデータ項目がある場合、インポート先テーブルの項目はエクスポートファイルのものと置き換えられます。エクスポートファイルに CustomerId 4 のデータ項目もある場合、その項目がインポート先テーブルに追加されます。

インポート先テーブルは異なる AWS リージョンに置くことができます。たとえば、米国西部 (オレゴン) リージョンに Customer テーブルがあり、そのデータを Amazon S3 にエクスポートするとします。エクスポートしたデータは 欧州 (アイルランド) リージョン内の同じ Customer テーブルにインポートできます。これは、クロスリージョンのエクスポートとインポートと呼ばれています。AWS地域のリストについては、次を参照してください。 領域とエンドポイントAWS General Reference.

AWS マネジメントコンソール では、一度に複数のソーステーブルをエクスポートできます。ただし、一度にインポートできるのは 1 つのテーブルのみです。

  1. Sign in to the AWS マネジメントコンソール and open the AWS Data Pipeline console at https://console.aws.amazon.com/datapipeline/.

  2. (省略可能) クロスリージョンのインポートを実行する場合、ウィンドウの右上隅にあるインポート先リージョンを選択します。

  3. [Create new pipeline (新しいパイプラインの作成)] を選択します。

  4. [Create Pipeline (パイプラインの作成)] ページで、次の操作を実行します。

    1. [Name (名前)] フィールドで、パイプラインの名前を入力します。たとえば、 と指定します。MyDynamoDBImportPipeline.

    2. [Source (ソース)] パラメータで、[Build using a template (テンプレートを使用してビルドする)] を選択します。ドロップダウンテンプレートのリストから、[Import DynamoDB backup data from S3 (S3 から DynamoDB バックアップデータをインポートする)] を選択します。

    3. [Input S3 Folder (入力 S3 フォルダ)] テキストボックスに、エクスポートファイルが見つかる Amazon S3 の URI を入力します。例: s3://mybucket/exports

      この URI の形式は s3://bucketname/folder で、次のような構成になっています。

      • bucketname は Amazon S3 バケットの名前です。

      • folder はエクスポートファイルを含むフォルダーの名前です。

      インポートジョブでは、指定した Amazon S3 の場所にファイルが見つかることが想定されます。ファイルの内部形式については、で説明します。 データエクスポートファイルの確認AWS Data Pipeline 開発者ガイド.

    4. [Target DynamoDB table name (ターゲット DynamoDB テーブル名)] フィールドに、データをインポートする DynamoDB テーブルの名前を入力します。

    5. [S3 location for logs (S3 ログの場所)] テキストボックスに、インポート用のログファイルが書き込まれる Amazon S3 の URI を入力します。例: s3://mybucket/logs/

      [S3 Log Folder (S3 ログフォルダ)] の URI 形式は [Output S3 Folder (出力 S3 フォルダ)] と同じです。URI はフォルダに解決される必要があります。ログファイルを S3 バケットの最上位に書き込むことはできません。

  5. すべての設定が正しいことを確認したら、[Activate (有効化)] をクリックします。

これで、パイプラインが作成されます。このプロセスが完了するまでに数分かかることがあります。インポートジョブはパイプラインの作成直後に開始されます。

Troubleshooting

このセクションでは、DynamoDB のエクスポートについていくつかの基本的な障害モードとトラブルシューティングを取り上げます。

エクスポートまたはインポート中にエラーが発生した場合は、 AWS Data Pipeline コンソールは次のように表示されます ERROR。 この場合、失敗したパイプラインの名前をクリックして詳細ページに移動します。これにより、パイプラインのすべてのステップの詳細と、各ステップのステータスが表示されます。特に、表示される実行スタックトレースを確認します。

最後に、Amazon S3 バケットに移動し、そこに書き込まれたすべてのエクスポートまたはインポートログファイルを探します。

次に示しているのは、パイプラインのエラーの原因として考えられるいくつかの一般的な問題とその対処方法です。パイプラインを診断するには、表示されたエラーと次に示している問題を比較します。

  • インポートの場合は、インポート先テーブルがすでに存在すること、インポート先テーブルにソーステーブルと同じキースキーマがあることを確認します。これらの条件が満たされていない場合、インポートは失敗します。

  • 指定した Amazon S3 バケットが作成されていること、そのバケットに対する読み込みと書き込みのアクセス許可があることを確認します。

  • パイプラインがその実行タイムアウトを超えている可能性があります (パイプラインの作成時にこのパラメータを設定します。) たとえば、実行タイムアウトを 1 時間に設定していても、エクスポート ジョブでこれよりも多くの時間が必要になったとします。パイプラインを削除して作成し直してみてください。ただし実行タイムアウト間隔は前回よりも長くします。

  • エクスポートが実行された元のバケットでない Amazon S3 バケット (エクスポートのコピーを含む) から復元する場合は、マニフェストファイルを更新します。

  • エクスポートまたはインポートを実行するための正しいアクセス許可がない可能性があります。詳細については、データをエクスポートおよびインポートデータするための前提条件 を参照してください。

  • AWS アカウントのリソースクォータ (Amazon EC2 インスタンスの最大数や AWS Data Pipeline パイプラインの最大数など) に達した可能性があります。これらのクォータの増加を要求する方法を含む詳細については、以下を参照してください。 AWS サービス クォータAWS General Reference.

注記

パイプラインのトラブルシューティングの詳細については、 トラブルシューティングAWS Data Pipeline 開発者ガイド.

AWS Data Pipeline と DynamoDB 用の定義済みテンプレート

AWS Data Pipeline のしくみをより深く理解するには、AWS Data Pipeline 開発者ガイド を参照することをお勧めします。このガイドには、パイプラインを作成して操作する手順について説明したチュートリアルが含まれています。これらのチュートリアルは、独自のパイプラインの作成を開始するときに参考になります。また、DynamoDB のチュートリアルを参照することをお勧めします。このチュートリアルでは、要件に合わせてカスタマイズ可能なインポートおよびエクスポートパイプラインを作成するステップについて説明しています。参照 チュートリアル: Amazon DynamoDB AWSデータパイプラインを使用したインポートとエクスポートAWS Data Pipeline 開発者ガイド.

AWS Data Pipeline には、パイプラインを作成するためのテンプレートがいくつか用意されています。次のテンプレートは DynamoDB に関連しています。

DynamoDB と Amazon S3 の間のデータのエクスポート

AWS Data Pipeline コンソールには、DynamoDB と Amazon S3 間でデータをエクスポートするための定義済みテンプレートが 2 つ用意されています。これらのテンプレートの詳細については、AWS Data Pipeline 開発者ガイド の次のセクションを参照してください。