DynamoDB ResourceNotFoundException

TL;DR — DynamoDB can't find the table (or index) you named in the region/account your client is pointed at. Check for a typo in the table name, the wrong region, or credentials for a different account. It's almost never that the table is really gone.

What it means

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

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

The first is what the live service returns — it names the table it looked for. The second is what DynamoDB Local returns, and seeing it is a reliable sign you are talking to the emulator rather than AWS. Either way, the operation targeted a table or index that doesn't exist from the perspective of this client — the combination of table name + AWS region + account (credentials). All three have to line up. DynamoDB returns it with HTTP status 400 and it's not retryable — the same request keeps failing until you fix the name, region, or credentials (or the table finishes creating: a table too early in the CREATING state can also return this error).

Why it happens

  • Region mismatch — the table is in us-east-1 but the client defaults to us-west-2 (or no region is set, so the SDK picks a different default).
  • Wrong table name — a typo, wrong case (names are case-sensitive on the web service), or an environment-prefixed name (prod-Orders vs Orders).
  • Wrong account — the credentials resolve to a different AWS account than the one that owns the table.
  • Querying an index that doesn't exist or isn't ACTIVE yet (a GSI is still backfilling) — the API reference calls out "a nonexistent table or index" whose "status might not be ACTIVE".
  • The table really was deleted, or you're pointed at DynamoDB Local, which starts empty.

How to fix it

  1. Pin the region explicitly on the client and confirm it matches where the table lives.
  2. Verify the exact table name — list tables in that region (aws dynamodb list-tables --region <r>) and copy the name verbatim.
  3. Confirm the credentials resolve to the owning account (aws sts get-caller-identity).
  4. Check the index name + status if the call uses IndexName (DescribeTable → the GSI must be ACTIVE).

Example

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

How do I fix ResourceNotFoundException in DynamoDB? Check that the table name, AWS region, and account (credentials) all line up: pin the region explicitly on the client, list tables in that region to verify the exact name, and confirm the credentials resolve to the owning account with aws sts get-caller-identity.

Does ResourceNotFoundException mean my table was deleted? Rarely. It usually means the client is looking in the wrong place — a region mismatch, a typo or wrong case in the table name, or credentials for a different account. It also fires when you query an index that doesn't exist or isn't ACTIVE yet, or when you point at DynamoDB Local, which starts empty.

DynoTable workbench

DynoTable lists tables for the active profile and region in the sidebar. If a table is missing, press ⌘P to confirm the profile and check the region on the tab — a mismatch here is the most common cause of this error in the app. ⌘KOpen table by name lets you type the exact table name when ListTables is denied or the list is filtered by a table prefix. Against DynamoDB Local, add a profile with endpoint http://localhost:8000 and matching placeholder credentials (Connect to DynamoDB Local) — Local starts empty until you create tables.

Sources

Work with DynamoDB without the Console

A fast DynamoDB desktop client that runs the real SQL DynamoDB can’t — JOINs, GROUP BY, aggregates — with visual editing and an AI agent on your own Bedrock keys.

Free 30-day trial, no credit card — then the Free plan with no time limit.