Local secondary indexes must be specified at table creation
TL;DR — Bir yerel ikincil indeks (LSI) yalnızca tablosunun oluşturulduğu anda oluşturulabilir; daha sonra eklenemez, değiştirilemez veya kaldırılamaz. UpdateTable'ın LSI'ler için bir işlemi yoktur, bu yüzden canlı bir tabloya bir LSI ekleme girişimi doğrulamayı geçemez. Yeni bir LSI almak için (LSI ile) yeni bir tablo oluşturmalı ve verileri taşımalısınız — ya da çevrimiçi eklenebilen bir global ikincil indeks (GSI) kullanmalısınız.
Ne anlama gelir
ValidationException: One or more parameter values were invalid: Local secondary
indexes can only be created when a table is createdBir LSI, bölüm anahtarını temel tabloyla paylaşır ve alternatif bir sıralama anahtarı ekler; DynamoDB onu yazma sırasında öğenin bölümüyle aynı yere yerleştirir. Bu fiziksel bağlaşım nedeniyle bir LSI, tablonun ilk yazmasından itibaren var olmalıdır — UpdateTable, GSI ekleme/kaldırma işlemini destekler ama hiçbir LSI parametresine sahip değildir, bu yüzden sonradan eklemek için gönderebileceğiniz bir istek bile yoktur. Tam mesaj yola göre değişir (bir SDK/CLI çağrısı istemci tarafında parametre doğrulamasını geçemeyebilir; IaC araçları kendi ifadelerini gösterir), ancak hizmet tarafındaki biçimi bir HTTP 400 ValidationException'dır ve yeniden denenebilir değildir: işlem, mevcut bir tabloda basitçe desteklenmez.
Neden olur
- Canlı bir tabloya LSI eklemek — zaten var olan bir tabloya yeni bir
LocalSecondaryIndexesgirişi eklemek içinUpdateTableçağırmak (ya da bir CloudFormation/Terraform şablonunu düzenlemek). - Mevcut bir LSI'yi değiştirmek — anahtar şeması veya projeksiyonu oluşturmada sabittir; düzenlemeler reddedilir.
- Güncelleme yerine yeniden oluşturan bir IaC farkı — araç, DynamoDB'nin yalnızca oluşturma zamanında izin verdiği bir LSI değişikliğini yerinde güncellemeye çalışır.
Nasıl düzeltilir
- Önceden tanımlanmış LSI ile yeni bir tablo oluşturun, sonra verileri taşıyın (tara-ve-yaz ya da talep üzerine dışa/içe aktarma).
- Erişim deseni izin veriyorsa bunun yerine bir GSI kullanın — GSI'ler mevcut bir tabloya çevrimiçi eklenebilir ve aynı bölüm anahtarını gerektirmez:
aws dynamodb update-table --table-name <Table> \ --attribute-definitions AttributeName=gsi_sk,AttributeType=S \ --global-secondary-index-updates '[{"Create":{"IndexName":"gsi1", ...}}]' - LSI'leri modelleme sırasında planlayın — alternatif sıralama anahtarlarına tablo var olmadan önce karar verin, çünkü sonradan eklenemezler.
DynoTable'da boyutu kontrol edin
LSI için bir tabloyu yeniden oluşturmadan önce DynoTable'daki erişim modelini doğrulayın; ⌘K ile tabloyu açın ve GSI sorgusunun aynı ihtiyacı karşılayıp karşılamadığını test edin. Query Builder yeni endeksinizin sunması gereken KeyConditionExpression değerini oluşturur.
LSI yazma yükseltmesini GSI alternatifiyle karşılaştırmak için pricing calculator'yi kullanın. Profilleri ⌘P ile değiştirin; bkz. Connect to AWS ve Install.
Kaynaklar
- Local secondary indexes (2026-07-13 tarihinde doğrulandı)
- UpdateTable — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Attempting to modify a GSI that is being created — indeks oluşturulurken engellenen bir GSI değişikliği.
- Requested resource not found / index not found — var olmayan bir indeks adını sorgulamak.
- ValidationException (genel bakış)
- Öğrenin: GSI vs LSI · Index'ler
Kaynaklar
- Local secondary indexes — Amazon DynamoDB Developer Guide
- UpdateTable — Amazon DynamoDB API Reference
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.