중급6분 분량

DynamoDB Local 및 LocalStack에 연결하는 방법

로컬 DynamoDB가 실행 중이고 코드가 정상적으로 작동하지만 원하는 경우 테이블을 보기 위해, 매번 scan 스크립트를 작성하지 마세요. 클라이언트 연결 로컬 엔드포인트는 두 가지 변경 사항입니다. 올바른 URL을 가리키고 일회용으로 전달합니다. 자격 증명. 아래의 세부 사항은 사람들이 막히는 부분입니다 - 지역 네임스페이스, 영숫자 키 규칙 및 80004566 포트 분할.

DynamoDB Local과 LocalStack: 연결 대상

둘 다 AWS 계정 없이 localhost에서 DynamoDB API를 제공하지만 다른 것:

  • DynamoDB Local은 단일 프로세스로 다운로드 가능한 DynamoDB 엔진 — AWS에서 제공 JAR 및 Docker 이미지로 (4). DynamoDB이고 다른 것은 없습니다. 기본 포트 8000 (AWS docs). 참조 running DynamoDB Local with Docker.
  • LocalStack은 하나의 엔드포인트 뒤에서 AWS 서비스 스택을 에뮬레이션합니다. 그 DynamoDB는 그 자체입니다. powered by DynamoDB Local, 하지만 모든 것은 LocalStack의 싱글을 통해 이루어집니다. edge port 4566.

따라서 연결 시 유일한 실질적인 차이점은 엔드포인트 URL입니다: :8000 독립형 DynamoDB Local, DynamoDB-via-LocalStack용. 그 밖의 모든 것 — API, 자격 증명 트릭, GUI 구성은 동일합니다.

모두를 넘어뜨리는 엔드포인트 + 더미 자격 증명 설정

AWS SDK 및 CLI에는 고객과 통신할 때에도 액세스 키와 리전이 필요합니다. 로컬 엔드포인트 — 하지만 해당 값은 실제일 필요는 없습니다. AWS 자체 문서에 따르면 이 값은 "로컬에서 실행하기 위해 유효한 AWS 값일 필요는 없습니다." (AWS docs).

명확하지 않은 두 가지 문제:

  • 지역/액세스 키는 자동으로 데이터의 네임스페이스를 지정합니다. -sharedDb 플래그, DynamoDB Local은 별도의 myaccesskeyid_region.db을 씁니다. 액세스 키 ID + 지역 조합별 파일 — AWS's exact naming. 사용된 앱과 다른 키 또는 지역에 연결하면 테이블이 보입니다. 사라진 것처럼; 그것들은 단지 다른 파일에 있을 뿐입니다. -sharedDb(하나 모든 클라이언트에 대해 shared-local-instance.db) 또는 정확한 키 + 지역과 일치 귀하의 앱이 사용합니다.
  • 액세스 키 ID는 DynamoDB Local에서 영숫자여야 합니다. 기호는 사용할 수 없습니다. AWS docs 상태 AWS_ACCESS_KEY_ID에는 A–Z, a–z, 0–9만 포함될 수 있습니다. AWS 도입 DynamoDB Local 2.0.0(및 1.23.0+)에서는 이것이 특수 문자가 포함된 키입니다. 이전 이미지 작업이 이제 실패합니다. (AWS re:Post). 아래 오류를 참조하세요.

LocalStack의 경우 안전한 기본값은 test / test입니다. ignores the secret key entirely 비밀 값의 유효성을 검사하지 않습니다. 실제 모습의 AKIA…/ASIA… 키는 rejected as a safeguard and fall back to the dummy account 하나의test과 같은 임의의 키가 해결되는 동일한 계정입니다. test을 고수하세요.

AWS CLI로 연결(정상성 확인)

GUI를 가리키기 전에 엔드포인트가 CLI에서 활성 상태인지 확인하세요. CLI no built-in default local endpoint가 있고, 따라서 명령당 --endpoint-url를 전달하거나 설정하십시오. AWS_ENDPOINT_URL_DYNAMODB=http://localhost:8000(CLI v2.13+).

