Impossibile eseguire la richiesta HTTP (DynamoDB, Java SDK)

TL;DR: Java SDK non ha mai ricevuto una risposta HTTP: la connessione TCP all'endpoint DynamoDB non è riuscita. Contro localhost:8000 significa che DynamoDB Local non è in esecuzione (o si trova su un'altra porta) e all'interno dei contenitori Docker/SAM, localhost è il container, non la tua macchina, quindi l'emulatore non è raggiungibile a quell'indirizzo. Avvia l'emulatore, correggi l'endpoint e utilizza un indirizzo raggiungibile dall'host dai contenitori.

Cosa significa

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

"SdkClientException" (v1: "AmazonClientException") è il wrapper degli errori lato client dell'SDK: la richiesta è morta prima che DynamoDB la vedesse. La causa nidificata indica quale passaggio di rete non è riuscito: "Connessione rifiutata" (niente in ascolto), "connessione scaduta" (nessun percorso/firewall) o "UnknownHostException" (il nome host non viene risolto, spesso si tratta di una regione o di un endpoint con errori di battitura). È l'equivalente Java di Impossibile connettersi all'URL dell'endpoint di botocore.

Perché succede

  • DynamoDB Local non è in esecuzione: non è mai stato avviato, si è bloccato all'avvio (libreria nativa, conflitto porta) o è uscito con l'ultimo terminale.
  • Porta o schema errato — Il valore predefinito locale è "8000" rispetto al semplice "http"; un endpoint di https://localhost:8000 o la porta sbagliata rifiuta.
  • localhost all'interno di un contenitore — il codice in esecuzione in Docker/SAM (sam local invoke) compone il proprio proprio loopback. L'emulatore sul tuo host (o in un contenitore fratello) non è presente.
  • Contro il reale AWS: nessun percorso di rete: proxy aziendale non configurato sul client HTTP dell'SDK, VPC senza route/endpoint per DynamoDB o una regione con errore di battitura che produce un nome host inesistente.

Come risolverlo

  1. Conferma che qualcosa è in ascolto nel luogo in cui stai componendo:

    curl http://localhost:8000    # DynamoDB Local answers 400 with an AmazonDynamoDBv2 body
  2. Puntare il client all'endpoint corretto (SDK v2):

    DynamoDbClient client = DynamoDbClient.builder()
        .endpointOverride(URI.create("http://localhost:8000"))
        .region(Region.US_EAST_1)
        .build();
  3. Da un contenitore, non comporre localhost: utilizzare host.docker.internal:8000 (Docker Desktop), il nome del servizio di composizione (http://dynamodb:8000) o collegare entrambi i contenitori alla stessa rete Docker. Per sam local, passa un --docker-network condiviso con il contenitore dell'emulatore.

  4. Rispetto al reale AWS, verifica che il nome host della regione sia corretto e configura le impostazioni proxy dell'SDK se la tua rete ne richiede uno; dalle sottoreti private, aggiungi un endpoint VPC gateway DynamoDB o una route NAT.

  5. Abbina HTTP e HTTPS. DynamoDB Il locale parla semplicemente HTTP sulla porta 8000: un endpoint https:// rifiuta la connessione.

Vedilo in DynoTable

Connettiti a locale da DynoTable invece di eseguire il debug cieco dei client HTTP Java: Impostazioni → Profili → Aggiungi profilo, imposta l'endpoint http://localhost:8000, scegli una stringa della regione ed esegui Test connessione. DynoTable conferma che l'emulatore è in ascolto prima che lo faccia il tuo SDK.

Per un reale AWS, lo stesso flusso del profilo si applica all'endpoint regionale. Consulta Connetti a AWS e Installa. Una volta connesso, apri le tabelle con ⌘K. Richieste di prototipo nel Builder di query dopo la conferma della connettività.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.