Unable to execute HTTP request (DynamoDB, Java SDK)

TL;DR — Das Java-SDK hat nie eine HTTP-Antwort bekommen: Die TCP-Verbindung zum DynamoDB-Endpunkt ist gescheitert. Gegen localhost:8000 heißt das, DynamoDB Local läuft nicht (oder auf einem anderen Port) — und in Docker-/SAM-Containern ist localhost der Container, nicht dein Rechner, sodass der Emulator unter dieser Adresse unerreichbar ist. Starte den Emulator, korrigiere den Endpunkt und nimm aus Containern eine Adresse, die den Host erreicht.

Was es bedeutet

com.amazonaws.SdkClientException: Unable to execute HTTP request:
Connect to localhost:8000 [localhost/127.0.0.1] failed: Connection refused

SdkClientException (v1: AmazonClientException) ist der clientseitige Fehler-Wrapper des SDK — die Anfrage starb, bevor DynamoDB sie je sah. Die verschachtelte Ursache sagt dir, welcher Netzwerkschritt fehlschlug: Connection refused (nichts lauscht), connect timed out (keine Route/Firewall) oder UnknownHostException (der Hostname löst nicht auf, oft eine vertippte Region oder ein vertippter Endpoint). Es ist das Java-Äquivalent zu botocores Could not connect to the endpoint URL.

Warum es passiert

  • DynamoDB Local läuft nicht — es wurde nie gestartet, ist beim Start abgestürzt (native Bibliothek, Portkonflikt) oder hat sich mit deinem letzten Terminal beendet.
  • Falscher Port oder falsches Schema — Local defaultet auf 8000 über schlichtes http; ein Endpoint von https://localhost:8000 oder der falsche Port wird abgelehnt.
  • localhost innerhalb eines Containers — Code, der in Docker/SAM (sam local invoke) läuft, wählt sein eigenes Loopback. Der Emulator auf deinem Host (oder in einem Geschwister-Container) ist dort nicht.
  • Gegen echtes AWS: kein Netzwerkpfad — Firmenproxy nicht auf dem HTTP-Client des SDK konfiguriert, VPC ohne Route/Endpoint für DynamoDB, oder eine vertippte Region, die einen nicht existierenden Hostnamen erzeugt.

So behebst du es

  1. Bestätige, dass etwas lauscht, wo du anwählst:

    curl http://localhost:8000    # DynamoDB Local answers 400 with an AmazonDynamoDBv2 body

    Wenn das fehlschlägt, starte den Emulator (java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar oder docker run -p 8000:8000 amazon/dynamodb-local).

  2. Richte den Client auf den richtigen Endpoint (v2-SDK):

    DynamoDbClient client = DynamoDbClient.builder()
        .endpointOverride(URI.create("http://localhost:8000"))
        .region(Region.US_EAST_1)
        .build();
  3. Wähle aus einem Container nicht localhost — nutze host.docker.internal:8000 (Docker Desktop), den Compose-Service-Namen (http://dynamodb:8000) oder hänge beide Container an dasselbe Docker-Netzwerk. Für sam local übergib ein --docker-network, das mit dem Emulator-Container geteilt wird.

  4. Gegen echtes AWS verifiziere, dass der Region-Hostname stimmt, und konfiguriere die Proxy-Einstellungen des SDK, falls dein Netzwerk einen verlangt; aus privaten Subnetzen füge einen DynamoDB-Gateway-VPC-Endpoint oder eine NAT-Route hinzu.

Sobald der Endpoint antwortet, verifiziere, dass Daten durchgängig fließen — die DynoTable-Desktop-App verbindet sich sowohl mit DynamoDB Local als auch mit echtem AWS, sodass du die Tabellen sehen kannst, die dein Java-Code trifft (oder nicht trifft). Die Anfrage selbst bauen? Der DynamoDB Expression Builder erzeugt korrekte Key-Conditions und typisierte Werte.

In DynoTable ansehen

Verbinde Local von DynoTable statt Java-HTTP-Clients blind zu debuggen — Einstellungen → Profile → Profil hinzufügen, setze Endpoint http://localhost:8000, pick any region string, and run Verbindung testen. DynoTable bestätigt, dass der Emulator lauscht, bevor dein SDK es tut.

Für echtes AWS, the same profile flow applies with the regional endpoint. Siehe Mit AWS verbinden und Installation. Sobald verbunden, öffne Tabellen mit ⌘K. Prototypisiere Requests im Query Builder nachdem connectivity is confirmed.

Quellen

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

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.