DynamoDB ResourceNotFoundException

TL;DR — DynamoDB findet die Tabelle (oder den Index), die du genannt hast, in der Region bzw. dem Konto nicht, auf die dein Client zeigt. Prüfe auf einen Tippfehler im Tabellennamen, eine falsche region oder Anmeldedaten für ein anderes Konto. Fast nie ist die Tabelle wirklich weg.

Was es bedeutet

ResourceNotFoundException: Requested resource not found: Table: <table-name> not found

# on DynamoDB Local:
ResourceNotFoundException: Cannot do operations on a non-existent table

Die erste Meldung gibt der Live-Service zurück — sie nennt die Tabelle, nach der er gesucht hat. Die zweite gibt DynamoDB Local zurück; siehst du sie, ist das ein verlässliches Zeichen dafür, dass du mit dem Emulator sprichst und nicht mit AWS. So oder so zielte die Operation auf eine Tabelle oder einen Index, die/der aus der Perspektive dieses Clients nicht existiert — die Kombination aus Tabellenname + AWS-Region + Konto (Anmeldedaten). Alle drei müssen zusammenpassen. DynamoDB gibt ihn mit HTTP-Status 400 zurück und er ist nicht wiederholbar — derselbe Request scheitert immer wieder, bis du Name, Region oder Anmeldedaten korrigierst (oder die Tabelle fertig erstellt ist: eine Tabelle, die zu früh im CREATING-Status ist, kann diesen Fehler ebenfalls zurückgeben).

Warum es passiert

  • Region-Konflikt — die Tabelle liegt in us-east-1, aber der Client verwendet standardmäßig us-west-2 (oder es ist keine Region gesetzt, sodass das SDK einen anderen Default wählt).
  • Falscher Tabellenname — ein Tippfehler, falsche Groß-/Kleinschreibung (Namen unterscheiden im Web-Service Groß-/Kleinschreibung) oder ein umgebungspräfixierter Name (prod-Orders vs. Orders).
  • Falsches Konto — die Anmeldedaten lösen sich in ein anderes AWS-Konto auf als das, dem die Tabelle gehört.
  • Abfrage eines Index, der nicht existiert oder noch nicht ACTIVE ist (ein GSI füllt noch nach) — die API-Referenz nennt "a nonexistent table or index", dessen "status might not be ACTIVE".
  • Die Tabelle wurde wirklich gelöscht, oder du zeigst auf DynamoDB Local, das leer startet.

So behebst du es

  1. Setze die Region explizit am Client und bestätige, dass sie mit dem Ort übereinstimmt, an dem die Tabelle liegt.
  2. Verifiziere den genauen Tabellennamen — liste die Tabellen in dieser Region auf (aws dynamodb list-tables --region <r>) und kopiere den Namen wörtlich.
  3. Bestätige, dass die Anmeldedaten sich in das besitzende Konto auflösen (aws sts get-caller-identity).
  4. Prüfe Indexname + Status, wenn der Aufruf IndexName verwendet (DescribeTable → der GSI muss ACTIVE sein).

Beispiel

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';

// Pin the region so the client can't silently target the wrong one:
const client = new DynamoDBClient({region: 'us-east-1'});

FAQ

Wie behebe ich ResourceNotFoundException in DynamoDB? Prüfe, dass Tabellenname, AWS-Region und Konto (Anmeldedaten) alle zusammenpassen: setze die Region explizit am Client, liste die Tabellen in dieser Region auf, um den genauen Namen zu verifizieren, und bestätige mit aws sts get-caller-identity, dass die Anmeldedaten sich in das besitzende Konto auflösen.

Bedeutet ResourceNotFoundException, dass meine Tabelle gelöscht wurde? Selten. Meist bedeutet es, dass der Client an der falschen Stelle sucht — ein Region-Konflikt, ein Tippfehler oder falsche Groß-/Kleinschreibung im Tabellennamen oder Anmeldedaten für ein anderes Konto. Er tritt auch auf, wenn du einen Index abfragst, der nicht existiert oder noch nicht ACTIVE ist, oder wenn du auf DynamoDB Local zeigst, das leer startet.

DynoTable-Workbench

DynoTable listet in der Seitenleiste die Tabellen des aktiven Profils und der aktiven Region. Fehlt eine Tabelle, drücke ⌘P, um das Profil zu bestätigen, und prüfe die Region am Tab — eine Diskrepanz hier ist die häufigste Ursache dieses Fehlers in der App. Mit ⌘KOpen table by name kannst du den exakten Tabellennamen eintippen, wenn ListTables verweigert wird oder die Liste nach einem Tabellenpräfix gefiltert ist. Für DynamoDB Local legst du ein Profil mit dem Endpoint http://localhost:8000 und passenden Platzhalter-Credentials an (Connect to DynamoDB Local) — Local startet leer, bis du Tabellen anlegst.

Verwandte Fehler

Quellen

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.