Could not connect to the endpoint URL (DynamoDB)

TL;DR — botocore konnte keine Verbindung zu dem DynamoDB-Endpunkt aufbauen, den es aufgelöst hat. Fast immer eine falsche --endpoint-url, ein nicht laufendes DynamoDB Local, eine vertippte Region, die einen nicht existierenden Hostnamen ergibt, oder gar kein Netzwerkpfad (offline, VPC, Security Group). Zeig auf einen erreichbaren Endpunkt und prüfe, dass dort etwas lauscht.

Was es bedeutet

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 baut die DynamoDB-Endpoint-URL aus der Region (oder deiner expliziten endpoint_url) und scheitert dann daran, eine TCP-/HTTP-Verbindung dorthin aufzubauen. Anders als bei einem Auth- oder Validierungsfehler hat die Anfrage nie einen laufenden Service erreicht. Sie tritt sowohl gegen DynamoDB Local (Emulator down / falscher Port) als auch gegen echtes AWS (falscher Region-Hostname oder blockiertes Netzwerk) auf.

Warum es passiert

  • DynamoDB Local läuft nicht — du hast --endpoint-url http://localhost:8000 übergeben, aber der Emulator ist nicht auf diesem Port oben (siehe connection refused).
  • Falsche Endpoint-URL — ein Tippfehler, falscher Port oder https, wo der lokale Emulator http bedient.
  • Falsche Region — eine falsch geschriebene Region (us-east-11) löst auf einen nicht existierenden Hostnamen auf, sodass die Verbindung nicht hergestellt werden kann.
  • Kein Netzwerkpfad — offline, oder DynamoDB-Traffic durch einen VPC-Endpoint, eine Security Group oder eine Network ACL blockiert.
  • Container-übergreifend / Host-übergreifend — aus Docker heraus ist localhost der Container selbst, nicht der Host oder der DynamoDB-Local-Service.

So behebst du es

  1. Bestätige, was am Endpoint lauscht:
    curl http://localhost:8000    # DynamoDB Local answers with a small response
  2. Korrigiere die Endpoint-URL — richtiger Host, Port (standardmäßig 8000) und Schema (http für Local).
  3. Prüfe die Schreibweise der Region für echtes AWS und stelle sicher, dass du eine Netzwerkroute hast (VPC-Endpoint / Security-Group-Regeln erlauben DynamoDB).
  4. In Docker nutze den Compose-Service-Namen oder host.docker.internal statt localhost (host.docker.internal löst in Docker Desktop automatisch auf; auf Linux Docker Engine füge --add-host host.docker.internal:host-gateway hinzu).
  5. Sprichst du mit echtem AWS? Lass die --endpoint-url-Überschreibung komplett weg und lass botocore den korrekten regionalen Endpoint bauen.

DynoTable auf Local zeigen lassen

DynoTable prüft die Konnektivität mit Verbindung testen an jedem Profil unter Einstellungen → Profile (Ein AWS-Konto verbinden). Für DynamoDB Local setzt du den Endpunkt http://localhost:8000 (oder :4566 für LocalStack) mit Platzhalter-Anmeldedaten — denselben Werten, die auch die CLI braucht. Drück ⌘P, um das Profil zu wechseln, wenn deine App einen anderen Port nutzt als DynoTable. Guide: Mit DynamoDB Local & LocalStack verbinden.

Gegen echtes AWS erzeugt ein Tippfehler im Regionsnamen einen Hostnamen, der sich nicht auflösen lässt — dieselbe Form von EndpointConnectionError wie ein nicht erreichbarer Local-Port. Bestätige das mit aws sts get-caller-identity auf dem Profil, bevor du DynamoDB-spezifische Einstellungen debuggst.

Verwandte Fehler

Quellen

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.