↗️
DynamoDBで既存テーブルへExport/ImportするならDynein
AWS標準のExport/Import方式の課題
既存のDynamoDBからデータをDumpするには公式のこの機能を使えばよい。
で、問題はimportである。
を一読すると見逃してしまうが、これは「新規テーブルへimportする機能」なので、既存テーブルには導入できない。
具体的には以下のようなシナリオが困る。
- 既存のテーブルと同じ設定のCFnテンプレートでテーブルを作成
- import機能でデータ投入を行う
この場合は、import機能で作ったテーブルをCloudFormation管理下に入れなおしたりするなどの対応が必要になる(Terraformでも同様の事態が起こると思われる)
AWS Database Migration Serviceを利用すれば、既存テーブルへのimportはできそうに思えるが、若干大仰に感じたので調べたところdynein
が良さそうなことがわかった。
Dynein
DyneinはRustで記述されたAmazon DynamoDB CLIとのこと。
使ってみるとわかるが、とにかく動作が早いので実装の差を感じる。かなり良い。
DyneinでのExport/Import
今回はCloudShellに導入する
curl -O -L https://github.com/awslabs/dynein/releases/latest/download/dynein-linux.tar.gz
tar xzvf dynein-linux.tar.gz
sudo mv dy /usr/local/bin/
rm -f dynein-linux.tar.gz
dy --help
こういったエラーが出てしまうので
[cloudshell-user@ip-10-2-55-201 ~]$ dy --help
dy: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
OpenSSLの開発パッケージを導入すると動くようになる
sudo yum install -y openssl11 openssl11-devel
Export/Import
後は下のような使い方でExport/Importが実現できる。簡単。
dy export -t <from-table> -o a.csv
dy import -t <to-table> -i a.csv
どちらの操作もCapacity Unitを消費するためy/n確認する実装になっているので、ツールに組み込む時は気を付けましょう。
Discussion