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'deykenus-east-2ya 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â
UPDATINGikenUpdateTableç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
- Mevcut çoğaltmaları ve durumlarını listeleyin:
aws dynamodb describe-table --table-name <Table> \ --query "Table.Replicas[].{Region:RegionName,Status:ReplicaStatus}" - Gerçekte listede olan bir bölgeyi hedefleyin — bölge kodunu tam kopyalayın.
- 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. - 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. - Güncel (2019.11.21) API'yi kullanın — çoğaltmaları eski global-tablo API'si değil,
UpdateTableReplicaUpdatesaracı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
- UpdateGlobalTable — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
- Global tables — Amazon DynamoDB Developer Guide (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- ResourceNotFoundException — tablonun kendisi bölgede/hesapta bulunamıyor.
- ResourceInUseException — bir çoğaltma değişikliği tablonun mevcut durumuyla çakışıyor.
- Öğrenin: Global tables
Kaynaklar
- UpdateGlobalTable — Amazon DynamoDB API Reference
- UpdateTable — Amazon DynamoDB API Reference
- Global tables — Amazon DynamoDB Developer Guide
- Determining the global table version you are using — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.