AWS CLI での DynamoDB GetItem

CLI ではキーは DynamoDB JSON の文字列 で、各値がその型で包まれます({"S": "..."}{"N": "..."})。つまり aws dynamodb get-item の難しさの大半は DynamoDB ではなくシェルのクォートにあります。キーそのものはやはり完全なプライマリキーでなければなりません。

コード

aws dynamodb get-item \
  --table-name 'Music' \
  --key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
  --projection-expression '#proj0, #proj1, #proj2, #proj3' \
  --expression-attribute-names '{"#proj0":"Artist","#proj1":"SongTitle","#proj2":"AlbumTitle","#proj3":"Year"}'

レスポンスはアイテムを DynamoDB JSON で表示します。

{
  "Item": {
    "Artist": {"S": "Arturo Sandoval"},
    "SongTitle": {"S": "Cubano Chant"},
    "AlbumTitle": {"S": "Danzon"},
    "Year": {"N": "1994"}
  }
}

解説

  • 見つからないときは何も表示されませんItem もなく、空のオブジェクトもなく、終了コードは 0 です。それをそのまま jq に流すと空入力で失敗するので、出力を捕まえ、パースする前に文字列を検査しましょう。
  • 本当の仕事はクォートです。bash と zsh では JSON をシングルクォートで囲み、$! をリテラルのままにします。Windows の cmd と PowerShell は別のルールなので、そちらと格闘するよりキーをファイルに置いて --key file://key.json を渡しましょう。
  • --query--projection-expression ではありません--query は JMESPath で、アイテムが読まれて課金された後に手元のマシンで適用されます。DynamoDB が見るのは --projection-expression の方です。どちらも読み取りコストを減らしません(理由)。
  • #proj0 のエイリアスは様式ではなく必須ですYear は AWS の予約語リストに載っており、射影でその名前を直接使うと拒否されます。
  • いくらかかったのか尋ねましょう--return-consumed-capacity TOTAL を足すとレスポンスに ConsumedCapacity ブロックが増えます。4 KB 未満のこのアイテムなら 0.5 キャパシティユニット、--consistent-read を足せば 1.0 です(トレードオフ)。
  • CLI v2 は出力をページャーに通します。デフォルトでは macOS と Linux では lessFRX フラグ付き)、Windows では more をすべてが通ります。スクリプトの中でそれが望みであることは稀なので、--no-cli-pager を渡すか、AWS_PAGER を空文字列に設定しましょう。

ビジュアルに行う

時間が溶けるのは、あの --key の塊を手で打つところです。DynamoDB Expression Builder はフォームから DynamoDB JSON とエイリアスのマップを組み立て、そのまま実行できる aws dynamodb コマンドを返してくれます。

DynoTable は同じことを実際のテーブルに対して行います。グリッドで行を閲覧し、その裏にあるクエリを CLI コマンドとして書き出せます。DynoTable をダウンロード

関連ガイド

参考資料

最終検証日 2026-07-28、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。