DynamoDB ResourceInUseException
TL;DR — Du hast eine Tabellenoperation auf einer Tabelle versucht, die bereits existiert oder noch im Übergang ist (CREATING / UPDATING / DELETING). Prüfe zuerst den Status der Tabelle, oder mache das Erstellen idempotent, indem du "already exists" ignorierst.
Was es bedeutet
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 tableControl-Plane-Operationen (CreateTable, DeleteTable, UpdateTable) verlangen, dass die Tabelle in einem kompatiblen Zustand ist. Dieser Fehler bedeutet, dass sie es nicht ist — entweder existiert sie bereits, oder sie ist mitten im Übergang und DynamoDB akzeptiert keine weitere Operation, bis sie sich auf ACTIVE beruhigt. DynamoDB gibt ihn mit HTTP-Status 400 zurück, und er ist so wie er ist nicht wiederholbar — den identischen Request zu wiederholen scheitert, bis sich der Zustand ändert (warte, bis der Übergang abgeschlossen ist, oder ändere den Request).
Warum es passiert
- Erneutes Ausführen von
CreateTablefür eine Tabelle, die bereits existiert (eine wiederholte Migration/ein wiederholtes Deployment, Tests, die nicht aufräumen). - Operation während eines Übergangs — einen Index erstellen, löschen oder aktualisieren, während die Tabelle noch
CREATING/UPDATINGist. - Ein Wettlauf — zwei Prozesse, die dieselbe Tabelle gleichzeitig erstellen.
So behebst du es
- Prüfe den Status, bevor du handelst.
DescribeTable→ fahre nur fort, wennTableStatusACTIVEist; nutze einen Waiter (waitUntilTableExists), um zu blockieren, bis sie sich beruhigt. - Mache das Erstellen idempotent. Fange
ResourceInUseExceptionbeiCreateTableab und behandle sie als Erfolg (die gewünschte Tabelle existiert). - Serialisiere Tabellenoperationen in Tests/Migrationen, damit nicht zwei gleichzeitig laufen; räume Test-Tabellen im Teardown auf.
Beispiel
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
Was bedeutet ResourceInUseException in DynamoDB?
Eine Control-Plane-Operation (CreateTable, DeleteTable, UpdateTable) zielte auf eine Tabelle, die bereits existiert oder noch durch CREATING, UPDATING oder DELETING übergeht. DynamoDB akzeptiert keine weitere Operation, bis sich die Tabelle auf ACTIVE beruhigt.
Wie mache ich CreateTable idempotent?
Fange die ResourceInUseException ab und behandle sie als Erfolg — die gewünschte Tabelle existiert. Alternativ prüfe zuerst DescribeTable und erstelle nur, wenn die Tabelle fehlt, unter Verwendung eines Waiters wie waitUntilTableExists, um zu blockieren, bis sie sich beruhigt.
Weg in DynoTable
Wenn eine Migration CreateTable erneut ausführt, zeigt DynoTable die Tabelle,
sobald sie existiert — öffne sie mit ⌘K → Open table by name,
während dein Skript weiter probiert. Tabelleneinstellungen zeigen auf einem offenen Tab
TableStatus (CREATING, UPDATING, ACTIVE), sodass du auf ACTIVE warten
kannst, bevor du die nächste Control-Plane-Änderung absetzt. Für lokales Arbeiten
richte ein Local-Profil auf http://localhost:8000 aus
(Running DynamoDB Local) und nutze den
DynamoDB JSON Converter, um Seed-Items zu laden,
sobald die Tabelle sich beruhigt hat.
Bei Cloud-Tabellen, die in UPDATING hängen, listen Tabelleneinstellungen auch laufende
GSI-Backfills auf — warte auf ACTIVE bei jedem Index, bevor im Deploy-Skript das
nächste UpdateTable kommt.
Gegen DynamoDB Local erscheint dieselbe ResourceInUseException, wenn ein Test
CreateTable erneut gegen eine In-Memory-Instanz ausführt, die nie geleert wurde —
behandle Local wie die Cloud und fange den Fehler ab oder warte auf ACTIVE.
Verwandte Fehler
- ResourceNotFoundException — die Tabelle existiert nicht.
- ThrottlingException — zu viele Control-Plane-Operationen.
- Learn: DynamoDB migrations — Migrationen sicher wiederholbar machen.
Quellen
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (verified 2026-07-13)
- CreateTable — Amazon DynamoDB API Reference (verified 2026-07-13)
- UpdateTable — Amazon DynamoDB API Reference (verified 2026-07-13)
- DeleteTable — Amazon DynamoDB API Reference (verified 2026-07-13)