Unable to execute HTTP request (DynamoDB, Java SDK)
TL;DR — Java SDK hiç bir HTTP yanıtı almadı: DynamoDB uç noktasına giden TCP bağlantısı başarısız oldu. localhost:8000'e karşı bu, DynamoDB Local'in çalışmadığı (ya da başka bir portta olduğu) anlamına gelir — ve Docker/SAM kapsayıcıları içinde localhost, makineniz değil, kapsayıcı olduğundan, emülatöre o adreste ulaşılamaz. Emülatörü başlatın, uç noktayı düzeltin ve kapsayıcılardan ana bilgisayara ulaşılabilir bir adres kullanın.
Ne anlama gelir
com.amazonaws.SdkClientException: Unable to execute HTTP request:
Connect to localhost:8000 [localhost/127.0.0.1] failed: Connection refusedSdkClientException (v1: AmazonClientException), SDK'nın istemci tarafı hata sarmalayıcısıdır — istek, DynamoDB onu görmeden önce öldü. İç içe neden, hangi ağ adımının başarısız olduğunu söyler: Connection refused (hiçbir şey dinlemiyor), connect timed out (yol yok/güvenlik duvarı) ya da UnknownHostException (ana bilgisayar adı çözümlenmiyor, genellikle yanlış yazılmış bir bölge veya uç nokta). Bu, botocore'un Could not connect to the endpoint URL hatasının Java eşdeğeridir.
Neden olur
- DynamoDB Local çalışmıyor — hiç başlatılmadı, başlangıçta çöktü (yerel kitaplık, port çakışması) ya da son terminalinizle çıktı.
- Yanlış port veya şema — Local, düz
httpüzerinden varsayılan olarak8000'dir;https://localhost:8000uç noktası ya da yanlış port reddeder. - Bir kapsayıcı içinde
localhost— Docker/SAM'de (sam local invoke) çalışan kod, kendi geri döngüsünü arar. Ana bilgisayarınızdaki (ya da bir kardeş kapsayıcıdaki) emülatör orada değil. - Gerçek AWS'ye karşı: ağ yolu yok — SDK'nın HTTP istemcisinde yapılandırılmamış bir kurumsal proxy, DynamoDB için bir yolu/uç noktası olmayan bir VPC ya da var olmayan bir ana bilgisayar adı üreten yanlış yazılmış bir bölge.
Nasıl düzeltilir
Aradığınız yerde bir şeyin dinlediğini doğrulayın:
curl http://localhost:8000 # DynamoDB Local answers 400 with an AmazonDynamoDBv2 bodyBu başarısız olursa, emülatörü başlatın (
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jarya dadocker run -p 8000:8000 amazon/dynamodb-local).İstemciyi doğru uç noktaya yöneltin (v2 SDK):
DynamoDbClient client = DynamoDbClient.builder() .endpointOverride(URI.create("http://localhost:8000")) .region(Region.US_EAST_1) .build();Bir kapsayıcıdan
localhost'u aramayın —host.docker.internal:8000'i (Docker Desktop), compose hizmet adını (http://dynamodb:8000) kullanın ya da her iki kapsayıcıyı aynı Docker ağına ekleyin.sam localiçin, emülatör kapsayıcısıyla paylaşılan bir--docker-networkiletin.Gerçek AWS'ye karşı, bölge ana bilgisayar adının doğru olduğunu doğrulayın ve ağınız gerektiriyorsa SDK'nın proxy ayarlarını yapılandırın; özel alt ağlardan, bir DynamoDB ağ geçidi VPC uç noktası veya NAT yolu ekleyin.
Uç nokta yanıt verdiğinde, verinin baştan sona aktığını doğrulayın — DynoTable masaüstü uygulaması hem DynamoDB Local'e hem de gerçek AWS'ye bağlanır, böylece Java kodunuzun ulaştığı (ya da ulaşmadığı) tabloları görebilirsiniz. İsteğin kendisini mi oluşturuyorsunuz? DynamoDB Expression Builder doğru anahtar koşulları ve türlü değerler üretir.
İlgili hatalar
- Could not connect to the endpoint URL (boto3) — Python ikizi.
- Could not connect to DynamoDB Local (ECONNREFUSED) — Node.js ikizi.
- DynamoDB Local port 8000 in use
- Öğrenin: Running DynamoDB Local · Connect to Local & LocalStack
References
- Handling errors in the AWS SDK for Java 2.x — Developer Guide (
SdkClientException= a client-side problem, e.g. no network connection available) - Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (default port 8000, launch command, Docker examples)
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (setting the local endpoint
http://localhost:8000) docker run --add-host— Docker CLI reference (host.docker.internal/host-gatewayfor container-to-host connections)
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.