Attempting to modify a GSI that is being created

TL;DR — Bir global ikincil indeks oluşturulurken (IndexStatus = CREATING), DynamoDB çakışan yapısal değişiklikleri reddeder. İlk kaynak ayırma aşamasında yeni indeksi değiştiremez, indeksin veya tablonun sağlanan verimini değiştiremez, başka indeks ekleyemez veya silemez ya da tabloyu silemezsiniz. Geri doldurma başladığında sürmekte olan indeksi silebilir veya tablo/GSI verimini yeniden değiştirebilirsiniz, ancak başka indeks ekleme veya silme ve tabloyu silme, indeks ACTIVE olana kadar engelli kalır. GSI değişikliklerini birer birer yapın — her UpdateTable için bir oluşturma veya silme.

Ne anlama gelir

ValidationException: Attempting to modify a GSI that is being created

Dolu bir tabloda bir GSI oluşturmak bir geri doldurma tetikler — DynamoDB mevcut öğeleri arka planda yeni indekse yeniden oynatır. Bu aşama boyunca indeksin IndexStatus değeri CREATING'dir. Geri doldurma sırasında DynamoDB, oluşumun tutarlı kalması için indeks ya da tablo üzerinde yapılacak diğer yapısal değişiklikleri reddeder. Bu bir HTTP 400 ValidationException'dır; hemen yeniden denemek, indeks bitene kadar başarısız olur.

Neden olur

  • Çakışan indeks işlemleri — ilki hâlâ oluşturulurken bir UpdateTable (ya da bir IaC uygulaması) bir GSI'yi değiştirmeye/silmeye ya da ikincisini eklemeye çalışıyor.
  • CloudFormation/Terraform toplu işlemi — araç, tek bir güncellemede birden çok GSI değişikliği dener; DynamoDB her UpdateTable için yalnızca bir GSI oluşturma veya silmeye izin verir.
  • Kaynak ayırma sırasında verim değişikliği — yeni indeks hâlâ kaynak ayırırken (Backfilling: false), o indeksin ya da tablonun sağlanan verimini değiştiremezsiniz; bu değişikliklere geri doldurma başladığında yeniden izin verilir.
  • Tabloyu çok erken silmek — geri doldurmayla yarışan bir kaldırma.

Nasıl düzeltilir

  1. ACTIVE için bekleyin. DescribeTable'ı yoklayın ve her GlobalSecondaryIndexes[].IndexStatus değerini kontrol edin; yalnızca ACTIVE olduğunda devam edin.
    aws dynamodb describe-table --table-name <Table> \
      --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"
    İndeks açıklaması ayrıca bir Backfilling boolean değeri (false = kaynak ayırma, true = geri doldurma) taşır ve OnlineIndexPercentageProgress CloudWatch metriği oluşumu izler.
  2. İndeks değişikliklerini sıraya koyun — her UpdateTable için bir oluşturma/silme; bir tanesi oluşturulurken yeni bir GSI eklemeyin.
  3. CloudFormation/Terraform'da, GSI eklemelerini ayrı dağıtımlara bölün, böylece her geri doldurma bir sonraki değişiklikten önce tamamlansın.
  4. Diğer indeks değişikliklerini ve tablo silmeyi indeks ACTIVE olana kadar erteleyin. Vazgeçmeniz mi gerekiyor? Geri doldurma başladıktan sonra, oluşturulmakta olan indeksi silerek oluşumu iptal edebilirsiniz.

DynoTable’da yeniden denemeden önce

GSI CREATING iken, DynoTable'deki tabloyu açın ve başka bir UpdateTable'yi sıraya koymadan önce tablo ayrıntıları altında indeks durumunu izleyin. Uygulama sen göz atarken DescribeTable yenilenir; IndexStatus ACTIVE'e döndüğünde, dizin sorgu modeli seçicide görünür ve onu Görsel moddan veya query builder'dan sorgulayabilirsiniz.

DynoTable hâlâ CREATING değerini gösterirken CloudFormation/Terraform GSI değişikliklerini tek bir uygulamada üst üste koymayın. Sıra dağıtılır; arasındaki temel gerçek durum paneli geçerli olduğundan DynoTable kullanın. Dolgu başladıktan sonra bir derlemeyi iptal etmeniz gerekirse bu dizini IaC/CLI'nizden silin ve ardından DynoTable dizin listesinden kaybolduğunu onaylayın.

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.