Tentando modificar um GSI que está sendo criado
TL;DR — Enquanto um índice secundário global está sendo construído (IndexStatus = CREATING), o DynamoDB rejeita mudanças estruturais conflitantes. Durante a fase inicial de alocação de recursos, você não pode modificar o novo índice, alterar a taxa de transferência provisionada do índice ou da tabela, adicionar ou excluir outros índices ou excluir a tabela. Depois que o preenchimento for iniciado, você poderá excluir o índice em andamento ou alterar a taxa de transferência da tabela/GSI novamente, mas adicionar ou excluir outros índices e excluir a tabela permanecerão bloqueados até que seja ACTIVE. Faça alterações no GSI, uma de cada vez – uma criação ou exclusão por UpdateTable.
O que significa
ValidationException: Attempting to modify a GSI that is being createdA criação de um GSI em uma tabela preenchida aciona um preenchimento — o DynamoDB reproduz os itens existentes no novo índice em segundo plano. Ao longo dessa fase, o IndexStatus do índice é CREATING. Durante o preenchimento, o DynamoDB rejeita outras alterações estruturais no índice ou tabela para que a construção permaneça consistente. É um HTTP 400 ValidationException; tentar novamente falha imediatamente até que o índice termine.
Por que isso acontece
- Operações de índice sobrepostas — um
UpdateTable(ou um apply de IaC) tenta modificar/excluir um GSI, ou adicionar um segundo, enquanto o primeiro ainda está sendo construído. - CloudFormation/Terraform batching — a ferramenta tenta várias alterações do GSI em uma única atualização; O DynamoDB permite apenas criar ou excluir um GSI por
UpdateTable. - Alteração na taxa de transferência durante a alocação de recursos — enquanto o novo índice ainda está alocando recursos (
Backfilling: false), você não pode modificar a taxa de transferência provisionada desse índice ou da tabela; essas alterações serão permitidas novamente assim que o preenchimento for iniciado. - Excluir a tabela muito cedo — uma desmontagem que acelera o preenchimento.
Como corrigir
- Aguarde
ACTIVE. PesquiseDescribeTablee verifique cadaGlobalSecondaryIndexes[].IndexStatus; prossiga apenas quando forACTIVE.A descrição do índice também traz um booleanoaws dynamodb describe-table --table-name <Table> \ --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"Backfilling(false = alocação de recursos, true = preenchimento), e a métrica do CloudWatchOnlineIndexPercentageProgressacompanha a construção. - Sequencie as alterações de índice — uma criação/exclusão por
UpdateTable; não adicione um novo GSI enquanto outro estiver sendo construído. - No CloudFormation/Terraform, divida as adições de GSI em deploys separados para que cada preenchimento termine antes da próxima alteração.
- Adie outras alterações de índice e a exclusão da tabela até que o índice esteja
ACTIVE. Precisa desistir? Depois que o preenchimento começa, você pode cancelar a construção excluindo o índice que está sendo criado.
Antes de tentar de novo no DynoTable
Enquanto um GSI estiver CREATING, abra a tabela no DynoTable e acompanhe o status do índice nos detalhes da tabela antes de enfileirar outro UpdateTable. O app atualiza o DescribeTable conforme você navega — quando o IndexStatus muda para ACTIVE, o índice aparece no seletor de padrões de consulta e você pode consultá-lo pelo modo Visual ou pelo query builder.
Não acumule alterações de GSI do CloudFormation/Terraform em um único apply enquanto o DynoTable ainda mostrar CREATING. Sequencie os deploys; use o DynoTable como painel de status confiável entre eles. Se precisar cancelar uma construção depois que o preenchimento começou, exclua esse índice pelo seu IaC/CLI e confirme que ele desaparece da lista de índices do DynoTable.
Fontes
- Managing Global Secondary Indexes (verificado em 13/07/2026)
- UpdateTable — Amazon DynamoDB API Reference (verificado em 13/07/2026)
Erros relacionados
- Local secondary indexes must be specified at table creation — o equivalente para LSI (LSIs não podem ser adicionados de jeito nenhum).
- ResourceInUseException — operar em uma tabela/índice que não está em um estado modificável.
- Requested resource not found / index not found — consultar um índice que não está pronto ou não existe.
- Aprenda: GSI vs LSI · GSI internals
Referências
- Managing Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- UpdateTable — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Última verificação em 13/07/2026 em relação à documentação oficial da AWS vinculada acima.