DynamoDB GetItem mit der AWS CLI
Auf der CLI ist der Key ein DynamoDB-JSON-String, bei dem jeder Wert in seinen Typ eingepackt ist ({"S": "..."}, {"N": "..."}) — der größte Teil der Schwierigkeit bei einem aws dynamodb get-item liegt also im Shell-Quoting, nicht in DynamoDB. Der Key selbst muss weiterhin der vollständige Primary Key sein.
Code
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"}'Die Antwort gibt das Item als DynamoDB JSON aus:
{
"Item": {
"Artist": {"S": "Arturo Sandoval"},
"SongTitle": {"S": "Cubano Chant"},
"AlbumTitle": {"S": "Danzon"},
"Year": {"N": "1994"}
}
}Erklärung
- Ein Treffer-Fehlschlag gibt überhaupt nichts aus — kein
Item, kein leeres Objekt, Exit-Code 0. Das direkt injqzu pipen scheitert bei leerer Eingabe, fange die Ausgabe also ab und prüfe den String, bevor du ihn parst. - Das Quoting ist die eigentliche Arbeit — setze das JSON in Bash und Zsh in einfache Anführungszeichen, damit
$und!literal bleiben. Windowscmdund PowerShell folgen anderen Regeln; leg den Key in eine Datei und übergib--key file://key.json, statt dich mit ihnen herumzuschlagen. --queryist nicht--projection-expression—--queryist JMESPath und wird auf deinem Rechner angewendet, nachdem das Item gelesen und abgerechnet wurde.--projection-expressionist das, was DynamoDB sieht. Keins von beiden senkt die Lesekosten (warum).- Die
#proj0-Aliase sind Pflicht, keine Stilfrage —Yearsteht auf AWS' Liste reservierter Wörter, und es direkt in einer Projection zu benennen wird abgelehnt. - Frag nach, was es gekostet hat — ergänze
--return-consumed-capacity TOTALund die Antwort erhält einenConsumedCapacity-Block. Für dieses Item, unter 4 KB, sind das 0,5 Kapazitätseinheiten, oder 1,0, sobald du--consistent-readergänzt (der Trade-off). - CLI v2 blättert deine Ausgabe — standardmäßig läuft alles durch
lessauf macOS und Linux (mit denFRX-Flags) odermoreauf Windows. In einem Skript ist das selten das, was du willst: übergib--no-cli-pageroder setzeAWS_PAGERauf einen leeren String.
Mach es visuell
Diesen --key-Klumpen von Hand zu tippen kostet die Zeit. Der DynamoDB Expression Builder baut das DynamoDB JSON und die Alias-Maps aus einem Formular und gibt dir einen fertig ausführbaren aws dynamodb-Befehl zurück.
DynoTable macht dasselbe gegen eine echte Tabelle: Zeilen in einem Grid durchsuchen und dann die dahinterliegende Abfrage als CLI-Befehl exportieren. DynoTable herunterladen.
Verwandte Leitfäden
- Query vs. Scan — wann ein einzelnes
get-itemeinequeryschlägt. - Wie DynamoDB-Partition-Keys funktionieren — warum
get-itemden vollständigen Key braucht. - DynamoDB ResourceNotFoundException — der übliche erste Fehler hier: falscher Tabellenname oder falsche Region.
- „The provided key element does not match the schema" — der übergebene Key passt nicht zum Key-Schema der Tabelle.
Referenzen
- 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
Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.