"Local secondary indexes must be specified at table creation": LSIs só na criação
TL;DR — Um índice secundário local (LSI) só pode ser criado no momento da criação de sua tabela; ele não pode ser adicionado, alterado ou removido posteriormente. UpdateTable não tem operação para LSIs, portanto, qualquer tentativa de adicionar um a uma tabela ativa falha na validação. Para obter um novo LSI você deve criar uma nova tabela (com o LSI) e migrar os dados — ou usar um índice secundário global (GSI), que pode ser adicionado online.
O que significa
ValidationException: One or more parameter values were invalid: Local secondary
indexes can only be created when a table is createdUm LSI compartilha sua chave de partição com a tabela base e adiciona uma chave de classificação alternativa; o DynamoDB o coloca junto à partição do item no momento da gravação. Por causa desse acoplamento físico, um LSI deve existir desde a primeira gravação da tabela — UpdateTable suporta adicionar/remover GSIs, mas não tem nenhum parâmetro de LSI, portanto não há nenhuma solicitação que você possa enviar para adicioná-lo depois. A mensagem exata varia de acordo com o caminho (uma chamada SDK/CLI pode falhar na validação de parâmetros no lado do cliente; as ferramentas IaC apresentam seu próprio texto), mas o formulário do lado do serviço é um HTTP 400 ValidationException e não pode ser repetido: a operação simplesmente não é suportada em uma tabela existente.
Por que isso acontece
- Adicionando um LSI a uma tabela ativa — chamando
UpdateTable(ou editando um modelo CloudFormation/Terraform) para introduzir uma nova entradaLocalSecondaryIndexesem uma tabela que já existe. - Alterar um LSI existente — seu esquema principal ou projeção é corrigido na criação; edições são rejeitadas.
- Uma comparação IaC que recria versus atualizações — a ferramenta tenta atualizar no local uma alteração do LSI que o DynamoDB permite apenas no momento da criação.
Como corrigir
- Crie uma nova tabela com o LSI definido antecipadamente e, em seguida, migre os dados (varredura e gravação, ou exportação/importação on-demand).
- Use um GSI se o padrão de acesso permitir — GSIs podem ser adicionados a uma tabela existente online e não requerem a mesma chave de partição:
aws dynamodb update-table --table-name <Table> \ --attribute-definitions AttributeName=gsi_sk,AttributeType=S \ --global-secondary-index-updates '[{"Create":{"IndexName":"gsi1", ...}}]' - Planeje os LSIs durante a modelagem — decida as chaves de classificação alternativas antes de a tabela existir, já que elas não podem ser adicionadas depois.
- Modele primeiro o padrão de acesso em um GSI. Se a consulta funcionar em um GSI com uma chave de partição diferente, você evita reconstruir a tabela por completo.
Confira o tamanho no DynoTable
Antes de reconstruir uma tabela por causa de um LSI, valide o padrão de acesso no DynoTable — abra a tabela com ⌘K e teste se uma consulta em GSI atende à mesma necessidade. O Query Builder gera a KeyConditionExpression que seu novo índice precisa atender.
Use a calculadora de preços para comparar a amplificação de escrita do LSI com a alternativa em GSI. Troque de perfil com ⌘P; consulte Conectar ao AWS e Instalar.
Fontes
- Local secondary indexes (verificado em 13/07/2026)
- UpdateTable — Amazon DynamoDB API Reference (verificado em 13/07/2026)
Erros relacionados
- Attempting to modify a GSI that is being created — uma mudança de GSI bloqueada enquanto o índice é construído.
- Requested resource not found / index not found — consultar um nome de índice que não existe.
- ValidationException (visão geral)
- Aprenda: GSI vs LSI · Índices
Referências
- Local secondary indexes — Amazon DynamoDB Developer Guide
- UpdateTable — Amazon DynamoDB API Reference
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
Última verificação em 13/07/2026 em relação à documentação oficial da AWS vinculada acima.