DynamoDB 로컬:

aws dynamodb list-tables --endpoint-url http://localhost:8000

LocalStack(동일한 명령, 다른 포트):

aws dynamodb list-tables --endpoint-url http://localhost:4566

자격 증명이 전혀 구성되어 있는 경우(~/.aws/credentials의 가짜 자격 증명도 포함) 또는 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)를 통해 테이블 목록이 반환됩니다. 오류가 없는 빈 목록은 엔드포인트가 작동하지만 현재 다른 키/지역 네임스페이스 — 위의 문제를 참조하세요.

DynamoDB 로컬 GUI: DynoTable에서 로컬 테이블 검색 및 쿼리

CLI가 작동하면 GUI에는 endpoint, region, endpoint, region, 및 더미 자격 증명. CLI는 눈으로 읽은 DynamoDB-JSON을 반환합니다. 에 GUI는 정렬, 필터링, 편집할 수 있는 테이블과 동일한 데이터를 렌더링합니다.

DynoTable에서 연결을 추가하고 사용자 정의 엔드포인트를 설정합니다.

  • 엔드포인트: http://localhost:8000(DynamoDB 로컬) 또는 http://localhost:4566 (로컬스택)
  • 지역: 앱에서 사용하는 모든 항목 — 예: us-east-1. 여기는 라벨이 아니라 라벨이에요 실제 AWS 리전이지만 동일한 데이터 네임스페이스에 위치하려면 일치해야 합니다.
  • 액세스 키/비밀번호: 무엇이든 가능합니다(test / test가 일반적임). 영숫자 DynamoDB Local의 액세스 키에만 해당됩니다.

거기에서 항목을 찾아보고, Query 또는 Scan를 실행하고, 시각적으로 행을 편집합니다. CLI에서 직접 JSON 대신. Fixture를 로드할 때, DynamoDB-JSON converter은 일반 JSON을 다음으로 변환합니다. 와이어 형식 및 Query vs Scan 커버 도달하다. 동일한 드릴 LocalStack DynamoDB viewer — 포트만 다음으로 변경됩니다. 4566.

DynoTable은 로컬 전용 데스크톱 소프트웨어이므로 localhost를 가리키면 계속 유지됩니다. 귀하의 기계에 있는 설비. GUI 환경을 더 폭넓게 살펴보려면 다음을 참조하세요. DynamoDB GUI comparison.

일반적인 오류(지역 불일치, 포트, 자격 증명)

  • 연결이 거부되었습니다. 잘못된 포트 — 8000는 DynamoDB Local이고, 4566은 로컬스택. 또한 컨테이너가 실제로 포트를 게시했는지 확인하세요. (docker run -p 8000:8000 amazon/dynamodb-local). LocalStack의 경우 다음을 확인하세요. 서비스가 에 시작되었습니다 3.

  • DynamoDB Local의 경우 The Access Key ID or Security Token is Invalid. 이후 2.0.0(및 1.23.0+) 이미지의 경우 액세스 키 ID는 다음과 같아야 합니다. alphanumeric only. 이전 이미지에서 작동했던 기호가 있는 키가 이제 실패합니다. 다음으로 교체하세요. 문자/숫자(예: test)를 입력하고 일치하는 모든 도구를 업데이트하세요.

  • LocalStack 대비 The security token included in the request is invalid. 이는 거의 항상 엔드포인트 문제이며 자격 증명 문제(SDK)가 아닙니다. 클라이언트는 --endpoint-url / endpoint_url를 떨어뜨리고 실제 AWS에 도달했습니다. 더미 키를 거부하는 엔드포인트입니다. 클라이언트가 실제로 지정되었는지 확인 http://localhost:4566에.

  • SDK/CLI의 자격 증명 오류. 로컬 엔드포인트에도 일부 필요 자격 증명이 있습니다. AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY(또는 가짜 프로필) SDK의 자격 증명 체인이 확인됩니다.

  • httphttps. 로컬 끝점은 일반 http입니다. https:// URL은 TLS 핸드셰이크에 실패합니다.

