You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kotlin连接Docker中本地DynamoDB时触发HTTP 400错误

问题

在Kotlin与Ktor项目中使用AWS Kotlin客户端库(版本aws.sdk.kotlin:dynamodb:0.18.0-beta)连接Docker中运行的本地DynamoDB实例时,收到400错误日志:

DEBUG httpTraceMiddleware - DynamoDB-GetItem-835467a5-aedc-40ab-8c28-b56b625ccbd4/Attempt-1: HttpResponse: 400: Bad Request

客户端配置代码如下:

suspend fun getValueForKey(tableNameVal: String, keyName: String, keyVal: String) {

    val keyToGet = mutableMapOf<String, AttributeValue>()
    keyToGet[keyName] = AttributeValue.S(keyVal)

    val request = GetItemRequest {
        key = keyToGet
        tableName = tableNameVal
    }
    val provider = StaticCredentialsProvider.Builder().apply {
        accessKeyId = "fakeMyKeyId"
        secretAccessKey = "fakeSecretAccessKey"
    }.build()

    DynamoDbClient {
        credentialsProvider = provider
        region = "us-east-1"
        endpointUrl = Url.parse("http://localhost:8000")
    }.use { ddb ->
        val returnedItem = ddb.getItem(request)
        val numbersMap = returnedItem.item
        numbersMap?.forEach { entry ->
            println(entry.key)
            println(entry.value)
        }
    }
}

已尝试按官方指南配置假密钥,甚至省略credentialsProvider参数,错误仍存在。但通过AWS CLI命令可成功执行操作:

aws dynamodb get-item \
    --table-name key_values \
    --key '{"key": {"S": "key1"}}' \
    --endpoint-url http://localhost:8000
解决方案
  • 禁用请求签名验证:本地DynamoDB无需AWS签名,而0.18.0-beta版本的客户端默认会对请求签名,这是导致400错误的核心原因。在客户端配置中添加签名关闭选项:

    DynamoDbClient {
        credentialsProvider = provider
        region = "us-east-1"
        endpointUrl = Url.parse("http://localhost:8000")
        signingMode = SigningMode.OFF // 新增该行禁用签名
    }.use { ddb ->
        // 原有业务逻辑
    }
    
  • 升级客户端版本:0.18.0-beta属于早期测试版本,对本地DynamoDB的兼容性存在问题。建议升级到最新稳定版(如1.x系列),新版本修复了大量兼容性问题:

    // 替换原依赖版本
    implementation("aws.sdk.kotlin:dynamodb:1.2.1")
    
  • 校验参数一致性:确保代码中传入的表名(tableNameVal)和键名(keyName)与CLI命令中的完全一致,避免因参数不匹配导致的请求错误。

内容的提问来源于stack exchange,提问作者Oresztesz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:05:55