DynamoDB ReplicaNotFoundException

TL;DR — Güncellemeye ya da kaldırmaya çalıştığınız bölge çoğaltması bu global tablonun parçası değil. Genellikle yanlış bir bölge adı, zaten kaldırılmış bir çoğaltma ya da süren başka bir çoğaltma güncellemesiyle yarışan bir çağrı. Mevcut çoğaltmaları DescribeTable ile doğrulayın, sonra var olan birini hedefleyin.

Ne anlama gelir

ReplicaNotFoundException: The specified replica is no longer part of the global table.

Global-tablo işlemleri (UpdateGlobalTable ya da ReplicaUpdates/Delete içeren UpdateTable), bir çoğaltmayı AWS bölgesiyle adresler. Bu HTTP 400, adlandırdığınız bölgenin şu anda global tablonun bir çoğaltması olmadığı anlamına gelir. Gerçek bir çoğaltmayı hedefleyene kadar istemci tarafında ve yeniden denenebilir değildir.

Neden olur

  • Yanlış bölge kodu — çoğaltma us-east-1'deyken us-east-2 ya da hiç eklenmemiş bir bölge.
  • Çoğaltma zaten kaldırıldı — önceki bir güncellemenin tablodan zaten düşürdüğü bir bölgeye karşı bir silme.
  • Çakışan çoğaltma değişiklikleri — tablo önceki bir değişiklikten hâlâ UPDATING iken UpdateTable çalışamaz ve AWS her çoğaltma ekleme/kaldırma için ayrı bir istek göndermeyi önerir; yarışan otomasyon, başka bir işin zaten kaldırdığı bir çoğaltmayı hedefleyebilir.
  • Birincili bir çoğaltmayla karıştırmak — bu tablonun hiçbir çoğaltmasını barındırmayan bir bölgede işlem yapmak.
  • Sürüm karışıklığı — eski Sürüm 2017.11.29 (GlobalTable) ile güncel 2019.11.21 (tablo-üzerinde-çoğaltma) API'lerini karıştırmak.

Nasıl düzeltilir

  1. Mevcut çoğaltmaları ve durumlarını listeleyin:
    aws dynamodb describe-table --table-name <Table> \
      --query "Table.Replicas[].{Region:RegionName,Status:ReplicaStatus}"
  2. Gerçekte listede olan bir bölgeyi hedefleyin — bölge kodunu tam kopyalayın.
  3. Bir seferde bir çoğaltmayı değiştirin. Bir sonraki güncellemeden önce tablonun ACTIVE'e dönmesini (ve önceki ekleme/kaldırmanın bitmesini) bekleyin.
  4. Zaten gitmiş bir çoğaltmayı mı kaldırıyorsunuz? Yapılacak bir şey yok — bir silme için ReplicaNotFoundException'ı zaten-karşılanmış olarak ele alın.
  5. Güncel (2019.11.21) API'yi kullanın — çoğaltmaları eski global-tablo API'si değil, UpdateTable ReplicaUpdates aracılığıyla yönetin.

Tabloları bölgeler arasında mı yönetiyorsunuz? DynoTable masaüstü uygulaması her tablonun çoğaltmalarını ve durumlarını gösterir, böylece gerçekten global tablonun parçası olan bir bölgede işlem yapabilirsiniz.

Önce DynoTable’da kontrol et

DynoTable'da tabloyu açın ve UpdateTable ReplicaUpdates'yi çalıştırmadan önce gerçekte var olan bölgeler için tablo istatistiklerini/kopya listesini kontrol edin. Profilleri ⌘P ile değiştirin, böylece genel tablonun sahibi olan hesaba bakarsınız. Bir çoğaltma bölgesi kaybolduğunda, DynoTable onu atlar; tıklanacak eski bir konsol kartı kalmaz.

Bölge kodunu canlı listeyle karşılaştırın ve ardından kontrol düzlemi değişikliğini IaC veya CLI'den yeniden yayınlayın. Kopyalar arasında günlük okumalar için bölge başına bir DynoTable profili tutun ve ARN'leri tahmin etmek yerine ⌘1⌘9 ile geçiş yapın. query builder aktif profil bölgesinde kalır, böylece us-east-1 Sorgusunu asla us-west-2 tablo adıyla karıştırmazsınız.

Kaynaklar

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.