DynamoDB ResourceNotFoundException
TL;DR — クライアントが指しているリージョン/アカウントで、指定したテーブル(またはインデックス)を DynamoDB が見つけられません。テーブル名のタイプミス、誤った region、または別のアカウントの認証情報を確認してください。テーブルが本当に消えたということはほとんどありません。
意味
ResourceNotFoundException: Requested resource not found: Table: <table-name> not found
# on DynamoDB Local:
ResourceNotFoundException: Cannot do operations on a non-existent table1つ目は実サービスが返すもので、探しに行ったテーブル名が入ります。2つ目は DynamoDB Local が返すもので、これが見えたら AWS ではなくエミュレータと話している確かな印です。いずれにせよ、操作は このクライアントの視点から 存在しないテーブルやインデックスを対象にしました。テーブル名 + AWS リージョン + アカウント(認証情報)の組み合わせです。この3つすべてが揃う必要があります。DynamoDB はこれを HTTP ステータス 400 で返し、リトライ不可です。名前、リージョン、または認証情報を修正するまで(あるいはテーブルの作成が完了するまで: CREATING 状態の早すぎるテーブルもこのエラーを返すことがあります)同じリクエストは失敗し続けます。
発生する理由
- リージョンの不一致 — テーブルは
us-east-1にあるが、クライアントがデフォルトでus-west-2(またはリージョンが未設定で、SDK が別のデフォルトを選ぶ)。 - 誤ったテーブル名 — タイプミス、誤った大文字小文字(ウェブサービスでは名前は大文字小文字を区別)、または環境プレフィックス付きの名前(
prod-OrdersvsOrders)。 - 誤ったアカウント — 認証情報が、テーブルを所有するアカウントとは別の AWS アカウントに解決している。
- 存在しない、またはまだ
ACTIVEでないインデックスを照会(GSI がまだバックフィル中)— API リファレンスは「存在しないテーブルまたはインデックス」で「ステータスがACTIVEでないかもしれない」と指摘しています。 - テーブルが本当に削除された、または空で始まる DynamoDB Local を指している。
修正方法
- リージョンを明示的に固定し、テーブルが存在する場所と一致することを確認します。
- 正確なテーブル名を検証します — そのリージョンのテーブルを一覧表示し(
aws dynamodb list-tables --region <r>)、名前をそのままコピーします。 - 認証情報が 所有アカウントに解決することを確認します(
aws sts get-caller-identity)。 - 呼び出しが
IndexNameを使う場合、インデックス名 + ステータスを確認します(DescribeTable→ GSI はACTIVEである必要があります)。
例
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'});よくある質問
DynamoDB で ResourceNotFoundException を修正するには?
テーブル名、AWS リージョン、アカウント(認証情報)がすべて揃うことを確認します: リージョンをクライアントに明示的に固定し、そのリージョンのテーブルを一覧表示して正確な名前を検証し、aws sts get-caller-identity で認証情報が所有アカウントに解決することを確認します。
ResourceNotFoundException はテーブルが削除されたことを意味しますか? めったにありません。通常はクライアントが誤った場所を見ていることを意味します。リージョンの不一致、テーブル名のタイプミスや誤った大文字小文字、または別のアカウントの認証情報です。存在しない、またはまだ ACTIVE でないインデックスを照会したとき、あるいは空で始まる DynamoDB Local を指しているときにも発生します。
DynoTable ワークベンチ
DynoTable は、有効なプロファイルとリージョンのテーブルをサイドバーに一覧します。テーブルが
見当たらないときは、⌘P でプロファイルを確認し、タブのリージョンを見てください —
アプリでこのエラーが出る原因として最も多いのが、ここの食い違いです。ListTables が拒否されている
場合や、一覧がテーブルの接頭辞で絞られている場合は、⌘K → Open table by name で
正確なテーブル名を入力できます。
DynamoDB Local が相手なら、エンドポイント http://localhost:8000 と、それに合ったプレースホルダーの
認証情報でプロファイルを追加してください(DynamoDB Local への接続)
— Local は、テーブルを作るまで空の状態で始まります。
関連するエラー
- ResourceInUseException — 反対: テーブルがすでに存在する。
- 設定にリージョンがない
- セキュリティトークンが無効
- Learn: Running DynamoDB Local — Local は空で始まる。どのエンドポイントにいるか把握しましょう。
出典
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。