如何用CloudFormation Package为AWS Lambda添加控制台可见的auxiliary.json依赖文件
问题根因
- 当前模板中
Code属性直接指向单个文件lambdas/mylambda.py,执行aws cloudformation package时,CLI只会上传匹配到的单个文件,不会自动扫描同目录下的auxiliary.json,自然无法把依赖文件同步到Lambda运行环境和控制台。 - Lambda控制台展示的可编辑代码文件列表,完全由上传的代码包内部结构决定,只有代码包根目录下包含的文件,才会被识别为顶层可在线编辑的文件,和你手动在控制台新建文件的结构保持一致。
实现步骤
完全不需要改变你现有的本地目录结构、不需要手动创建zip包、不需要手动操作S3,只需要调整模板配置即可:
- 修改CloudFormation模板内的Lambda资源
Code配置,将原本指向单个Python文件的路径,改为直接指向代码所在的lambdas/目录,调整后的完整资源示例:
Resources: MyLambda: Type: AWS::Lambda::Function Properties: FunctionName: "MyLambda" Code: lambdas/ Handler: "mylambda.lambda_handler" Runtime: "python3.8" Timeout: 30 MemorySize: 128
小提示:因为打包后的代码包根目录会直接放置mylambda.py和auxiliary.json,没有嵌套的目录层级,所以Handler配置不需要做大的改动,只需要确保模块名和实际文件名一致即可。
- 继续执行你原来的两条CLI命令,不需要调整任何参数:
- 运行
aws cloudformation package时,CLI识别到Code指向本地目录,会自动递归把目录下的所有文件打包成临时格式的代码包,自动上传到你指定的S3存储桶,全程你不需要接触zip文件、不需要手动往S3传内容,和之前只部署单文件的操作流程完全一致。 - 运行
aws cloudformation deploy完成栈更新即可。
- 运行
- 部署完成后打开Lambda控制台的代码编辑器,就能直接在顶层目录看到
mylambda.py和auxiliary.json两个可在线查看、编辑的文件,运行时读取auxiliary.json的逻辑和你之前手动在控制台创建的版本完全一致。
注意事项
- 不要在本地手动预先创建zip压缩包,所有打包动作交给CLI自动处理,避免出现目录层级嵌套的问题。
- 确认
lambdas/目录下没有多余的嵌套子文件夹,保证两个目标文件都在打包后的代码包根目录,否则控制台会把文件展示在深层路径下,和你手动创建的结构不一致。 - 后续只要修改本地目录下的文件内容,重新跑一遍原来的package和deploy命令,就会自动把最新内容同步到Lambda,不需要额外操作。
注:Lambda平台本身对代码上传的底层要求是zip格式的代码包,这是平台的强制规则,这套流程把打包、上传的动作全部自动化,你全程不需要感知zip的存在,完全符合不想手动处理打包上传的要求。
内容的提问来源于stack exchange,提问作者Rafiq
相关产品推荐
相关产品推荐

