Go项目调用AWS服务的关键是正确配置aws.Config的凭证和区域,需确保Go≥1.19、显式指定region、按优先级顺序验证凭证源(环境变量>容器角色>实例角色>~/.aws/credentials),并用aws-cli对齐调试。
Go 项目要调用 AWS 服务,核心不是装 SDK,而是让 aws.Config 能正确加载凭证和区域——多数报错(比如 NoCredentialProviders 或 InvalidRegion)都卡在这一步。
确认 Go 版本与 SDK v2 是否匹配
当前稳定生产环境推荐使用 github.com/aws/aws-sdk-go-v2(v2),它要求 Go ≥ 1.19。低于该版本会遇到 go: downloading github.com/aws/[email protected]: github.com/aws/[email protected]: invalid version: go.mod has post-v1 module path "github.com/aws/aws-sdk-go-v2/v2" at revision v1.25.0 类错误。
- 运行
go version确认 ≥ 1.19;否则升级 Go 或降级 SDK(不建议) - 初始化模块:
go mod init example.com/myapp - 拉取 SDK:
go get github.com/aws/aws-sdk-go-v2/config(只需这个包,其他服务按需引入) - v2 不再提供全局
aws.Session,所有客户端都基于config.LoadDefaultConfig构建
凭证加载顺序必须理清:别硬编码,也别只信 ~/.aws/credentials
LoadDefaultConfig 会按固定顺序查找凭证,顺序错了就静默失败。常见误区是以为写进 ~/.aws/credentials 就万事大吉,其实它排在第 4 位。
- 优先级从高到低:环境变量(
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_REGION)→ ECS/EKS 容器角色 → EC2 实例角色 →~/.aws/credentials+~/.aws/config - 开发时最稳妥的是设环境变量:
export AWS_ACCESS_KEY_ID=AKIA...; export AWS_SECRET_ACCESS_KEY=... - 若用
~/.aws/credentials,确保 profile 名匹配(默认是default),且~/.aws/config中有对应[profile default]和region = us-east-1 - 注意:v2 默认不读
~/.aws/config的 region,必须显式传或设AWS_REGION,否则报missing region in configuration
初始化 config 时 region 和 credentials 需显式控制
不要依赖“自动推断”,尤其在 CI 或多区域部署时。哪怕用默认凭证,region 也必须明确指定。