DynamoDB ResourceInUseException
TL;DR: intentó una operación de tabla en una tabla que ya existe o que aún está en transición (CREATING / UPDATING / DELETING). Primero verifique el estado de la tabla o haga que la creación sea idempotente ignorando "ya existe".
Qué 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 tableLas operaciones del plano de control (CreateTable, DeleteTable, UpdateTable) requieren que la tabla esté en un estado compatible. Este error significa que no lo está — o ya existe, o está en plena transición y DynamoDB no aceptará otra operación hasta que se asiente en ACTIVE. DynamoDB lo devuelve con estado HTTP 400, y no es reintentable tal cual — reintentar la petición idéntica falla hasta que el estado cambie (espera a que termine la transición, o cambia la petición).
Por qué ocurre
- Volver a ejecutar
CreateTablepara una tabla que ya existe (una migración/despliegue repetido, pruebas que no limpian). - Operar durante una transición — crear un índice, borrar o actualizar mientras la tabla sigue en
CREATING/UPDATING. - Una carrera — dos procesos creando la misma tabla de forma concurrente.
Cómo solucionarlo
- Comprueba el estado antes de actuar.
DescribeTable→ procede solo cuandoTableStatusseaACTIVE; usa un waiter (waitUntilTableExists) para bloquear hasta que se asiente. - Haz idempotente la creación. Captura
ResourceInUseExceptionenCreateTabley trátalo como éxito (la tabla que querías existe). - Serializa las operaciones de tabla en pruebas/migraciones para que no se ejecuten dos a la vez; limpia las tablas de prueba en el teardown.
Ejemplo
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
¿Qué significa ResourceInUseException en DynamoDB?
Una operación del plano de control (CreateTable, DeleteTable, UpdateTable) apuntó a una tabla que ya existe o sigue en transición por CREATING, UPDATING o DELETING. DynamoDB no aceptará otra operación hasta que la tabla se asiente en ACTIVE.
¿Cómo hago idempotente CreateTable?
Captura el ResourceInUseException y trátalo como éxito — la tabla que querías existe. Como alternativa, comprueba primero DescribeTable y crea solo cuando la tabla esté ausente, usando un waiter como waitUntilTableExists para bloquear hasta que se asiente.
Ruta en DynoTable
Cuando una migración vuelve a ejecutar CreateTable, DynoTable muestra la tabla en
cuanto existe — ábrela con ⌘K → Open table by name mientras tu script
reintenta. Ajustes de la tabla en una pestaña abierta muestra TableStatus (CREATING,
UPDATING, ACTIVE) para que esperes a ACTIVE antes de emitir el siguiente
cambio del plano de control. Para iterar en local, apunta un perfil Local a
http://localhost:8000 (Ejecutar DynamoDB Local) y usa el
conversor de DynamoDB JSON para cargar los Items
de semilla en cuanto la tabla se asiente.
Para las tablas en la nube atascadas en UPDATING, Ajustes de la tabla también lista los
rellenados de GSI en curso — espera a ACTIVE en cada índice antes del siguiente
UpdateTable de tu script de despliegue.
Contra DynamoDB Local aparece el mismo ResourceInUseException cuando una prueba
vuelve a ejecutar CreateTable sobre una instancia en memoria que nunca se limpió —
trata Local como la nube y captura el error o espera a ACTIVE.
Errores relacionados
- ResourceNotFoundException — la tabla no existe.
- ThrottlingException — demasiadas operaciones del plano de control.
- Aprende: DynamoDB migrations
Fuentes
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (verificado el 2026-07-13)
- CreateTable — Amazon DynamoDB API Reference (verificado el 2026-07-13)
- UpdateTable — Amazon DynamoDB API Reference (verificado el 2026-07-13)
- DeleteTable — Amazon DynamoDB API Reference (verificado el 2026-07-13)