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

aws-sdk-go-v2连接本地DynamoDB容器无法查询到已创建表问题

问题根因

核心是AWS SDK Go v2的自定义端点配置缺失关键字段,同时代码中忽略了接口返回的错误,导致无法感知实际请求异常。
AWS SDK Go v2默认对DynamoDB服务启用主机路由重写逻辑:如果没有显式标记自定义端点为不可变,SDK不会使用配置的本地http://localhost:8000地址,而是按照官方服务规则拼接公网端点发起请求,自然无法查到本地DynamoDB实例里的表。

修复方案

按以下步骤调整代码和容器启动配置即可:

  • 不要丢弃API调用返回的错误
    当前代码里用_忽略了ListTables的错误返回,先把错误处理加上,后续遇到问题可以直接看到报错原因:
    tables, err := db.ListTables(context.TODO(), &dynamodb.ListTablesInput{})
    if err != nil {
        log.Fatalf("query table list failed: %v", err)
    }
    fmt.Println("tables", tables.TableNames)
    
  • 修正自定义端点配置
    在端点解析逻辑返回的aws.Endpoint结构体中,添加HostnameImmutable: true字段,同时显式指定SigningRegion和配置的local-env区域一致,禁止SDK重写配置的本地地址。修正后的配置段如下:
    config.WithEndpointResolver(aws.EndpointResolverFunc(
        func(service, region string) (aws.Endpoint, error) {
            return aws.Endpoint{
                URL:               "http://localhost:8000",
                SigningRegion:     "local-env",
                HostnameImmutable: true,
            }, nil
        })),
    
  • (可选推荐)调整DynamoDB Local启动参数
    启动容器时添加-sharedDb参数,让本地DynamoDB实例使用共享存储文件,不会根据不同的访问密钥、区域自动拆分独立数据集,避免隐式配置不匹配导致的表不可见问题。启动命令参考:
    docker run -p 8000:8000 amazon/dynamodb-local:1.16.0 -jar DynamoDBLocal.jar -sharedDb
    

调整完成后重新运行Go程序,即可正常返回之前通过CLI创建的test表。


内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:06:28