Cannot do operations on a non-existent table (DynamoDB Local)

TL;DR — Ini adalah cara DynamoDB Local menyebut ResourceNotFoundException, dan jebakannya adalah bahwa "non-existent" dibatasi pada file database yang dibuka instance ini untuk access key + region Anda saat ini. Tanpa -sharedDb, Local menyimpan set tabel terpisah per kombinasi kredensial/region — jadi tabel yang Anda buat dengan CLI bisa tak terlihat oleh aplikasi Anda. Jalankan Local dengan -sharedDb (atau pin kredensial dummy + region yang identik di mana-mana), dan ingat -inMemory memulai kosong pada setiap restart.

Apa artinya

ResourceNotFoundException: Cannot do operations on a non-existent table

Permintaan Anda mencapai DynamoDB Local yang sedang berjalan, yang mencari tabel dan tidak menemukannya — di database yang digunakannya untuk identitas permintaan Anda. AWS asli menyebut kegagalan yang sama secara berbeda (Requested resource not found), jadi pesan persis ini adalah petunjuk kuat bahwa Anda berbicara dengan emulator.

Mengapa terjadi

  • Split-brain kredensial/region (yang klasik). Tanpa -sharedDb, DynamoDB Local menamai file database-nya sesuai access key ID dan region setiap permintaan. CLI Anda (--profile dengan kunci local, region us-east-1) dan aplikasi Anda (kunci fake, region local) karenanya melihat dua set tabel berbeda — masing-masing membuat tabel "untuk dirinya sendiri".
  • -inMemory + restart — mode in-memory tidak menyimpan apa pun di disk; setiap restart adalah database kosong.
  • Kontainer baru tanpa volumedocker run amazon/dynamodb-local memulai kosong; tabel dari kontainer sebelumnya hilang kecuali Anda me-mount penyimpanan -dbPath.
  • Tabel memang tidak dibuat — skrip setup tidak berjalan, atau membuatnya terhadap port/instance yang berbeda.
  • Kode yang sama menunjuk ke AWS asli vs Local — tabel ada di cloud tetapi tidak di emulator (atau sebaliknya).

Cara memperbaikinya

  1. Lihat apa yang dilihat IDENTITAS INI — daftar tabel dengan persis kredensial/region/endpoint yang digunakan aplikasi Anda:

    AWS_ACCESS_KEY_ID=local AWS_SECRET_ACCESS_KEY=local \
    aws dynamodb list-tables --endpoint-url http://localhost:8000 --region us-east-1

    Jika tabel hilang di sini tetapi ada "di suatu tempat", itu masalah pembatasan (scoping).

  2. Jalankan Local dengan -sharedDb agar setiap klien berbagi satu database terlepas dari kredensial/region:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
    # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
  3. Atau pin satu identitas di mana-manaaccessKeyId, secretAccessKey, dan region dummy yang sama di profil CLI, konfigurasi klien SDK, dan setup tes.

  4. Pertahankan lintas restart — hapus -inMemory, atur -dbPath, dan (di Docker) mount sebagai volume.

  5. Buat tabel dalam setup — untuk tes, buat tabel (dan tunggu) di bootstrap suite sehingga instance baru tidak pernah mengejutkan.

Masalah pembatasan jauh lebih mudah dilihat daripada disimpulkan — aplikasi desktop DynoTable terhubung ke DynamoDB Local dan menunjukkan persis tabel mana yang dapat dilihat oleh kombinasi endpoint + kredensial, sehingga split-brain terlihat dalam sekejap. Menyiapkan data seed? DynamoDB JSON converter mengubah JSON biasa menjadi item bertipe.

FAQ

Mengapa DynamoDB Local mengatakan tabel tidak ada padahal saya baru membuatnya? Tanpa -sharedDb, DynamoDB Local menyimpan file database terpisah per access key ID dan region, jadi tabel yang Anda buat dengan CLI bisa tak terlihat oleh aplikasi Anda jika kredensial atau region-nya berbeda. Jalankan Local dengan -sharedDb atau pin kredensial dummy dan region yang identik di mana-mana.

Mengapa tabel DynamoDB Local saya hilang setelah restart? Dalam mode -inMemory tidak ada yang disimpan di disk, jadi setiap restart adalah database kosong. Kontainer Docker baru tanpa volume yang di-mount juga memulai kosong. Hapus -inMemory, atur -dbPath, dan mount sebagai volume untuk mempertahankan tabel.

Kesalahan terkait

References

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

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.