DynamoDB: Table already exists

TL;DR — 操作は対象テーブルを 作成 しようとしていますが、その名前はこのアカウント + リージョンですでに使用済みです。復元(RestoreTableFromBackup / RestoreTableToPointInTime)は TableAlreadyExistsException をスローし、CreateTableImportTable は同じ状況を ResourceInUseException として報告します。新しい対象名を選んでください。復元とインポートは決して既存のテーブルに書き込めません。

意味

TableAlreadyExistsException: A target table with the specified name already exists
ResourceInUseException: Table already exists: my-table

# what the engine actually returns, reproduced against DynamoDB Local:
ResourceInUseException: Cannot create preexisting table

復元とインポート操作は常に 真新しいテーブルを作成 します。ライブのテーブルにマージしたり上書きしたりできません。対象名が同じアカウントとリージョン内の既存のテーブル(その状態が何であれ)に解決される場合、リクエストは前もって失敗します。どの例外が見えるかは API によります: 復元ファミリーは独自の TableAlreadyExistsException を持ち、CreateTableImportTable は総合的な ResourceInUseException を出します。

発生する理由

  • 元の名前にバックアップを復元 — 自然な本能(「テーブルを元に戻す」)が、まだ存在するテーブルと衝突する。
  • インポートや IaC デプロイの再実行 — 再試行された ImportTable、またはスタックの状態外にすでに存在するテーブルを作成しようとする CloudFormation/Terraform/CDK スタック。
  • create-then-retry の競合 — 最初の CreateTable が成功した(またはまだ CREATING)ため、リトライが名前を使用済みと見つける。
  • 環境の衝突 — 2つのステージ/環境がアカウントを共有し、両方がプレフィックスなしの名前を望む。

修正方法

  1. 新しい名前に復元してから切り替えますmy-table-restored として復元し、データを検証し、アプリケーションを向け直します(または古いテーブルを削除し、消えたら元の名前で再度復元します):

    aws dynamodb restore-table-from-backup \
      --target-table-name my-table-restored \
      --backup-arn arn:aws:dynamodb:...:table/my-table/backup/...
  2. テーブルを置き換えるつもりなら、まず既存のものを削除し、削除が完了するまで待ちます。テーブルが DELETING 状態の間、名前は使用済みのままです(そのとき試みた復元は TableInUseException で失敗します。CreateTable 側は ResourceInUseException を参照)。

  3. インポートには、未使用の対象名を選びます。ImportTable は新しいテーブルのみを作成します。既存のテーブルにデータをロードするには、代わりに BatchWriteItem/PutItem で書き込みます。

  4. IaC の再試行には、作成と戦うのではなく、既存のテーブルをスタックの状態にインポート(またはリネーム)します。

  5. 実際に何が存在するか確認します — 同じリージョン/アカウントでの aws dynamodb list-tables が、名前が本当に空いているか決着させます。

切り替え前に復元したテーブルを検証するのは、人々がスキップする安全なステップです。DynoTable デスクトップアプリ は復元されたテーブルと元のテーブルを並べて置くため、スキーマを差分し、アイテムを先にスポットチェックできます。そして復元したテーブルの実行コストを見積もっているなら、DynamoDB 料金計算ツール が両方のキャパシティモードをカバーします。

DynoTable で測る

切り替えの前に、元のテーブルとリストアしたテーブルの両方を DynoTable で開きましょう — ⌘K で切り替え、アイテムを並べて抜き取り確認します。ステージング(⌘S)を使えば、本番のトラフィックに触れずに、リストアしたコピーに対して書き込みを試せます。

リストアしたテーブルの規模は料金計算ツールで見積もりましょう。アカウントやリージョンの切り替えは ⌘P、Settings → Profiles では Test Connection を実行します。AWS に接続するインストールを参照してください。

出典

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。