使用 AWS CLI 執行 DynamoDB GetItem

在 CLI 上,key 是一個 DynamoDB JSON 字串,每個值都以其型別包裝({"S": "..."}{"N": "..."}),這表示 aws dynamodb get-item 的難處大多來自 shell 的引號處理,而不是 DynamoDB。key 本身仍然必須是完整的 primary key

程式碼

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 放進檔案,再以 --key file://key.json 傳入。
  • --query 不是 --projection-expression--query 是 JMESPath,在項目已經被讀取並計費之後才在你的機器上套用。--projection-expression 才是 DynamoDB 看得到的那一個。兩者都不會降低讀取成本(原因)。
  • #proj0 這些別名是必要的,不是風格問題Year 在 AWS 的保留字清單上,在投影中直接寫出它會被拒絕。
  • 問清楚它花了多少 — 加上 --return-consumed-capacity TOTAL,回應就會多出一個 ConsumedCapacity 區塊。以這個小於 4 KB 的項目來說是 0.5 個容量單位,加上 --consistent-read 之後則是 1.0(取捨在此)。
  • CLI v2 會把輸出送進分頁器 — 預設在 macOS 與 Linux 上一切都會經過 less(帶 FRX 旗標),在 Windows 上則是 more。在指令碼裡這幾乎不會是你要的:請傳入 --no-cli-pager,或把 AWS_PAGER 設成空字串。

改用視覺化操作

手打那一坨 --key 正是時間的去處。DynamoDB Expression Builder 會從表單產生 DynamoDB JSON 與別名對應,然後交還一個可直接執行的 aws dynamodb 指令。

DynoTable 對真正的表格做同一件事:在格線中瀏覽資料列,再把背後的查詢匯出成 CLI 指令。下載 DynoTable

相關指南

參考資料

最後驗證於 2026-07-28,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。