AWS CloudFormation 如何获取外部脚本/嵌套栈的返回值(如目标组ARN)
AWS CloudFormation 拆分目标组创建逻辑的跨模板值回传实现
场景背景
- 使用CloudFormation做集群资源自动化创建实验时,计划将原本写在主模板
Create_Cluster.yaml中的负载均衡目标组创建逻辑,拆分到独立的外部模板中,提升模板的复用性和可维护性 - 最初尝试在主模板的
Transform段使用AWS::Include引用存放在S3中的Create_Target_Group.yaml独立模板,但碰到了无法绕过的依赖问题:主模板内的ECS服务资源需要配置LoadBalancers关联规则,该规则必须依赖目标组的ARN才能完成定义,普通的Include引用无法提供可被主模板直接调用的目标组ARN值,因此核心需求也很明确:找到可以从外部独立模板回传指定值的实现方案
方案对比与验证结论
AWS::Include的能力边界
经过实际测试验证,AWS::Include本质是文本级的模板拼接,会将被引用模板内的资源定义直接内嵌到主模板的资源段中,被引用的外部模板无法独立定义Outputs段回传自定义值,因此从机制上就无法满足跨模板的依赖传递需求
验证可行的实现方案:嵌套栈(Nested Stack)
最终通过嵌套栈架构完全满足了外部模板拆分、跨模板值回传的需求,核心实现逻辑为:
- 把目标组的创建逻辑编写为独立的嵌套栈模板,在模板的
Outputs段定义需要对外暴露的输出值,例如目标组ARN - 在主模板中创建类型为
AWS::CloudFormation::Stack的资源,关联上述目标组嵌套栈模板,由CloudFormation自动完成嵌套栈的部署和状态关联 - 在主模板的ECS服务资源配置中,使用
!GetAtt函数读取嵌套栈在Outputs段定义的返回值(即目标组ARN),直接填充到ECS服务的LoadBalancers配置项中,即可完成依赖关联
内容的提问来源于stack exchange,提问作者Patrick C.
相关产品推荐
相关产品推荐

