使用 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,好讓
$與!維持字面值。Windowscmd與 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。
相關指南
- Query vs. Scan — 何時單次
get-item勝過query。 - DynamoDB partition key 的運作方式 — 為什麼
get-item需要完整的 key。 - DynamoDB ResourceNotFoundException — 這裡常見的第一個錯誤:表格名稱或 region 錯誤。
- "The provided key element does not match the schema" — 你傳入的 key 與表格的 key schema 不符。
參考資料
- GetItem — Amazon DynamoDB API Reference
- get-item — AWS CLI Command Reference
- Read consistency — Amazon DynamoDB Developer Guide
- Using the pagination options in the AWS CLI (client-side pager) — AWS CLI User Guide
最後驗證於 2026-07-28,對照上方連結的 AWS 官方文件。