Indeks sekunder lokal harus ditentukan pada pembuatan tabel — "Local secondary indexes must be specified at table creation"
TL;DR — Indeks sekunder lokal (LSI) hanya dapat dibuat pada saat tabelnya dibuat; itu tidak dapat ditambahkan, diubah, atau dihapus setelahnya. UpdateTable tidak memiliki operasi untuk LSI, jadi setiap upaya untuk menambahkannya ke tabel langsung akan gagal dalam validasi. Untuk mendapatkan LSI baru, Anda harus membuat tabel baru (dengan LSI) dan memigrasikan data — atau menggunakan indeks sekunder global (GSI), yang dapat ditambahkan secara online.
Apa artinya
ValidationException: One or more parameter values were invalid: Local secondary
indexes can only be created when a table is createdSebuah LSI berbagi kunci partisi dengan tabel dasarnya dan menambahkan kunci pengurutan alternatif; DynamoDB menempatkannya bersama partisi item saat penulisan. Karena kopling fisik itu, sebuah LSI harus sudah ada sejak penulisan pertama tabel — UpdateTable mendukung penambahan/penghapusan GSI tetapi tidak memiliki parameter LSI sama sekali, jadi tidak ada permintaan yang bahkan bisa Anda kirim untuk memasangnya belakangan. Pesan persisnya bervariasi menurut jalurnya (panggilan SDK/CLI bisa gagal validasi parameter di sisi klien; alat IaC menampilkan kalimatnya sendiri), tetapi bentuk di sisi layanan adalah HTTP 400 ValidationException dan tidak dapat dicoba ulang: operasinya memang tidak didukung pada tabel yang sudah ada.
Mengapa itu terjadi
- Menambahkan LSI ke tabel langsung — memanggil
UpdateTable(atau mengedit templat CloudFormation/Terraform) untuk memperkenalkan entriLocalSecondaryIndexesbaru pada tabel yang sudah ada. - Mengubah LSI yang ada — skema atau proyeksi utamanya ditetapkan pada saat pembuatan; suntingan ditolak.
- Perbedaan IaC yang dibuat ulang vs. pembaruan — alat ini mencoba memperbarui perubahan LSI di tempat yang hanya diizinkan oleh DynamoDB pada waktu pembuatan.
Bagaimana cara memperbaikinya
- Buat tabel baru dengan LSI ditentukan terlebih dahulu, lalu migrasikan data (pindai dan tulis, atau ekspor/import sesuai permintaan).
- Gunakan GSI jika pola akses mengizinkannya — GSI dapat ditambahkan ke tabel yang ada secara online dan tidak memerlukan kunci partisi yang sama:
aws dynamodb update-table --table-name <Table> \ --attribute-definitions AttributeName=gsi_sk,AttributeType=S \ --global-secondary-index-updates '[{"Create":{"IndexName":"gsi1", ...}}]' - Rencanakan LSI selama pemodelan — tentukan kunci pengurutan alternatif sebelum tabel ada, karena LSI tidak dapat dipasang belakangan.
- Modelkan pola akses dalam GSI terlebih dahulu. Jika kueri berfungsi pada GSI dengan kunci partisi yang berbeda, Anda menghindari pembuatan ulang tabel seluruhnya.
Cek ukuran di DynoTable
Sebelum Anda membuat ulang tabel untuk LSI, validasi pola akses di DynoTable — buka tabel dengan ⌘K dan uji apakah kueri GSI mencakup kebutuhan yang sama. Pembuat Kueri menghasilkan KeyConditionExpression yang harus dilayani oleh indeks baru Anda.
Gunakan kalkulator harga untuk membandingkan amplifikasi tulis LSI dengan alternatif GSI. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.
Sumber
- Indeks sekunder lokal (diverifikasi 13-07-2026)
- UpdateTable — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
Kesalahan terkait
- Mencoba memodifikasi GSI yang sedang dibuat — perubahan GSI diblokir saat indeks dibuat.
- Sumber daya yang diminta tidak ditemukan / indeks tidak ditemukan — menanyakan nama indeks yang tidak ada.
- ValidationException (ikhtisar)
- Pelajari: GSI vs LSI · Ikhtisar indeks
Referensi
- Indeks sekunder lokal — Panduan Pengembang Amazon DynamoDB
- UpdateTable — Referensi Amazon DynamoDB API
- Kuota di Amazon DynamoDB — Panduan Pengembang Amazon DynamoDB
Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.