DynamoDB ResourceInUseException
TL;DR — Você tentou uma operação de tabela em uma tabela que já existe ou ainda está em transição (CREATING/UPDATING/DELETING). Verifique primeiro o status da tabela ou torne a criação idempotente ignorando "já existe".
O que significa
ResourceInUseException: Table already exists: <name>
ResourceInUseException: Attempt to change a resource which is still in use: Table is being created/deleted
# what the engine actually returns, reproduced against DynamoDB Local:
ResourceInUseException: Cannot create preexisting tableAs operações do control-plane (CreateTable, DeleteTable, UpdateTable) exigem que a tabela esteja em um estado compatível. Este erro significa que não é - ou já existe ou está no meio da transição e o DynamoDB não aceitará outra operação até que se estabeleça no ACTIVE. DynamoDB o retorna com status HTTP 400 e não é possível tentar novamente no estado em que se encontra - tentar novamente a solicitação idêntica falha até que o estado mude (aguarde a conclusão da transição ou altere a solicitação).
Por que isso acontece
- Reexecutando
CreateTablepara uma tabela que já existe (uma migração repetida/deploy, testes que não limpam). - Operando durante uma transição — criando um índice, excluindo ou atualizando enquanto a tabela ainda é
CREATING/UPDATING. - Uma corrida — dois processos criando a mesma tabela simultaneamente.
Como corrigir
- Verifique o status antes de agir.
DescribeTable→ prossiga somente quandoTableStatusforACTIVE; use um waiter (waitUntilTableExists) para bloquear até que ele se estabilize. - Faça a criação idempotente. Capture
ResourceInUseExceptionemCreateTablee trate-o como sucesso (a tabela que você queria existe). - Serialize operações de tabela em testes/migrations para que duas não sejam executadas ao mesmo tempo; limpe as tabelas de teste na desmontagem.
Exemplo
import {DynamoDBClient, CreateTableCommand, ResourceInUseException} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
try {
await client.send(new CreateTableCommand(tableDef));
} catch (err) {
if (!(err instanceof ResourceInUseException)) throw err;
// Table already exists — that's fine, carry on.
}FAQ
O que ResourceInUseException significa em DynamoDB?
Uma operação de control-plane (CreateTable, DeleteTable, UpdateTable) teve como alvo uma tabela que já existe ou ainda está em transição por meio de CREATING, UPDATING ou DELETING. O DynamoDB não aceitará outra operação até que a tabela seja definida como ACTIVE.
Como posso tornar o CreateTable idempotente?
Capture a ResourceInUseException e trate-a como sucesso — a tabela que você queria existe. Alternativamente, verifique primeiro o DescribeTable e crie apenas quando a tabela estiver ausente, usando um waiter como o waitUntilTableExists para bloquear até que ela se acomode.
Caminho no DynoTable
Quando uma migração executa novamente o CreateTable, o DynoTable mostra a tabela assim que
existe — abra-o com ⌘K → Abra tabela por nome enquanto seu script
novas tentativas. Configurações da tabela em uma guia aberta exibe TableStatus (CREATING,
UPDATING, ACTIVE) para que você possa esperar pelo ACTIVE antes de emitir o próximo
mudança de control-plane. Para iteração local, aponte um perfil Local para
http://localhost:8000 (Executando DynamoDB Local) e
use o conversor DynamoDB JSON para carregar sementes
itens assim que a tabela estiver resolvida.
Para tabelas na nuvem presas no UPDATING, Configurações da tabela também lista o GSI em andamento
preenchimentos – aguarde ACTIVE em cada índice antes do próximo UpdateTable em
seu script de implantação.
Contra o DynamoDB Local, o mesmo ResourceInUseException aparece quando um teste
executa novamente o CreateTable em uma instância na memória que nunca foi apagada – tratar
Local como nuvem e detecte o erro ou aguarde ACTIVE.
Erros relacionados
- ResourceNotFoundException — a tabela não existe.
- ThrottlingException — muitas operações no control-plane.
- Aprenda: migrações DynamoDB
Fontes
- Tratamento de erros com DynamoDB — Guia do desenvolvedor do Amazon DynamoDB (verificado em 13/07/2026)
- CreateTable — Referência Amazon DynamoDB API (verificado em 13/07/2026)
- UpdateTable – Referência Amazon DynamoDB API (verificado em 13/07/2026)
- DeleteTable — Referência Amazon DynamoDB API (verificado em 13/07/2026)