GitHub Actions设置的环境变量无法在Chalice(AWS Lambda)项目中访问
问题原因与解决方案
核心原因
你在GitHub Actions中设置的REPO、GITHUB_REF_NAME、GITHUB_SHA是部署流程所在Ubuntu虚拟机的环境变量,和Lambda函数运行时的环境变量完全是两个独立环境。Chalice不会自动将部署机器的环境变量同步到Lambda运行环境,只有.chalice/config.json里配置的环境变量,才会被Chalice打包到Lambda函数的运行环境中。
解决方案
方案一:部署时通过命令行参数传递
直接在chalice deploy命令中用--environment-variable参数指定要传递给Lambda的环境变量,修改GitHub Actions中的部署步骤:
- name: Deploy with Chalice run: | chalice deploy --stage=production \ --environment-variable REPO=${{ env.REPO }} \ --environment-variable GITHUB_REF_NAME=${{ env.GITHUB_REF_NAME }} \ --environment-variable GITHUB_SHA=${{ env.GITHUB_SHA }}
方案二:动态修改Chalice配置文件
写个简单脚本将GitHub Actions的环境变量写入.chalice/config.json的production阶段配置,再执行部署:
- 创建
inject_env_vars.py脚本:
import json import os # 读取现有配置 with open('.chalice/config.json', 'r') as f: config = json.load(f) # 确保production阶段的环境变量配置存在 if 'environment_variables' not in config['stages']['production']: config['stages']['production']['environment_variables'] = {} # 添加CI环境变量 config['stages']['production']['environment_variables'].update({ 'REPO': os.environ['REPO'], 'GITHUB_REF_NAME': os.environ['GITHUB_REF_NAME'], 'GITHUB_SHA': os.environ['GITHUB_SHA'] }) # 写入修改后的配置 with open('.chalice/config.json', 'w') as f: json.dump(config, f, indent=2)
- 在GitHub Actions中添加执行脚本的步骤:
- name: Inject CI env vars into Chalice config run: python3 inject_env_vars.py - name: Deploy with Chalice run: chalice deploy --stage=production
补充说明
你在Check branch步骤中能正常输出变量,是因为该步骤直接在GitHub Actions的虚拟机环境中执行,读取的是虚拟机的环境变量;而Lambda代码里os.environ.get读取的是Lambda运行容器的环境变量,两者完全独立,必须通过Chalice的官方机制把变量传递到Lambda环境中。
内容的提问来源于stack exchange,提问作者bolino
相关产品推荐
相关产品推荐

