Golang连接本地DynamoDB报connection refused连接拒绝错误
问题环境信息
- Go版本:
go1.18.4 darwin/amd64 - 运行环境:macOS(darwin)amd64,完整Go环境配置如下:
GO111MODULE="off" GOARCH="amd64" GOBIN="/Users/esthersue/go/bin" GOCACHE="/Users/esthersue/Library/Caches/go-build" GOENV="/Users/esthersue/Library/Application Support/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/esthersue/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/esthersue/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GOVCS="" GOVERSION="go1.18.4" GCCGO="gccgo" GOAMD64="v1" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/8m/b1hsv_350dnbrshykgb_rjj80000gn/T/go-build2590030861=/tmp/go-build -gno-record-gcc-switches -fno-common"
- 操作场景:首次使用Go开发对接DynamoDB,参照入门教程编写建表逻辑后执行
go run main.go - 预期结果:成功在DynamoDB中创建目标数据表
- 实际报错信息:
RequestError: send request failed caused by: Post "http://localhost:8000/": dial tcp 127.0.0.1:8000: connect: connection refused
报错根因
报错核心是本地8000端口无可用DynamoDB服务:你参考的教程默认使用本地部署的DynamoDB Local调试环境,代码中配置的服务端点为http://localhost:8000,但执行代码前你没有启动本地DynamoDB实例,网络连接被目标端口拒绝,最终请求失败。
解决方案
你可以根据自身需求二选一:
方案1:沿用本地调试环境(和教程逻辑一致)
先启动本地DynamoDB实例,再运行代码:
- 如果你本地安装了Docker,直接执行以下命令一键启动:
docker run -p 8000:8000 amazon/dynamodb-local - 如果你没有Docker环境,可下载DynamoDB Local可执行包,提前安装JRE8及以上版本后,在解压目录执行启动命令:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
启动完成后确认8000端口处于监听状态,再重新执行go run main.go即可正常完成建表操作。
方案2:直接对接AWS云端DynamoDB服务
如果不需要本地调试环境,可修改代码配置直接操作云端实例:
- 删除代码中自定义的本地端点
http://localhost:8000配置,AWS SDK会默认根据配置的区域请求云端DynamoDB服务端点 - 配置本地AWS访问凭证:可在
~/.aws/credentials文件中填写账号AK/SK,在~/.aws/config中配置默认区域,也可通过环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION注入凭证 - 确认使用的账号拥有DynamoDB建表相关权限,再执行代码即可。
额外提示:你当前
GO111MODULE配置为off,如果拉取AWS SDK依赖时出现问题,可在项目目录执行go mod init 你的项目名称开启Go Modules做依赖管理,避免依赖拉取异常。
内容的提问来源于stack exchange,提问作者Esther Sue
相关产品推荐
相关产品推荐

