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 できそうです。