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 tablePermintaan 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 (--profiledengan kuncilocal, regionus-east-1) dan aplikasi Anda (kuncifake, regionlocal) 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 volume —
docker run amazon/dynamodb-localmemulai 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
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-1Jika tabel hilang di sini tetapi ada "di suatu tempat", itu masalah pembatasan (scoping).
Jalankan Local dengan
-sharedDbagar 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 -sharedDbAtau pin satu identitas di mana-mana —
accessKeyId,secretAccessKey, danregiondummy yang sama di profil CLI, konfigurasi klien SDK, dan setup tes.Pertahankan lintas restart — hapus
-inMemory, atur-dbPath, dan (di Docker) mount sebagai volume.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
- ResourceNotFoundException — varian AWS asli (region/akun/nama tabel salah).
- Could not connect to DynamoDB Local (ECONNREFUSED)
- DynamoDB Local port 8000 in use
- Pelajari: Running DynamoDB Local · Connect to Local & LocalStack
References
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (per-credential/Region
myaccesskeyid_region.dbfiles,-sharedDb→shared-local-instance.db,-inMemorykeeps nothing on disk) - Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (Docker Compose
-sharedDb -dbPath ./data+ volume pattern, dummy credentials) - amazon/dynamodb-local — Docker Hub (official image; fresh containers start empty without a mounted volume)
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.