ReplicaAlreadyExistsException

TL;DR — 追加しているリージョンは、すでにグローバルテーブルのレプリケーショングループにあります。追加は冪等ではないため、同じリクエストの再実行(リトライ、リプレイされたデプロイ、ドリフトした IaC)は、最初のものが成功すると失敗します。まずテーブルを記述し、そこにないレプリカのみを作成する — またはこの例外を「すでに完了」として扱い、先に進んでください。

意味

ReplicaAlreadyExistsException: The specified replica is already part of
the global table.

レプリカ管理は、厳格な前提条件を持つコントロールプレーンの変更です: Create はリージョンが不在であることを、Delete はリージョンが存在することを要求します。eu-west-1 がすでにテーブルをレプリケートしているときに eu-west-1 の作成を求めるのは、その前提条件に違反します。望んだ状態はすでに存在します。

発生する理由

  • リトライまたはリプレイされたプロビジョニングステップ — 最初の試行が成功し(おそらくタイムアウトが成功を隠した後)、リトライが同じリージョンを再追加する。
  • Infrastructure-as-code のドリフト — レプリカがコンソールで手動追加され、その後 IaC パイプラインがそれを再び追加しようとする。
  • 2つのオートメーション経路の競合 — 並列デプロイやリージョン拡張ジョブが両方とも同じレプリカ作成を送信する。

修正方法

  1. 変更する前にレプリケーショングループを確認します:

    aws dynamodb describe-table --table-name orders \
      --query 'Table.Replicas[].RegionName'
  2. 操作を冪等にします — 作成時にこの例外を(削除時に ReplicaNotFoundException を)キャッチして成功として扱います。テーブルはすでに望んだ状態です:

    catch (e) {
      if (e.name === 'ReplicaAlreadyExistsException') return; // desired state reached
      throw e;
    }
  3. IaC を現実と調整します — 手動追加されたレプリカをスタックにインポートし、すべてのデプロイが作成を再試行しないようにします。

  4. レプリカの変更を直列化します — テーブルごとに一度に1つのレプリカ更新。次の変更の前に、テーブルが ACTIVE に戻る(そして新しいレプリカが CREATING を離れる)のを待ちます。

レプリカが実際にデータを提供すること — API が受け入れただけでなく — を確認するのは、テーブルを見る作業です: DynoTable デスクトップアプリ は各リージョンのレプリカを直接閲覧し、DynamoDB 料金計算ツール は追加のリージョンが加える継続的なコストを表示します。

関連するエラー

References

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

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。