Serverless部署AWS Lambda时环境变量不更新问题咨询
Serverless部署AWS Lambda环境变量不更新的解决方案
这是Serverless框架旧版本的已知问题:框架做部署变更检测时,不会主动追踪${file()}方式引入的外部文件内容变化,只会比对代码包和serverless.yml内联配置的哈希,因此单独修改.env-prod.json时,生成的CloudFormation模板没有被标记为变更,自然不会触发Lambda环境变量的更新,--force参数仅强制重新上传代码包,不会绕过CloudFormation的配置变更检测,所以没有效果。
可按以下优先级选方案解决:
- 最快方案:单函数强制部署
直接执行函数级部署命令,会跳过框架的变更缓存,全量同步目标函数的最新代码和所有配置(包括环境变量),不会重建API网关、IAM角色等关联资源,执行速度很快:serverless deploy function --function app - 根治方案:升级Serverless版本
框架在v2.60.0之后的版本已经修复了外部引入文件的变更检测逻辑,升级后正常执行全量部署命令,就能自动识别.env文件的改动,同步环境变量:npm update -g serverless serverless deploy - 临时兼容方案(不升级版本时使用)
在函数配置里加一个可手动更新的标记字段,每次修改环境变量时同步更新这个字段,人为触发配置变更检测,比如加description版本标记:functions: app: handler: index.handler description: backend v1.0.2 # 每次调整环境变量时修改这里的版本号即可 environment: ${file(./.env-${self:custom.stage}.json)} events: - http: path: / method: ANY cors: true - http: path: /{proxy+} method: ANY cors: true
部署完成后不用登录AWS控制台,直接执行下面的命令就能查看最终生效的函数配置,核对环境变量是否正确:
serverless print
内容的提问来源于stack exchange,提问作者ServerBloke
相关产品推荐
相关产品推荐

