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つのオートメーション経路の競合 — 並列デプロイやリージョン拡張ジョブが両方とも同じレプリカ作成を送信する。
修正方法
変更する前にレプリケーショングループを確認します:
aws dynamodb describe-table --table-name orders \ --query 'Table.Replicas[].RegionName'操作を冪等にします — 作成時にこの例外を(削除時に
ReplicaNotFoundExceptionを)キャッチして成功として扱います。テーブルはすでに望んだ状態です:catch (e) { if (e.name === 'ReplicaAlreadyExistsException') return; // desired state reached throw e; }IaC を現実と調整します — 手動追加されたレプリカをスタックにインポートし、すべてのデプロイが作成を再試行しないようにします。
レプリカの変更を直列化します — テーブルごとに一度に1つのレプリカ更新。次の変更の前に、テーブルが
ACTIVEに戻る(そして新しいレプリカがCREATINGを離れる)のを待ちます。
レプリカが実際にデータを提供すること — API が受け入れただけでなく — を確認するのは、テーブルを見る作業です: DynoTable デスクトップアプリ は各リージョンのレプリカを直接閲覧し、DynamoDB 料金計算ツール は追加のリージョンが加える継続的なコストを表示します。
関連するエラー
- ReplicaNotFoundException — 鏡像: グループにないリージョンを削除する。
- GlobalTableNotFoundException — レガシー vs 現行の API の混乱。
- ResourceInUseException — テーブルが変更の途中。
- Learn: DynamoDB global tables
References
- UpdateGlobalTable — Amazon DynamoDB API Reference
- UpdateTable — Amazon DynamoDB API Reference
- Global tables — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。