Tidak dapat melakukan operasi pada tabel yang tidak ada (DynamoDB Lokal)

TL;DR — Ini adalah kata-kata DynamoDB Lokal untuk ResourceNotFoundException, dan jebakannya adalah "tidak ada" dicakup ke file database yang dibuka instance ini untuk kunci akses + wilayah Anda saat ini. Tanpa -sharedDb, Lokal menyimpan kumpulan tabel separate per kombo kredensial/region — sehingga tabel yang Anda buat dengan CLI tidak terlihat oleh aplikasi Anda. Jalankan Lokal dengan -sharedDb (atau sematkan kredensial dummy + wilayah yang sama di mana saja), dan ingat -inMemory dimulai dengan kosong setiap kali restart.

Apa artinya

ResourceNotFoundException: Cannot do operations on a non-existent table

Mengapa itu terjadi

  • Credential/region split-brain (klasik). Tanpa -sharedDb, Lokal DynamoDB menamai file databasenya dengan ID kunci akses dan wilayah setiap permintaan. Oleh karena itu, CLI Anda (--profile dengan kunci local, wilayah us-east-1) dan aplikasi Anda (kunci fake, wilayah local) akan melihat dua kumpulan tabel berbeda — masing-masing membuat tabel "untuk dirinya sendiri".
  • -inMemory + restart — mode dalam memori tidak menyimpan apa pun di disk; setiap restart adalah database kosong.
  • Wadah baru tanpa volumedocker run amazon/dynamodb-local mulai kosong; tabel dari wadah sebelumnya hilang kecuali Anda memasang penyimpanan -dbPath.
  • Tabel benar-benar tidak dibuat — skrip pengaturan tidak berjalan, atau dibuat dengan port/instance yang berbeda.
  • Kode yang sama menunjuk ke AWS vs Lokal — tabel ada di cloud tetapi tidak di emulator (atau sebaliknya).

Bagaimana cara memperbaikinya

  1. Lihat apa yang dilihat oleh identitas INI — buat daftar tabel dengan kredensial yang tepat/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 tabelnya hilang di sini tetapi ada "di suatu tempat", itu adalah pelingkupannya.

  2. Jalankan Lokal dengan -sharedDb sehingga setiap klien berbagi satu database terlepas dari kredensialnya/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 sematkan satu identitas di mana sajaaccessKeyId, secretAccessKey, dan region tiruan yang sama di profil CLI, konfigurasi klien SDK, dan penyiapan pengujian.

  4. Bertahan selama restart — lepaskan -inMemory, atur -dbPath, dan (di Docker) pasang sebagai volume.

  5. Buat tabel dalam pengaturan — untuk pengujian, buat tabel (dan tunggu) di bootstrap suite sehingga instance baru tidak akan mengejutkan Anda.

DynoTable + Local

Masalah pelingkupan jauh lebih mudah untuk dilihat daripada disimpulkan. Pasang DynoTable, tambahkan profil Lokal (Pengaturan → Profil → Tambahkan Profil) dengan titik akhir http://localhost:8000 dan kunci akses + wilayah yang sama yang digunakan CLI Anda bandingkan daftar tabel sidebar dengan aws dynamodb list-tables --endpoint-url http://localhost:8000. Kredensial yang tidak cocok membagi tabel menjadi beberapa bagian File myaccesskeyid_region.db (Menjalankan DynamoDB Lokal). Setelah -inMemory restart, gunakan DynamoDB JSON converter untuk memuat ulang perlengkapan.

FAQ

Mengapa DynamoDB Lokal mengatakan tabel tidak ada padahal saya baru membuatnya? Tanpa -sharedDb, DynamoDB Lokal menyimpan file database terpisah per ID kunci akses dan wilayah, sehingga tabel yang Anda buat dengan CLI tidak dapat dilihat oleh aplikasi Anda jika kredensial atau wilayahnya berbeda. Jalankan Lokal dengan -sharedDb atau sematkan kredensial dan wilayah tiruan yang identik di mana saja.

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

Kesalahan terkait

Sumber

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.