DynamoDB Local은 실제 AWS 테이블과 동일한 데이터입니까?

아니요. 로컬과 클라우드는 완전히 별개의 저장소입니다. DynamoDB 로컬(그리고 LocalStack의 DynamoDB)는 데이터를 로컬 파일이나 메모리에 보관합니다. 절대 닿지 않아 귀하의 AWS 계정 및 AWS Regions/accounts aren't supported at the client level 로컬로. 그게 요점이야: 그건 for development and testing. 나중에 클라우드에 동일한 설비를 원할 경우, AWS suggests 유효한 키/지역 값을 로컬로 유지하므로 이동할 때만 끝점을 바꿀 수 있습니다. 이전에 해당 스키마를 모델링하려면 당신이 그것을 발송하고, single-table design 그리고 GSI vs LSI는 사이에 변경되지 않는 결정을 다룹니다. 지역 및 생산.

로컬이 아끼는 것(그리고 프로덕션이 여전히 청구하는 것)

DynamoDB 로컬은 아무것도 측정하지 않습니다. RCU, WCU, 전송이 없습니다. 같은 GetItem 17년 온디맨드 청구서의 관리형 DynamoDB 대비 0.5 RCU 항목 ≤ 4KB에 대해 최종 일관성 또는 1 RCU 강력 일관성입니다. --endpoint-url을 실제 엔드포인트로 바꾸면 모든 탐색 및 쿼리가 다시 청구가 시작됩니다. 점프를 모델링하세요. pricing calculator 및 사이즈 대표 item-size calculator가 있는 품목.

FAQ

실제 AWS 자격 증명이 필요합니까? 아니요. DynamoDB Local과 LocalStack 모두 허용합니다. 더미 값. 현재, 영숫자(DynamoDB Local의 경우), 도구 전반에 걸쳐 일관성을 유지합니다.

도구를 전환하면 왜 테이블이 사라지나요? -sharedDb가 없으면 DynamoDB 로컬 파티션 데이터를 액세스 키 + 지역별로 별도의 myaccesskeyid_region.db로 분할합니다. 파일. -sharedDb을 사용하거나 해당 값을 어디에서나 동일하게 유지하세요.

포트 8000과 4566의 차이점은 무엇입니까? 8000는 독립형입니다. DynamoDB Local의 기본값입니다. 4566은 모든 전면에 있는 LocalStack의 단일 에지 포트입니다. 에뮬레이트된 서비스에는 DynamoDB가 포함됩니다.

하나의 GUI를 둘 다에 연결할 수 있습니까? 예. 동일한 DynamoDB API를 사용합니다. 오직 엔드포인트 URL 변경(:8000:4566).

DynamoDB Local은 무료인가요? 예. AWS는 DynamoDB Local을 무료로 배포합니다. JAR 및 Docker image — 거기 "프로비저닝된 처리량, 데이터 저장 또는 데이터 전송 비용이 없습니다." 그것은 intended for development and testing only, 생산이 아닙니다.

로컬 테이블에 대해 SQL을 실행할 수 있습니까? 로컬 DynamoDB는 다음과 동일한 API를 사용합니다. 클라우드에서는 동일한 액세스 패턴 규칙이 적용되며 동일한 제한도 적용됩니다. DynamoDB PartiQL 0 grammar SELECT … FROM … WHERE … ORDER BY만 있음 — JOIN 없음, GROUP BY 없음, 그리고 no grouping aggregate functions COUNT/SUM/AVG(PartiQL vs SQL 참조). DynoTable의 는 다음을 실행합니다. 로컬을 포함한 모든 연결에 대한 분석 쿼리입니다.

Try DynoTablelocalhost:8000에 직접 연결하거나 localhost:4566 GUI를 사용하여 로컬 테이블을 찾아보고, 쿼리하고, 편집하세요.

업데이트됨