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:9

boto3/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 服務。

如何修正

  1. 確認端點處有什麼在監聽:
    curl http://localhost:8000    # DynamoDB Local answers with a small response
  2. 修正端點 URL——正確的主機、埠(預設 8000)和協議(Local 用 http)。
  3. 檢查真實 AWS 的區域拼寫,並確保你有一條網路路由(VPC 端點/安全組規則允許 DynamoDB)。
  4. 在 Docker 中,使用 compose 服務名或 host.docker.internal 而不是 localhosthost.docker.internal 在 Docker Desktop 中自動解析;在 Linux Docker Engine 上新增 --add-host host.docker.internal:host-gateway)。
  5. 在與真實 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特定設定。

相關錯誤

來源

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。