メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

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 エンドポイントにアクセスし、データの独自のコピーを操作できるため、同時に、ネットワークレイテンシーが短くなります。

次の図に、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 つの m1.medium インスタンスマスターノードと 1 つの m1.medium インスタンスコアノードです。

詳細については、「AWS Data Pipeline Pricing」、「Amazon EMR Pricing」、「Amazon S3 Pricing」を参照してください。

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

データのエクスポートとインポートに 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 コンソールダッシュボードで [Roles] をクリックします。

  3. [Create New Role] をクリックし、次の操作を実行します。

    1. [Role Name] フィールドに「DataPipelineDefaultRole」と入力し、[Next Step] をクリックします。

    2. [Select Role Type] パネルの [AWS Service Roles] リストで、[AWS Data Pipeline] に移動し、[Select] をクリックします。

    3. [Attach Policy] パネルで [AWSDataPipelineRole] ポリシーの横にあるボックスをクリックし、[Next Step] をクリックします。

    4. [Review] パネルで [Create Role] をクリックします。

  4. [Create New Role] をクリックし、次の操作を実行します。

    1. [Role Name] フィールドに「DataPipelineDefaultResourceRole」と入力し、[Next Step] をクリックします。

    2. [Select Role Type] パネルの [AWS Service Roles] リストで、[Amazon EC2 Role for Data Pipeline] に移動し、[Select] をクリックします。

    3. [Attach Policy] パネルで [AmazonEC2RoleforDataPipelineRole] ポリシーの横にあるボックスをクリックし、[Next Step] をクリックします。

    4. [Review] パネルで [Create Role] をクリックします。

これらのロールを作成できたので、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 コンソールダッシュボードで、[Users] をクリックし、変更するユーザーを選択します。

  3. [Permissions] タブで [Attach Policy] をクリックします。

  4. [Attach Policy] パネルで AmazonDynamoDBFullAccesswithDataPipeline を選択し、[Attach Policy] をクリックします。

注記

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

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

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

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

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

  2. IAM コンソールダッシュボードから [Policies] をクリックし、[Create Policy] をクリックします。

  3. [Create Policy] パネルで、[Copy an AWS Managed Policy] に移動し、[Select] をクリックします。

  4. [Copy an AWS Managed Policy] パネルで、AmazonDynamoDBFullAccesswithDataPipeline に移動し、[Select] をクリックします。

  5. [Review Policy] パネルで、以下の作業を行います。

    1. 自動生成される [Policy Name] および [Description] を確認します。必要に応じて、これらの値を変更できます。

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

      Copy
      { "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...

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

      Copy
      "dynamodb:*",

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

      Copy
      { "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 を追加します。

      Copy
      { "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. ポリシーの設定が正しいことを確認したら、[Create Policy] をクリックします。

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

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

  2. [Permissions] タブで [Attach Policy] をクリックします。

  3. [Attach Policy] パネルでポリシー名を選択し、[Attach Policy] をクリックします。

注記

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

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 リージョンにパイプラインがない場合は、[Get started now] を選択します。

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

  3. [Create Pipeline] ページで、次の操作を実行します。

    1. [Name] フィールドで、パイプラインの名前を入力します。例: MyDynamoDBExportPipeline

    2. [Source] パラメーターで、[Build using a template] を選択します。ドロップダウンテンプレートのリストから、[Export DynamoDB table to S3] を選択します。

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

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

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

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

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

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

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

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

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

エクスポートが完了したら、Amazon S3 コンソールに移動して、エクスポートファイルを表示できます。ファイルはテーブルと同じ名前のフォルダーに置かれ、YYYY-MM-DD_HH.MM という形式で名前が付けられます。このファイルの内部形式については、AWS Data Pipeline 開発者ガイド の「Verify Data Export File」を参照してください。

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

このセクションでは、すでに DynamoDB テーブルからデータをエクスポートし、エクスポートファイルが Amazon S3 バケットに書き込まれているとします。このファイルの内部形式については、AWS Data Pipeline 開発者ガイド の「Verify Data Export File」を参照してください。これは 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] を選択します。

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

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

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

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

      インポートジョブでは、指定した Amazon S3 の場所にファイルが見つかることが想定されます。このファイルの内部形式については、AWS Data Pipeline 開発者ガイド の「Verify Data Export File」を参照してください。

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

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

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

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

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

トラブルシューティング

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

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

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

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

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

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

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

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

  • AWS アカウントのリソース制限(Amazon EC2 インスタンスの最大数や AWS Data Pipeline パイプラインの最大数など)に達した可能性があります。これらの上限の増加をリクエストする方法など、詳細については、AWS General Reference の「AWS Service Limits」を参照してください。

注記

パイプラインのトラブルシューティングの詳細については、『AWS Data Pipeline 開発者ガイド』の「Troubleshooting」を参照してください。

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

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

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

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

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