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 created

Sebuah 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 entri LocalSecondaryIndexes baru 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

  1. Buat tabel baru dengan LSI ditentukan terlebih dahulu, lalu migrasikan data (pindai dan tulis, atau ekspor/import sesuai permintaan).
  2. 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", ...}}]'
  3. Rencanakan LSI selama pemodelan — tentukan kunci pengurutan alternatif sebelum tabel ada, karena LSI tidak dapat dipasang belakangan.
  4. 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

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.