如何在独立CloudFormation模板中引用Chalice创建的纯Python Lambda函数
解决方案
方案1:通过Chalice部署输出传参(最简便)
Chalice每次部署完成后,会自动在.chalice/deployed/<阶段名>.json文件中生成所有资源的元数据,你定义的R53CloudformationResourceConflict函数的完整名称、ARN都会直接保存在这个文件中。
你只需新增一个简单的部署脚本,在Chalice部署完成后读取该值,作为参数传入独立CloudFormation模板的部署命令即可,适配任意阶段、应用名变更的场景,无需修改Chalice配置:
# 部署指定阶段的Chalice应用,示例阶段为dev chalice deploy --stage dev # 从部署输出中读取Lambda完整名称 LAMBDA_NAME=$(jq -r '.lambda_functions.R53CloudformationResourceConflict.function_name' .chalice/deployed/dev.json) # 部署独立CloudFormation栈,传入Lambda名称参数 aws cloudformation deploy --template-file cf.yml --stack-name your-cf-stack-name --parameter-overrides LambdaFunctionName=$LAMBDA_NAME
方案2:CloudFormation跨栈导出引用
如果需要多栈解耦,你可以给Chalice自动生成的CloudFormation栈添加全局导出值,直接在独立CF模板中跨栈引用:
- 在Chalice项目根目录新建
.chalice/cfextensions目录,新增outputs.cf.json文件,内容如下:
{ "Outputs": { "R53ConflictLambdaName": { "Value": {"Ref": "R53CloudformationResourceConflict"}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-R53ConflictLambdaName"} } } } }
- 重新部署Chalice应用后,修改你的
cf.yml,移除原有LambdaFunctionName参数,改为通过Fn::ImportValue引用导出值:
AWSTemplateFormatVersion: 2010-09-09 Parameters: ChaliceStackName: Type: String Description: Chalice应用部署生成的CloudFormation栈名,默认格式为<应用名>-<阶段名> Resources: R53CloudformationResourceConflict: Type: 'Custom::R53CloudformationResourceConflict' Properties: ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${!ImportValue ${ChaliceStackName}-R53ConflictLambdaName}' AppUrl: "some_app_url"
部署独立CF栈时只需传入Chalice的栈名即可自动匹配对应Lambda。
方案3:模板内动态拼接名称
你也可以直接在Chalice配置中使用内置变量声明Lambda名称规则,之后在独立CF模板中直接通过参数拼接即可:
- 在
.chalice/config.json中添加对应Lambda的名称配置,Chalice支持{app_name}、{stage}两个内置变量自动替换:
{ "stages": { "dev": { "lambda_functions": { "R53CloudformationResourceConflict": { "name": "{app_name}-{stage}-R53CloudformationResourceConflict" } } }, "prod": { "lambda_functions": { "R53CloudformationResourceConflict": { "name": "{app_name}-{stage}-R53CloudformationResourceConflict" } } } } }
- 修改
cf.yml,传入应用名和阶段两个参数即可动态拼接出正确的Lambda名称。
内容的提问来源于stack exchange,提问作者Justin S
相关产品推荐
相关产品推荐

