容器镜像部署AWS Lambda时YAML定义的环境变量未找到
问题根因
sam build仅负责项目编译、容器镜像本地构建,不会读取template.yaml中的资源配置向Lambda服务端下发更新。你构建后手动推送镜像、手动创建Lambda函数的流程,完全没有应用模板里定义的环境变量、超时等配置,函数运行时自然读不到BUCKET_NAME。
补充说明:Lambda环境变量是运行时由Lambda服务动态注入的,不会打包进容器镜像。无论怎么修改模板、重新构建镜像,只要服务端函数配置没更新,就读不到对应变量。把环境变量写在
Globals全局段还是单函数Properties段,都遵循这个逻辑。
解决方法
两种方案可按需选择:
- 方案一:使用SAM标准部署流程
执行完sam build后,直接运行sam deploy --guided,按照命令行引导完成参数确认,SAM会自动完成ECR仓库创建、镜像推送、Lambda函数创建/更新全流程,模板里定义的所有配置(环境变量、超时时间、CPU架构等)都会自动应用到函数上,部署完成后即可正常读取环境变量。 - 方案二:手动创建函数时同步配置环境变量
如果你需要保留手动推送镜像、手动创建函数的流程,不需要依赖template.yaml中的配置,在Lambda控制台创建/编辑函数时,找到「环境变量」配置板块,手动添加键为BUCKET_NAME、值为对应桶名的条目,保存配置后函数即可正常读取。
配置完成后,可以直接在Lambda控制台的「配置-环境变量」页面检查条目是否存在,能看到对应键值对就说明配置生效,不会再抛出KeyError异常。
内容的提问来源于stack exchange,提问作者shawnngtq
相关产品推荐
相关产品推荐

