Unable to execute HTTP request (DynamoDB, Java SDK)

TL;DR — Java SDK tidak pernah mendapat respons HTTP: koneksi TCP ke endpoint DynamoDB gagal. Terhadap localhost:8000 itu berarti DynamoDB Local tidak berjalan (atau di port lain) — dan di dalam kontainer Docker/SAM, localhost adalah kontainer, bukan mesin Anda, jadi emulator tak terjangkau di alamat itu. Mulai emulator, perbaiki endpoint, dan gunakan alamat yang dapat dijangkau host dari kontainer.

Apa artinya

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

SdkClientException (v1: AmazonClientException) adalah pembungkus kegagalan sisi klien SDK — permintaan mati sebelum DynamoDB pernah melihatnya. Penyebab bersarang memberi tahu langkah jaringan mana yang gagal: Connection refused (tidak ada yang mendengarkan), connect timed out (tidak ada rute/firewall), atau UnknownHostException (hostname tidak teruraikan, sering region atau endpoint yang salah ketik). Ini padanan Java dari Could not connect to the endpoint URL botocore.

Mengapa terjadi

  • DynamoDB Local tidak berjalan — ia tidak pernah dimulai, crash saat startup (native library, konflik port), atau keluar bersama terminal terakhir Anda.
  • Port atau skema salah — Local default ke 8000 melalui plain http; endpoint https://localhost:8000 atau port yang salah menolak.
  • localhost di dalam kontainer — kode yang berjalan di Docker/SAM (sam local invoke) memanggil loopback-nya sendiri. Emulator di host Anda (atau di kontainer saudara) tidak ada di sana.
  • Terhadap AWS asli: tidak ada jalur jaringan — proxy korporat tidak dikonfigurasi pada klien HTTP SDK, VPC tanpa rute/endpoint untuk DynamoDB, atau region salah ketik menghasilkan hostname yang tidak ada.

Cara memperbaikinya

  1. Konfirmasi ada sesuatu yang mendengarkan di tempat Anda memanggil:

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

    Jika itu gagal, mulai emulator (java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar atau docker run -p 8000:8000 amazon/dynamodb-local).

  2. Arahkan klien ke endpoint yang benar (SDK v2):

    DynamoDbClient client = DynamoDbClient.builder()
        .endpointOverride(URI.create("http://localhost:8000"))
        .region(Region.US_EAST_1)
        .build();
  3. Dari kontainer, jangan panggil localhost — gunakan host.docker.internal:8000 (Docker Desktop), nama layanan compose (http://dynamodb:8000), atau lampirkan kedua kontainer ke jaringan Docker yang sama. Untuk sam local, teruskan --docker-network yang dibagi dengan kontainer emulator.

  4. Terhadap AWS asli, verifikasi hostname region benar dan konfigurasikan pengaturan proxy SDK jika jaringan Anda membutuhkannya; dari subnet privat, tambahkan gateway VPC endpoint DynamoDB atau rute NAT.

Setelah endpoint menjawab, verifikasi data mengalir dari ujung ke ujung — aplikasi desktop DynoTable terhubung ke DynamoDB Local dan AWS asli, jadi Anda dapat melihat tabel yang (atau tidak) dikenai kode Java Anda. Membangun permintaan itu sendiri? DynamoDB Expression Builder menghasilkan key condition yang benar dan nilai bertipe.

Kesalahan terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.