Tidak dapat menjalankan permintaan HTTP (DynamoDB, Java SDK)

TL;DR — Java SDK tidak pernah mendapat respons HTTP: koneksi TCP ke titik akhir DynamoDB gagal. Terhadap localhost:8000, hal ini berarti DynamoDB Lokal tidak berjalan (atau berada di port lain) — dan di dalam container Docker/SAM, localhost adalah container, bukan mesin Anda, sehingga emulator tidak dapat dijangkau di alamat tersebut. Mulai emulator, perbaiki endpoint, dan gunakan alamat yang dapat dijangkau host dari container.

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 melihatnya. Penyebab bertingkat memberi tahu Anda langkah jaringan mana yang gagal: Connection refused (tidak ada yang mendengarkan), connect timed out (tidak ada rute/firewall), atau UnknownHostException (nama host tidak terselesaikan, sering kali salah ketik wilayah atau titik akhir). Ini setara dengan Java dari Could not connect to the endpoint URL botocore.

Mengapa itu terjadi

  • DynamoDB Lokal tidak berjalan — tidak pernah dimulai, mogok saat startup (perpustakaan asli, konflik port), atau keluar dengan terminal terakhir Anda.
  • Port atau skema salah — Default lokal adalah 8000 dibandingkan http biasa; titik akhir https://localhost:8000 atau port yang salah menolak.
  • localhost di dalam wadah — kode yang berjalan di Docker/SAM (sam local invoke) memanggil loopback own-nya. Emulator di host Anda (atau di wadah saudaranya) tidak ada.
  • Melawan AWS asli: tidak ada jalur jaringan — proxy perusahaan tidak dikonfigurasi pada klien HTTP SDK, VPC tanpa rute/endpoint untuk DynamoDB, atau wilayah salah ketik yang menghasilkan nama host tidak ada.

Bagaimana cara memperbaikinya

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

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

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

  2. Arahkan klien ke titik akhir kanan (SDK v2):

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

  4. Terhadap AWS asli, verifikasi bahwa nama host wilayah sudah benar dan konfigurasikan pengaturan proksi SDK jika jaringan Anda memerlukannya; dari subnet privat, tambahkan titik akhir VPC gateway DynamoDB atau rute NAT.

  5. Cocokkan HTTP vs HTTPS. DynamoDB Lokal menggunakan HTTP biasa pada port 8000 — titik akhir https:// menolak koneksi.

Lihat di DynoTable

Hubungkan ke Lokal dari DynoTable alih-alih men-debug klien HTTP Java secara membabi buta — Pengaturan → Profil → Tambahkan Profil, atur titik akhir http://localhost:8000, pilih string wilayah mana pun, dan jalankan Uji Koneksi. DynoTable mengonfirmasi bahwa emulator mendengarkan sebelum SDK Anda melakukannya.

Untuk AWS asli, alur profil yang sama berlaku dengan titik akhir regional. Lihat Menghubungkan ke AWS dan Instal. Setelah terhubung, buka tabel dengan ⌘K. Permintaan prototipe di Pembuat Kueri setelah konektivitas dikonfirmasi.

Sumber

Kesalahan terkait

Referensi

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

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.