在Serverless中获取SSM参数时出现AWS凭证未找到的问题
解决Serverless部署时params中SSM变量的AWS凭证未找到问题
原因分析
Serverless框架对params字段的变量解析发生在provider配置加载之前,此时框架还未读取到provider的region和凭证配置,再加上环境变量传递可能存在的问题,导致无法获取AWS凭证访问SSM参数。
解决方案
1. 移除冗余export命令,依赖GitLab CI自动注入环境变量
你的.gitlab-ci.yml中手动export AWS凭证的操作完全多余——GitLab Runner会自动将你配置的CI/CD变量注入到环境中。手动export反而可能因变量作用域问题导致凭证未正确传递。修改script部分:
script: # deploy to staging env - sls deploy --stage staging --verbose
2. 在SSM变量中明确指定AWS区域
由于params解析早于provider配置加载,框架此时还不知道要使用的AWS区域,需要在SSM变量中显式指定:
params: default: SOME_VARIABLE: ${ssm:us-west-2:SOME_VARIABLE}
3. 将SSM变量移至provider.environment字段
如果业务允许,把变量从params移到provider.environment中,这里的变量解析会在provider配置加载完成后执行,此时凭证和region都已就绪:
provider: name: aws runtime: python3.9 region: us-west-2 environment: SOME_VARIABLE: ${ssm:SOME_VARIABLE}
4. 检查GitLab CI变量的配置状态
确认你在GitLab项目中配置的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY变量:
- 如果标记为受保护变量,需确保部署的分支/tag是受保护的
- 如果标记为掩码变量,不影响使用,但需确认变量值正确无误
内容的提问来源于stack exchange,提问作者Oscar Or
相关产品推荐
相关产品推荐

