"Could not connect to the endpoint URL" (DynamoDB) — 엔드포인트 URL에 연결할 수 없습니다.
TL;DR — botocore가 해결한 DynamoDB 엔드포인트에 대한 연결을 열 수 없습니다. 거의 항상 잘못된 1--endpoint-url, DynamoDB Local이 실행되지 않음, 존재하지 않는 호스트 이름을 생성하는 잘못/오타된 지역 또는 네트워크 경로 없음(오프라인, VPC, 보안 그룹). 연결 가능한 엔드포인트를 가리키고 무언가가 듣고 있는지 확인하세요.
무엇을 의미하는가
botocore.exceptions.EndpointConnectionError: Could not connect to the
endpoint URL: "http://localhost:8000/"
# what the engine actually returns, reproduced against Amazon DynamoDB (live service, us-east-1):
connect ECONNREFUSED 127.0.0.1:9boto3/botocore는 해당 리전(또는 명시적인 endpoint_url)에서 DynamoDB 엔드포인트 URL을 구축한 다음 이에 대한 TCP/HTTP 연결 설정에 실패합니다. 인증 또는 유효성 검사 오류와 달리 요청은 실행 중인 서비스에 도달하지 않았습니다. DynamoDB Local(에뮬레이터 작동 중지/잘못된 포트) 및 실제 AWS(잘못된 지역 호스트 이름 또는 차단된 네트워크)에 대해 모두 표시됩니다.
왜 발생하는가
- DynamoDB Local이 실행되고 있지 않습니다 —
--endpoint-url http://localhost:8000를 전달했지만 에뮬레이터가 해당 포트(see connection refused)에서 작동하지 않습니다. - 잘못된 엔드포인트 URL — 오타, 잘못된 포트 또는 로컬 에뮬레이터가
http을 제공하는https입니다. - 잘못된 지역 — 철자가 틀린 지역(
us-east-11)은 존재하지 않는 호스트 이름으로 확인되므로 연결할 수 없습니다. - 네트워크 경로 없음 — 오프라인이거나 VPC 엔드포인트, 보안 그룹 또는 네트워크 ACL에 의해 차단된 DynamoDB 트래픽입니다.
- 교차 컨테이너/교차 호스트 — Docker 내부에서
localhost는 호스트나 DynamoDB 로컬 서비스가 아닌 컨테이너 자체입니다.
어떻게 해결하는가
엔드포인트에서 듣고 있는 내용을 확인하세요.
curl http://localhost:8000 # DynamoDB Local answers with a small response엔드포인트 URL 수정 — 호스트, 포트(기본적으로
8000) 및 구성표(로컬의 경우http)를 수정합니다.실제 AWS의 리전 철자를 확인하고 네트워크 경로가 있는지 확인합니다(VPC 엔드포인트/보안 그룹 규칙은 DynamoDB를 허용함).
Docker에서는
localhost대신 compose 서비스 이름 또는host.docker.internal를 사용합니다(host.docker.internal는 Docker Desktop에서 자동으로 확인되며 Linux Docker 엔진에서는--add-host host.docker.internal:host-gateway를 추가합니다).실제 AWS와 대화 중이신가요?
--endpoint-url재정의를 완전히 삭제하고 botocore가 올바른 지역 엔드포인트를 구축하도록 하세요.
DynoTable을 Local에 연결
DynoTable은 각 프로필의 Test Connection을 통해 연결을 검증합니다.
설정 → 프로필 (Connect an AWS account). 에 대한
DynamoDB Local, 엔드포인트 http://localhost:8000(또는 LocalStack의 경우 :4566) 설정
자리 표시자 자격 증명 사용 - CLI에 필요한 것과 동일한 값입니다. ⌘P을 누르세요
앱이 DynoTable과 다른 포트를 사용할 때 프로필을 전환합니다. 가이드: Connect to DynamoDB Local & LocalStack.
실제 AWS와 비교하여 지역 문자열의 오타로 인해 호스트 이름이 생성되지 않습니다.
해결 — 연결할 수 없는 로컬 포트와 동일한 EndpointConnectionError 모양입니다.
디버깅하기 전에 프로필에서 aws sts get-caller-identity로 확인하세요.
DynamoDB 관련 설정.
관련 오류
- Could not connect to DynamoDB Local (ECONNREFUSED) — 거부된 로컬 연결에 해당하는 Node/JS입니다.
- Missing region in config — 지역이 없으므로 SDK가 엔드포인트를 전혀 구축할 수 없습니다.
- 학습: Running DynamoDB Local · Connecting to DynamoDB Local / LocalStack
출처
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide(기본 포트 8000, 더미 자격 증명,
--endpoint-url) - DynamoDB local usage notes — AWS DynamoDB Developer Guide(로컬 엔드포인트 설정, 모든 CLI 명령에
--endpoint-url필요) - Error handling — Boto3 Developer Guide (클라이언트 측 botocore 예외로
EndpointConnectionError) docker run --add-host— Docker CLI reference (컨테이너-호스트 연결의 경우host.docker.internal/host-gateway)