はじめに
DynamoDB では既存のテーブルに一括でレコードを追加するにはいくつか制約があります。
- 既存のテーブルに対しAWSコンソール上から追加するには、DynamoDB 独自のJSONを生成して使用しなければならない
- (1.) のJSONを作成するのもAWSサービスの固有機能では対応していない
- インポート時はDynamoDB独自のJSON形式にしか対応していないにも関わらず、エクスポートはCSV形式のみである。。。
そこで、CSV形式のレコードを 「DynamoDB 独自のJSON に変換 + CloudShell上でのコマンドとして生成」 してくれるcsv2dynamoを紹介し、インストール~使用方法を解説します。
なお、csv2dynamoを使用して感じた良い点は
- CloudShell上でソフトウェアやパッケージをインストールしない
- CloudShell上にファイルを置くこともない
点です。
csv2dynamo のインストール方法
csv2dynamo は以下のコマンドでインストールできます。
(Go言語で実装されているので、事前にGoのインストールが必要です)
go install github.com/maito1201/csv2dynamo/cmd/csv2dynamo@latest
csv2dynamo の使用方法
ここでは例として、数値型である「id」をパーティションキーとして持つ test_table に対し、一括でレコードを登録します。
-
まず、例として以下のような形式のCSVファイル(test_table_column.csv)を用意します。
test_table_column.csvid (N),isMale (BOOL),name (S) 30,false,Tanaka 40,true,Fukuyama
- 1行目にはカラム名の後に半角の空白を空け、型を設定します。なお型には N(数値)、BOOL(ブール値)、S(文字列)が設定可能です。
- 2行目以降にはカラムが持つ値を設定します。
-
以下のコマンドを実行し、CloudShell上で実行可能なAWSコマンドを生成します。
$ csv2dynamo --table-name test_table --file test_table_column.csv read and compile csv progress: 1/2 read and compile csv progress: 2/2 complete! aws dynamodb put-item --table-name test_table --item '{"id":{"N":"30"},"isMale":{"BOOL":false},"name":{"S":"Tanaka"}}' aws dynamodb put-item --table-name test_table --item '{"id":{"N":"40"},"isMale":{"BOOL":true},"name":{"S":"Fukuyama"}}'
おわりに
csv2dynamo について紹介し、インストール~使用方法を解説いたしました。
csv2dynamoではCloudShell上にソフトウェアをインストールしたりファイルを置かずに済みます。
このメリットが役に立つ例として、例えば会社保有のAWS環境を使用する場合、上記のように環境は汚す行為が禁止されていたり許可を取る必要性が時々あると考えています。
このような場合、環境は汚すことがない csv2dynamo がおすすめです。
参考文献
- ito,「DynamoDBからバックアップしたCSVをインポートするCLIを作った」,Zenn,2021/03/30,https://zenn.dev/ito/articles/4189afe04567fb, (参照 2025-05-18)