DynamoDB BatchGetItem con la AWS CLI
aws dynamodb batch-get-item recupera fino a 100 Item per chiave primaria in un solo comando. Due cose lo distinguono da query e scan sulla riga di comando: le chiavi sono JSON DynamoDB annidato che deve sopravvivere al quoting della shell, e la CLI non svuota UnprocessedKeys al posto tuo. I limiti e le regole sui risultati parziali sono in operazioni batch in DynamoDB.
Codice
aws dynamodb batch-get-item \
--request-items '{
"Music": {
"Keys": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
{"Artist": {"S": "Ella Fitzgerald"}, "SongTitle": {"S": "Misty"}}
]
}
}'In forma abbreviata, l'output associa a ogni tabella gli Item trovati più gli eventuali resti. L'esecuzione completa e letterale è più avanti nella pagina:
{
"Responses": {
"Music": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
]
},
"UnprocessedKeys": {}
}Spiegazione
- La CLI non ha alcun meccanismo di paginazione per questo comando.
aws dynamodb query helpelenca--starting-token,--max-itemse--page-size;aws dynamodb batch-get-item helpnon ne elenca nessuno dei tre.UnprocessedKeysnon è un token di paginazione e la CLI tratta la chiamata come one-shot, quindi svuotarlo è il tuo loop di shell, non un flag. - La mappa dei resti è già nel formato di input. Un
UnprocessedKeysnon vuoto può essere reimmesso direttamente come--request-itemssenza rimodellarlo, ed è ciò che rende tollerabile un loopwhilein bash. Attendi tra un tentativo e l'altro; una ri-esecuzione immediata colpisce la stessa partizione sottoposta a throttling. ProjectionExpressioneConsistentReadvanno dentro l'oggetto della singola tabella, accanto a"Keys". Metterli al livello superiore di--request-itemsè l'errore di forma più comune qui.- Tieni la mappa in un file.
--request-items file://keys.jsonaggira completamente il quoting della shell, ed è l'unica opzione sensata oltre una manciata di chiavi. È anche il modo in cui tocchi il tetto delle 100 chiavi senza accorgertene.
Cosa stampa davvero il comando
Il blocco qui sopra, eseguito alla lettera su DynamoDB Local 3.3.0 con tutti e tre i brani presenti (aws-cli/2.36.9):
{
"Responses": {
"Music": [
{
"Artist": {"S": "Arturo Sandoval"},
"AlbumTitle": {"S": "Danzon"},
"Year": {"N": "1994"},
"SongTitle": {"S": "A Mis Abuelos"}
},
{
"Artist": {"S": "Ella Fitzgerald"},
"AlbumTitle": {"S": "Ella in Berlin"},
"Year": {"N": "1960"},
"SongTitle": {"S": "Misty"}
},
{
"Artist": {"S": "Arturo Sandoval"},
"AlbumTitle": {"S": "Danzon"},
"Year": {"N": "1994"},
"SongTitle": {"S": "Cubano Chant"}
}
]
},
"UnprocessedKeys": {}
}(Ogni mappa di attributi ripiegata su una sola riga; tutto il resto è com'è stato stampato.) Il comando ha chiesto Cubano Chant per primo e l'ha ricevuto per ultimo. Nulla della risposta è posizionale, quindi un'espressione jq che indicizza .Responses.Music[0] sta leggendo l'Item che al servizio è andato di restituire per primo. Filtra invece sugli attributi di chiave.
Due richieste le rifiuta di netto, stampate su stderr con stato di uscita 254:
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchGetItem operation: Provided list of item keys contains duplicates
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchGetItem operation: Too many items requested for the BatchGetItem callIl prefisso aws: [ERROR]: viene dal wrapper della CLI v2; il testo che segue è il messaggio del servizio stesso. Un loop di retry che tratta qualunque uscita diversa da zero come throttling girerà all'infinito su entrambi, quindi ramifica sul messaggio prima di applicare il backoff.
Scrivere a mano quel JSON annidato dentro apici singoli è da dove arriva la maggior parte degli errori. Il DynamoDB Expression Builder assembla mappe di chiave tipizzate e copia un comando pronto da eseguire, il che almeno toglie il quoting dalla lista dei sospetti.
Per rileggere un insieme di chiavi e vedere gli Item senza il giro attraverso il JSON, scarica DynoTable.
Esempi correlati
- DynamoDB BatchGetItem in Node.js — la stessa lettura batch con AWS SDK v3.
- DynamoDB BatchGetItem in Python — la stessa lettura batch con boto3.
- DynamoDB GetItem con la AWS CLI — la lettura del singolo Item che questa raggruppa.
- Operazioni batch in DynamoDB — limiti, fallimento parziale e quando il batching conviene.
- "Too many items requested for the BatchGetItem call" — più di 100 chiavi in una sola richiesta.
- "Provided list of item keys contains duplicates" — la stessa chiave due volte in un batch.
Riferimenti
- BatchGetItem — Amazon DynamoDB API Reference
- batch-get-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-28 rispetto alla documentazione ufficiale AWS collegata sopra.