Posted at

DynamoDB の Export, Import を行ってみる

More than 3 years have passed since last update.

DynamoDB は、一度テーブルを作成してしまうとスループットの変更ぐらいしかできず、テーブル名の変更やインデックスの追加を行おうとすると、別テーブルへのデータ移行をしないといけないのが面倒です。

ちゃんと設計しとけよ、という話で済んでしまうけど、どうしても rename したいことがあったのでやってみました。


事前準備


S3 Bucket の準備

データ保存用と、ログ用の2つ作成しておきます。

Bucket 1つにフォルダを作成してもいいです。


ログは必須ではないですが、トラブル発生時に使うかもしれないので出力した方がいいと思います。



IAM Role の作成

Data Pipeline を使って S3 に Export しますが、事前に IAM Role を2つ作成しておく必要があります。

作っていない場合は、以下のように作成します。


  • IAM に行く

  • 左メニューの Roles を選択


DataPipelineDefaultRole の作成


  • Create New Role ボタンを選択

  • Role 名に DataPipelineDefaultRole と入力

  • AWS Service Roles の中から AWS Data Pipeline を選択

  • 後は流れに沿ってそのまま作成


DataPipelineDefaultResourceRole の作成


  • Create New Role ボタンを選択

  • Role 名に DataPipelineDefaultResourceRole と入力

  • AWS Service Roles の中から Amazon EC2 Role for Data Pipeline を選択

  • 後は流れに沿ってそのまま作成


Role 名は何でもいいのですが、AWS のドキュメントに記載されている名称がわかりやすいのでそのまま使えばいいでしょう。



Export

まずは Export です。

DynamoDB のテーブル一覧で、Export/Import ボタンを押します。するとテーブル選択画面になるので、Export したいテーブルにチェックを入れ、Export from DynamoDB を押します。


複数のテーブルを同時に並列で Export 可能です。逆に Import は1つ単位でしか設定できません。


すると、Data Pipeline の作成画面になります。


  • S3 Output Folder: データ出力先の S3 Bucket/Folder を指定。最後の / は付けないほうがよいです。

  • S3 Log Folder: ログを保存するなら S3 Bucket/Folder を指定。s3:// から記述する。最後の / は付けないほうがよいです。

  • Throughput Rate: 最大どのくらいのスループットを消費するか。まぁ適当で。

  • Data Pipeline Role: 事前に作成しておいた DataPipelineDefaultRole を指定。

  • Resource Role: 事前に作成しておいた DataPipelineDefaultResourceRole を指定。

Export は、指定したベースフォルダ以下に /export/<RegionName>/<TableName>/<ExportDatetime>/ というフォルダが作成され、その中にデータが <UUID_xxxxxx> というファイル名で出力されます。


ログの作成も同様ですが、単純にパス文字列を連結しているようで、ベースフォルダの最後に / があると、base//export/... のようになり、空のフォルダが生成されてしまいます。別にアクセス可能なのですが、気持ち悪いので最後の / は付けないでおきましょう。そのうち修正が入るとは思いますが。。


これで Data Pipeline が作成され、裏で自動的に EMR が起動してデータの出力が行われます。

Export が完了したら、特に用がなければ作成された Data Pipeline を削除しておきます。


Import

Import も Export とほぼ同様の流れになります。

事前に Import 先のテーブルを作成しておき、チェックを入れて Import to DynamoDB を押します。

Data Pipeline の作成画面まで行ったら、パラメータの入力を行います。


  • S3 Input Folder: データ入力元の S3 Bucket/Folder を指定。先ほど Export したフォルダ s3://<bucket_name>/<base_path>/export/<RegionName>/<TableName>/<ExportDatetime> を設定します。

他のパラメータは Export と同じです。


Input Folder の最後の / は付けないよう注意してください。読み込み対象のファイルが発見できず、インポートに失敗します。


あとは、Export 時と同様に Data Pipeline が作成され、EMR が動いてそのうち Import が完了します。

Import が完了したら、特に用がなければ作成された Data Pipeline を削除しておきます。


Import 用データ作成

Export されたデータは比較的シンプルなデータ構造のようですので、自前で生成すれば簡単に DynamoDB に Import できそうです。

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-pipelinejson-verifydata2.html