Could not connect to the endpoint URL (DynamoDB)
TL;DR — botocore 無法開啟到它所解析出的 DynamoDB 端點的連線。幾乎總是 --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,但模擬器沒有在那個埠上執行(參見 connection refused)。 - 端點 URL 錯誤——拼寫錯誤、埠錯誤,或者在本地模擬器提供
http服務處用了https。 - 區域錯誤——一個拼錯的區域(
us-east-11)解析到一個不存在的主機名,因此無法建立連線。 - 沒有網路路徑——離線,或者 DynamoDB 流量被 VPC 端點、安全組或網路 ACL 阻斷。
- 跨容器/跨主機——在 Docker 內部,
localhost是容器自身,而不是主機或 DynamoDB Local 服務。
如何修正
- 確認端點處有什麼在監聽:
curl http://localhost:8000 # DynamoDB Local answers with a small response - 修正端點 URL——正確的主機、埠(預設
8000)和協議(Local 用http)。 - 檢查真實 AWS 的區域拼寫,並確保你有一條網路路由(VPC 端點/安全組規則允許 DynamoDB)。
- 在 Docker 中,使用 compose 服務名或
host.docker.internal而不是localhost(host.docker.internal在 Docker Desktop 中自動解析;在 Linux Docker Engine 上新增--add-host host.docker.internal:host-gateway)。 - 在與真實 AWS 對話? 完全去掉
--endpoint-url覆蓋,讓 botocore 構建正確的區域端點。
將 DynoTable 指向 Local
DynoTable 驗證每個設定檔案上的 Test Connection 的連線
Settings → Profiles (Connect an AWS account)。對於
DynamoDB本地,設定端點http://localhost:8000(或:4566對於LocalStack)使用預留位置憑據 — 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 等價情況。
- 設定中缺少區域——沒有區域,因此 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(@@P14@@ 作為用戶端 botocore 異常)
- ⟦3⟧ — Docker CLI reference(@@P15@@ /
host-gateway用於容器到主機的連線)