UpdateItem DynamoDB con la AWS CLI
Cinque argomenti, tre dei quali in DynamoDB JSON, tutti in lotta con la tua shell: è questo a rendere aws dynamodb update-item scomodo, non l'aggiornamento in sé. Quello che la CLI aggiunge rispetto a ogni altro client è un secondo punto in cui la richiesta può essere rifiutata, e un insieme di codici di uscita abbastanza precisi da dirti quale dei due è stato.
Codice
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2' \
--expression-attribute-names '{"#upd0":"Genre","#upd1":"Year","#upd2":"Awards"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":updValue1":{"N":"1994"},":updValue2":{"N":"1"}}' \
--return-values ALL_NEWEseguito su un Item che non aveva né Genre né Awards, quel comando stampa:
{
"Attributes": {
"Artist": {
"S": "Arturo Sandoval"
},
"Awards": {
"N": "1"
},
"Genre": {
"S": "Latin Jazz"
},
"Year": {
"N": "1994"
},
"SongTitle": {
"S": "Cubano Chant"
}
}
}ADD su un Awards assente lo ha fatto partire da zero, e gli attributi sono tornati nell'ordine del servizio invece che in quello in cui l'espressione li ha scritti. Non convogliare questo in nulla di posizionale.
Spiegazione
--key— la chiave primaria completa, in DynamoDB JSON. Passa solo la partition key di una tabella a chiave composita e ottieniValidationException: The number of conditions on the keys is invalid, non una corrispondenza parziale.--update-expression— clausoleSET,ADD,REMOVEeDELETE, aliasate tramite--expression-attribute-names. QuiADD #upd2 :updValue2è un incremento atomico suAwards; la grammatica completa delle clausole è nelle update expression.I numeri sono stringhe tra virgolette, e la CLI lo verifica prima di DynamoDB. Scrivi
{"N":1994}invece di{"N":"1994"}e non esce nulla dalla tua macchina:aws: [ERROR]: An error occurred (ParamValidation): Parameter validation failed: Invalid type for parameter ExpressionAttributeValues.:y.N, value: 1994, type: <class 'int'>, valid types: <class 'str'>Il codice di uscita ti dice quale metà ha fallito. Quel rifiuto lato client esce con 252. Una richiesta a cui DynamoDB ha davvero risposto rifiutandola esce con 254:
aws: [ERROR]: An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: YearUn 252 è sempre un bug nel tuo JSON. Un 254 può essere una condizione che ti aspettavi deliberatamente fallisse, quindi gli script dovrebbero ramificare sui due invece che sul "diverso da zero".
Senza
--return-valuesil comando non stampa proprio nulla ed esce con 0. Non c'è alcuna riga "1 item updated" da grepare, quindi il silenzio è successo.UPDATED_NEWrestituisce solo gli attributi toccati dall'espressione, ed è l'opzione economica quando ti serve solo il nuovo valore del contatore.Metti le virgolette una volta, poi usa un file. Racchiudi ogni argomento JSON tra apici singoli così la shell lascia stare
"e$, e sposta tutto ciò che è lungo in--expression-attribute-values file://values.jsoninvece di fare l'escaping due volte.Semantica di upsert —
update-itemcrea l'Item quando la chiave è assente, ed è così cheAwardsè comparso qui sopra. Aggiungi--condition-expression "attribute_exists(Artist)"per renderlo di solo aggiornamento.
Qui nulla costruisce l'espressione al posto tuo
Dei cinque client documentati su questo sito, esattamente uno genera una UpdateExpression: il pacchetto expression dell'SDK Go. Node, Python e Java ti lasciano scrivere la stringa. La CLI è il caso peggiore dei quattro, perché scrivi a mano anche entrambe le mappe di alias e il DynamoDB JSON, dentro una shell che vuole interpretare gli stessi caratteri.
Il DynamoDB Expression Builder colma quella lacuna: assembla le clausole nel browser, copia un comando aws dynamodb update-item già quotato. Per fare la stessa modifica su una tabella reale senza fare l'escaping di un solo apice, scarica DynoTable.
Guide correlate
- Update expression DynamoDB —
SET,ADD,REMOVE,DELETEe gli idiomi. - Capire ReturnValues — cosa ti dà ciascuna opzione di
--return-values. - "Attribute name is a reserved keyword" — perché qui la mappa di alias non è facoltativa.
- Errori di sintassi "Invalid UpdateExpression" — i comuni errori di sintassi SET/ADD, decodificati.
Riferimenti
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Update expressions — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-28 rispetto alla documentazione ufficiale AWS collegata sopra.