Tentativo di modificare un GSI in fase di creazione
TL;DR — Durante la creazione di un indice secondario globale (IndexStatus = CREATING), DynamoDB rifiuta cambiamenti strutturali contrastanti. Durante la fase iniziale di allocazione delle risorse non è possibile modificare il nuovo indice, modificare il throughput assegnato dell'indice o della tabella, aggiungere o eliminare altri indici o eliminare la tabella. Una volta avviato il backfill, puoi eliminare l'indice in volo o modificare nuovamente la tabella/il throughput GSI, ma l'aggiunta o l'eliminazione di altri indici e l'eliminazione della tabella rimangono bloccate finché non diventa "ATTIVO". Apporta GSI modifiche una alla volta: crea o elimina una per "UpdateTable".
Cosa significa
ValidationException: Attempting to modify a GSI that is being createdLa creazione di un GSI su una tabella popolata attiva un backfill — DynamoDB riproduce gli elementi esistenti nel nuovo indice in background. Durante tutta questa fase l'"IndexStatus" dell'indice è "CREATING". Durante il recupero DynamoDB rifiuta ulteriori modifiche strutturali all'indice o alla tabella in modo che la creazione rimanga coerente. È una ValidationException HTTP 400; il nuovo tentativo immediato fallisce finché l'indice non termina.
Perché succede
- Operazioni sugli indici sovrapposti: un
UpdateTable(o un'applicazione IaC) tenta di modificare/eliminare un GSI o di aggiungerne un secondo, mentre il primo è ancora in costruzione. - CloudFormation/Terraform batching: lo strumento tenta più modifiche GSI in un singolo aggiornamento; DynamoDB consente solo una GSI creazione o eliminazione per
UpdateTable. - Modifica del throughput durante l'allocazione delle risorse: mentre il nuovo indice sta ancora allocando le risorse (
Backfilling: false), non è possibile modificare il throughput assegnato di quell'indice o della tabella; tali modifiche saranno nuovamente consentite una volta iniziato il riempimento. - Eliminazione della tabella troppo presto: uno smontaggio che supera il riempimento.
Come risolverlo
- Attendere "ACTIVE". Effettua il polling su
DescribeTablee controlla ogniGlobalSecondaryIndexes[].IndexStatus; procedere solo quando èACTIVE.La descrizione dell'indice porta anche un booleanoaws dynamodb describe-table --table-name <Table> \ --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"Backfilling(false = allocazione delle risorse, true = riempimento) e la metrica CloudWatchOnlineIndexPercentageProgresstraccia la costruzione. - Modifiche all'indice della sequenza: una creazione/eliminazione per
UpdateTable; non aggiungere un nuovo GSI mentre un altro è in costruzione. - In CloudFormation/Terraform, suddividere GSI aggiunte tra distribuzioni separate in modo che ogni recupero venga completato prima della modifica successiva.
- Rinvia altre modifiche all'indice e l'eliminazione della tabella finché l'indice non diventa
ACTIVE. Hai bisogno di salvare? Una volta avviato il backfill, è possibile annullare la compilazione eliminando l'indice in fase di creazione.
Prima di riprovare in DynoTable
Mentre un GSI è in "CREAZIONE", apri la tabella in DynoTable e controlla lo stato dell'indice nei dettagli della tabella prima di mettere in coda un'altra "UpdateTable". L'app aggiorna "DescribeTable" mentre navighi: quando "IndexStatus" passa a "ACTIVE", l'indice viene visualizzato nel selettore del modello di query ed è possibile eseguirne una query dalla modalità visiva o dal generatore di query.
Non impilare le modifiche CloudFormation/Terraform GSI in una sola applicazione mentre DynoTable mostra ancora CREATING. Distribuzioni in sequenza; utilizzare DynoTable come pannello di stato tra le applicazioni. Se devi annullare una build dopo l'inizio del backfill, elimina l'indice dal tuo IaC/CLI, quindi verifica che scompaia dall'elenco degli indici DynoTable.
Fonti
- Gestione degli indici secondari globali (verificato il 13-07-2026)
- UpdateTable - Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
Errori correlati
- Gli indici secondari locali devono essere specificati alla creazione della tabella — l'equivalente LSI (gli LSI non possono essere aggiunti affatto).
- ResourceInUseException — operante su una tabella/indice che non è in uno stato modificabile.
- Risorsa richiesta non trovata/indice non trovato - interrogazione di un indice che non è pronto o non esiste.
- Impara: GSI vs LSI · GSI internals
Riferimenti
- Gestione degli indici secondari globali in DynamoDB - Guida per sviluppatori di Amazon DynamoDB
- UpdateTable - Riferimento Amazon DynamoDB API
- Gestione degli errori con DynamoDB — Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.