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

TL;DR — Bu, DynamoDB Local'in ResourceNotFoundException için kullandığı ifadedir ve tuzak şudur: "var olmayan", bu örneğin mevcut erişim anahtarınız + bölgeniz için açtığı veritabanı dosyasıyla sınırlıdır. -sharedDb olmadan Local, kimlik bilgileri/bölge kombinasyonu başına ayrı bir tablo kümesi tutar — dolayısıyla CLI ile oluşturduğunuz tablo, uygulamanıza görünmez olabilir. Local'i -sharedDb ile çalıştırın (veya her yerde birebir aynı kukla kimlik bilgileri + bölgeyi sabitleyin) ve -inMemory'nin her yeniden başlatmada boş başladığını unutmayın.

Ne anlama gelir

ResourceNotFoundException: Cannot do operations on a non-existent table

İsteğiniz, çalışan bir DynamoDB Local'e ulaştı; o da tabloyu aradı ve bulamadı — isteğinizin kimliği için kullandığı veritabanında. Gerçek AWS aynı hatayı farklı ifade eder (Requested resource not found), bu yüzden tam olarak bu mesaj, bir emülatörle konuştuğunuza dair güçlü bir ipucudur.

Neden olur

  • Kimlik bilgisi/bölge bölünmüş beyin (klasik). -sharedDb olmadan DynamoDB Local, veritabanı dosyasını her isteğin erişim anahtarı kimliği ve bölgesine göre adlandırır. Dolayısıyla CLI'nız (anahtarı local, bölgesi us-east-1 olan --profile) ve uygulamanız (anahtarı fake, bölgesi local) iki farklı tablo kümesi görür — her biri tabloyu "kendisi için" oluşturdu.
  • -inMemory + bir yeniden başlatma — bellek içi mod diskte hiçbir şey tutmaz; her yeniden başlatma boş bir veritabanıdır.
  • Birim olmadan yeni bir kapsayıcıdocker run amazon/dynamodb-local boş başlar; -dbPath depolamasını bağlamadıkça önceki kapsayıcının tabloları gitmiştir.
  • Tablo gerçekten oluşturulmadı — kurulum betikleri çalışmadı ya da farklı bir port/örneğe karşı oluşturuldu.
  • Aynı kod gerçek AWS'ye karşı Local'e yöneltilmiş — tablo bulutta var ama emülatörde yok (ya da tersi).

Nasıl düzeltilir

  1. BU kimliğin ne gördüğünü görün — tabloları tam olarak uygulamanızın kullandığı kimlik bilgileri/bölge/uç noktayla listeleyin:

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

    Tablo burada eksik ama "bir yerde" varsa, sorun kapsamlandırmadır.

  2. Local'i -sharedDb ile çalıştırın ki her istemci, kimlik bilgileri/bölgeden bağımsız olarak tek bir veritabanı paylaşsın:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
    # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
  3. Ya da her yerde tek bir kimliği sabitleyin — CLI profilinde, SDK istemci yapılandırmasında ve test kurulumunda aynı kukla accessKeyId, secretAccessKey ve region.

  4. Yeniden başlatmalar boyunca kalıcı kılın-inMemory'yi bırakın, -dbPath ayarlayın ve (Docker'da) bir birim olarak bağlayın.

  5. Tabloları kurulumda oluşturun — testler için, tabloyu (ve beklemeyi) paketin önyüklemesinde oluşturun, böylece yeni bir örnek asla sürpriz olmasın.

Kapsamlandırma sorununu çıkarımlamaktan çok görmek çok daha kolaydır — DynoTable masaüstü uygulaması DynamoDB Local'e bağlanır ve bir uç nokta + kimlik bilgisi kombinasyonunun tam olarak hangi tabloları görebildiğini gösterir, böylece bölünmüş beyin bir bakışta görünür. Tohum verisi hazırlıyor musunuz? DynamoDB JSON dönüştürücüsü düz JSON'u türlü öğelere dönüştürür.

SSS

DynamoDB Local, henüz oluşturduğum tablonun var olmadığını neden söylüyor? -sharedDb olmadan DynamoDB Local, erişim anahtarı kimliği ve bölge başına ayrı bir veritabanı dosyası tutar, bu yüzden CLI ile oluşturduğunuz tablo, kimlik bilgileri veya bölgesi farklıysa uygulamanıza görünmez olabilir. Local'i -sharedDb ile çalıştırın ya da her yerde birebir aynı kukla kimlik bilgileri ve bölgeyi sabitleyin.

DynamoDB Local tablolarım bir yeniden başlatmadan sonra neden kayboldu? -inMemory modunda diskte hiçbir şey tutulmaz, bu yüzden her yeniden başlatma boş bir veritabanıdır. Bağlı bir birim olmadan yeni bir Docker kapsayıcısı da boş başlar. Tabloları kalıcı kılmak için -inMemory'yi bırakın, -dbPath ayarlayın ve bir birim olarak bağlayın.

İlgili hatalar

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.