존재하지 않는 테이블(DynamoDB 로컬)에서는 작업을 수행할 수 없습니다.

TL;DR — 이것은 DynamoDB Local의 ResourceNotFoundException 표현이며, "존재하지 않음"의 범위가 현재 액세스 키 + 리전에 대해 이 인스턴스가 열린 데이터베이스 파일로 제한된다는 것이 함정입니다. -sharedDb이 없으면 로컬은 자격 증명/지역 콤보별로 별도의 테이블 세트를 유지하므로 CLI로 생성한 테이블이 앱에 표시되지 않을 수 있습니다. -sharedDb(또는 동일한 더미 자격 증명 + 지역을 모든 곳에 고정)를 사용하여 로컬을 실행하고 다시 시작할 때마다 -inMemory가 비어 있다는 것을 기억하세요.

무엇을 의미하는가

ResourceNotFoundException: Cannot do operations on a non-existent table

귀하의 요청이 실행 중인 DynamoDB Local에 도달했는데, 이 로컬은 테이블을 찾았지만 찾지 못했습니다. 요청 ID에 사용하는 데이터베이스에서. 실제 AWS에서는 동일한 실패를 다르게(Requested resource not found) 표현하므로 이 정확한 메시지는 에뮬레이터와 대화하고 있다는 강력한 힌트입니다.

왜 발생하는가

  • 자격 증명/리전 분할 브레인(클래식). -sharedDb이 없으면 DynamoDB Local은 각 요청의 액세스 키 ID와 리전을 따라 데이터베이스 파일 이름을 지정합니다. 따라서 CLI(키 local, 지역 us-east-1가 있는 --profile) 및 앱(키 fake, 지역 local)에는 두 개의 서로 다른 테이블 세트가 표시됩니다. 각각은 "자체적으로" 테이블을 생성했습니다.
  • -inMemory + 다시 시작 — 인메모리 모드는 디스크에 아무것도 유지하지 않습니다. 다시 시작할 때마다 빈 데이터베이스가 됩니다.
  • 볼륨이 없는 새 용기docker run amazon/dynamodb-local는 비어 있기 시작합니다. -dbPath 스토리지를 마운트하지 않으면 이전 컨테이너의 테이블은 사라집니다.
  • 테이블이 실제로 생성되지 않았습니다 — 설정 스크립트가 실행되지 않았거나 다른 포트/인스턴스에 대해 테이블이 생성되었습니다.
  • 실제 AWS와 로컬을 가리키는 동일한 코드 — 테이블은 클라우드에 있지만 에뮬레이터에는 없습니다(또는 그 반대).

어떻게 해결하는가

  1. 이 ID가 보는 내용을 확인하세요 — 앱에서 사용하는 자격 증명/지역/엔드포인트가 정확히 포함된 테이블을 나열합니다.

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

    테이블이 여기에 없지만 "어딘가"에 존재하는 경우 범위 지정입니다.

  2. -sharedDb을 사용하여 로컬을 실행하면 모든 클라이언트가 자격 증명/지역에 관계없이 하나의 데이터베이스를 공유합니다.

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
    # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
  3. 또는 모든 곳에 하나의 ID를 고정 — CLI 프로필, SDK 클라이언트 구성 및 테스트 설정에서 동일한 더미 accessKeyId, secretAccessKey, region.

  4. 다시 시작해도 지속됨-inMemory을 삭제하고 -dbPath를 설정한 후 (Docker에서) 볼륨으로 마운트합니다.

  5. 설정에서 테이블 생성 — 테스트를 위해 제품군의 부트스트랩에서 테이블을 생성하고 기다리면 새로운 인스턴스가 발생하지 않습니다.

DynoTable + Local

범위 지정 문제는 추론하는 것보다 보는 것이 훨씬 쉽습니다. Install DynoTable, 엔드포인트를 사용하여 로컬 프로필 추가(설정 → 프로필 → 프로필 추가) http://localhost:8000 및 CLI가 사용하는 동일한 액세스 키 + 지역 사이드바 테이블 목록을 aws dynamodb list-tables --endpoint-url과 비교합니다. http://localhost:8000. 일치하지 않는 자격 증명으로 인해 테이블이 여러 개로 분할됩니다. myaccesskeyid_region.db개 파일(Running DynamoDB Local). -inMemory이 다시 시작된 후 DynamoDB JSON converter를 사용하십시오. 조명기를 다시 로드합니다.

FAQ

방금 테이블을 생성했는데 DynamoDB Local에서 테이블이 존재하지 않는다고 말하는 이유는 무엇입니까? -sharedDb이 없으면 DynamoDB Local은 액세스 키 ID 및 지역별로 별도의 데이터베이스 파일을 유지하므로 자격 증명이나 지역이 다를 경우 CLI를 사용하여 생성한 테이블이 앱에 표시되지 않을 수 있습니다. -sharedDb로 로컬을 실행하거나 동일한 더미 자격 증명과 지역을 모든 곳에 고정하세요.

다시 시작한 후 DynamoDB 로컬 테이블이 사라진 이유는 무엇입니까? -inMemory 모드에서는 디스크에 아무것도 보관되지 않으므로 다시 시작할 때마다 빈 데이터베이스가 됩니다. 마운트된 볼륨이 없는 새로운 Docker 컨테이너도 빈 상태로 시작됩니다. -inMemory를 삭제하고 -dbPath를 설정한 후 테이블을 유지하기 위한 볼륨으로 마운트합니다.

관련 오류

출처

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.