Kotlin使用AWS SDK访问本地DynamoDB报连接被拒绝如何解决
解决方案
你遇到的socket connection refused错误是由本地DynamoDB客户端配置错误导致的,按以下步骤修改即可解决:
1. 核心错误原因
- 本地DynamoDB默认走HTTP协议,SDK默认会尝试HTTPS连接,同时会校验SSL证书,无证书时会连接失败
- 本地DynamoDB不需要真实AWS凭证,未配置虚拟凭证时也会触发连接异常
- 原有端点构造方式冗余,容易出现协议/端口匹配错误
2. 正确的客户端初始化代码
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.sdk.kotlin.runtime.endpoint.StaticEndpointResolver import aws.smithy.kotlin.runtime.client.endpoints.Endpoint import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials import aws.smithy.kotlin.runtime.auth.awscredentials.StaticCredentialsProvider val dynamoDbClient = DynamoDbClient { // 区域可以随意填写,本地DynamoDB不会校验区域 region = "us-west-1" // 直接填入本地DynamoDB的完整HTTP访问地址 endpointResolver = StaticEndpointResolver(Endpoint("http://localhost:8000")) // 填入任意虚拟凭证即可,本地DynamoDB不会校验凭证有效性 credentialsProvider = StaticCredentialsProvider(Credentials("testId", "testSecret")) // 关闭SSL校验,避免HTTP场景下的证书验证失败 httpClient { engine { ssl { isVerify = false } } } }
3. 可选排查步骤
如果修改配置后仍然报错,执行以下检查:
- 执行
netstat -ano | findstr :8000确认8000端口被DynamoDB的Java进程占用 - 如果启动本地DynamoDB时指定了自定义端口,需要和配置文件中的端口保持一致
- 关闭系统代理,或者将
localhost加入代理排除列表
内容的提问来源于stack exchange,提问作者renato souza
相关产品推荐
相关产品推荐

