"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 created

Um 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 entrada LocalSecondaryIndexes em 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

  1. 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).
  2. 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", ...}}]'
  3. 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.
  4. 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

Erros relacionados

Referências

Última verificação em 13/07/2026 em relação à documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.