DynamoDB のテーブルを Data Pipeline でエクスポートする

2017.08.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2017年12月7日時点で、本記事に記載のマネジメントコンソールからのインポート/エクスポートの操作ボタンが表示されなくなっていることを確認しました。今後は新しく追加されたバックアップ/リストア機能が利用可能です。

 

こんにちは、菊池です。

DynamoDBのデータをバックアップする手段として、Data Pipelineを利用したエクスポートを試してみました。

DynamoDBにはバックアップ機能は提供されていませんが、以下で紹介されているように、他のサービスと連携させることでデータのバックアップが可能です。

やってみた

公式ドキュメントの手順に沿ってやってみます。

事前準備

エクスポートの実行前に、以下の2つを準備しておきます。

  • IAMロールの作成
  • エクスポート先となるS3バケットの作成

IAMロールの作成

以下のような2つのIAMロールを作成します。

  • DataPipelineDefaultRole
    • ロールタイプ:AWSサービスロール/AWS Data Pipeline
    • ポリシー:AWSDataPipelineRole
  • DataPipelineDefaultResourceRole
    • ロールタイプ:AWSサービスロール/Amazon EC2 Role for Data Pipeline
    • ポリシー:AmazonEC2RoleforDataPipelineRole

dynamo-export-001

S3バケットの作成

エクスポート先のS3バケット、フォルダを任意の名称で作成しておきます。

エクスポートの実行

DynamoDBのコンソールからテーブルを選択し、[アクション] -> [エクスポート]を選びます。

dynamo-export-002

すると、Data Pipelineのコンソールへ飛び、Pipelineの作成画面となります。

dynamo-export-003

まずは基本のパラメータです。テーブル名とターゲットのS3バケット/フォルダを入力します。

dynamo-export-005

次に、スケージュールの設定です。日次、週次など、定期的なスケジュールでの実行や開始時間を指定することも可能となっています。今回はワンタイムで即時の実行にしました。

dynamo-export-006

ログ出力を有効化する場合には、出力先のS3と合わせて設定します。

dynamo-export-007

続いてIAMロールです。Defaultを選択すれば、先ほど作成したIAMロールが利用されます。

dynamo-export-008

最後に、任意のタグを設定し、[Activate]を選択します。

dynamo-export-009

すると、Pipelineが作成・実行されます。この間に、EMRのクラスタが起動し、データのエクスポートが実行されています。

dynamo-export-010

しばらくすると、ステータスが[FINISHED]となりました。

dynamo-export-011

出力先のS3を確認すると、3つのファイルが出力されています。

dynamo-export-013

ダウンロードして中身を確認すると、このようにテーブルのデータが出力されています。

$ cat 84ad5555-cfda-4126-8405-4b86586ecb57
{"id":{"s":"001"},"name":{"s":"hoge1"}}
{"id":{"s":"003"},"name":{"s":"hoge3"}}
{"id":{"s":"002"},"name":{"s":"hoge2"}}

まとめ

以上です。

DynamoDBのエクスポートを試してみました。Data Pipeline、EMRといった他のサービスと統合された処理が、簡単に作成・実行可能になっています。

なお、本番環境で利用する際には、DynamoDBのReadキャパシティの消費と、EMRによって起動するEC2のコストに注意しましょう。