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_NEW

Eseguito su un Item che non aveva né GenreAwards, 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 ottieni ValidationException: The number of conditions on the keys is invalid, non una corrispondenza parziale.

  • --update-expression — clausole SET, ADD, REMOVE e DELETE, aliasate tramite --expression-attribute-names. Qui ADD #upd2 :updValue2 è un incremento atomico su Awards; 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: Year

    Un 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-values il comando non stampa proprio nulla ed esce con 0. Non c'è alcuna riga "1 item updated" da grepare, quindi il silenzio è successo. UPDATED_NEW restituisce 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.json invece di fare l'escaping due volte.

  • Semantica di upsertupdate-item crea l'Item quando la chiave è assente, ed è così che Awards è 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

Riferimenti

Ultima verifica 2026-07-28 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.