AWS運用において「DynamoDBの中身をサクッとCSVで出力してほしい」と頼まれることはありませんか?マネジメントコンソールからエクスポートするのも手ですが、特定の条件でクエリをかけ、必要な項目だけを抽出するにはCLIとjqの組み合わせが最強です。
この記事では、AWS CLIでDynamoDBからデータを取得し、軽量なJSONプロセッサjqを使って綺麗なCSVファイルに変換する方法を実用的な例とともに解説します。
1. 使用するツールの紹介
まずは、今回使用するメインツールについて簡単におさらいしましょう。
DynamoDBとは:
Amazon DynamoDBは、AWSが提供するフルマネージドのNoSQLデータベースサービスです。
一般的なデータベース(MySQLやPostgreSQLなど)との大きな違いは、「どれだけデータが増えても、レスポンス速度がほとんど変わらない」という点にあります。
- サーバー管理が不要(サーバーレス): 面倒なプロビジョニングやパッチ当て、容量設計を気にする必要がありません。
- 圧倒的なパフォーマンス: 1桁ミリ秒単位の低レイテンシを実現しており、大規模なWebアプリやゲームのバックエンドに最適です。
- 柔軟なデータ構造: 厳格なスキーマ(テーブル定義)を事前に決めなくても、データ(アイテム)ごとに異なる属性を持たせることができます。
jqとは:
jqは、軽量かつ柔軟なコマンドライン形式のJSONプロセッサです。
AWS CLIが返すデータは巨大なJSON形式であることが多いため、そのままでは人間が読むのも、Excelで扱うのも大変です。jqを使えば、「特定の項目だけを抜き出す」「データの形を整える」「CSVに変換する」といった操作が、フィルタを通すような感覚で瞬時に行えます。
2. 実践!DynamoDBからクエリ取得してCSV化するコマンド
以下のコマンドは、「注文管理システム」を例にしたサンプルです。特定のユーザーID(user_id)に紐づく注文履歴を取得し、CSVとして保存します。
aws dynamodb query
--table-name OrderHistoryTable
--index-name "user-index"
--key-condition-expression "user_id = :v_user_id"
--expression-attribute-values '{":v_user_id":{"S":"USER-999888777"}}'
--profile my-aws-profile |
jq -r '.Items[] | [
.order_id.S,
.status.S,
.item_name.S,
.price.N,
.quantity.N,
.shipping_address.S,
.order_date.S,
.delivery_status.S,
.customer_email.S,
.updated_at.S
] | @csv' > order_export.csv
コマンドの解説
aws dynamodb query: 指定した条件に合致するデータを検索します。scanよりも効率的でコストを抑えられます。
--index-name: グローバルセカンダリインデックス(GSI)など、パーティションキー以外で検索したい場合に指定します。
--expression-attribute-values: 検索条件の値を定義します。DynamoDB特有の型指定(Sは文字列、Nは数値)が必要です。
jq -r '.Items[] | [...] | @csv':
.Items[]: 配列の中身を1つずつ取り出します。
[...]: CSVの列(カラム)にしたい項目を並べます。
@csv: 指定した配列をCSVフォーマットに変換します。
-r: raw-outputオプションで、出力をクォートで囲まずに出力します。
3. jqを使う際のポイントと注意点
型の指定に注意
DynamoDBのJSONレスポンスは、.fieldName.S(文字列)や.fieldName.N(数値)のように、データ型のキーが1層深く入っています。jqで抽出する際は、この型指定を忘れないようにしましょう。
ヘッダーを追加したい場合
上記のコマンドではデータ行のみが出力されます。ヘッダーが必要な場合は、以下のようにあらかじめ書き込んでおくと親切です。
echo "OrderID,Status,ItemName,Price,Qty,Address,Date,ShipStatus,Email,UpdateDate" > order_export.csv
# この後にコマンドを実行(「>>」で追記モードにするのがポイント)
aws dynamodb query ... >> order_export.csv
まとめ
AWS CLIとjqを組み合わせることで、複雑なスクリプトを書かなくても、コマンド一行でデータの抽出・加工が可能になります。
特に、一時的なデータ確認やレポート作成において、この手法は非常に強力です。ぜひ皆さんの開発現場でも活用してみてください!
最後まで読んでいただきありがとうございました。 この記事が、皆さんのAWS運用を少しでも楽にする参考になれば幸いです。