如何将API调用或脚本执行结果作为CloudFormation资源的动态参数?
CloudFormation 动态参数取值实现方案
有3种原生方案可以在单套模板/ IaC逻辑内完成动态取值,无需手动修改参数:
- 自定义资源(Custom Resource)
这是原生CloudFormation支持度最高的方案,你可以在模板内直接声明自定义资源,后端关联Lambda函数,函数内可以实现任意API调用、Python/Bash逻辑,执行结果会返回给CloudFormation栈,后续资源直接通过!GetAtt 自定义资源逻辑名.返回字段名即可引用结果。
比如你需要动态获取当前区域最新的Amazon Linux 2 AMI ID,只需要在Lambda中调用ec2:DescribeImages接口过滤返回,模板内EC2资源的ImageId参数直接引用返回值即可。 - AWS CDK 嵌入业务逻辑
如果使用AWS CDK编写IaC,你可以直接在CDK的代码(支持Python/TypeScript/Go等语言)中嵌入API调用、本地脚本执行逻辑,拿到的返回值可以直接赋值给对应资源的属性,合成CloudFormation模板时会自动填充对应值,不需要额外维护参数配置。 - 动态引用+SSM参数自动更新
如果你不想调整现有模板的结构,可以新增一个前置执行的Lambda任务,把你需要的API/脚本执行结果自动写入SSM Parameter Store,模板内通过{{resolve:ssm:你的参数名:参数版本}}语法动态引用即可,整套流程可以用CodePipeline串联实现全自动化,无需手动修改参数值。
注意:使用自定义资源时需要额外处理Create/Update/Delete三种栈操作事件的返回逻辑,避免出现栈操作卡住的问题,同时需要给关联的Lambda角色配置对应API调用、资源操作的权限。
内容的提问来源于stack exchange,提问作者GeoCom
相关产品推荐
相关产品推荐

