CloudFormation YAML合并参数创建AWS监听器规则报错如何解决
CloudFormation监听器规则参数拼接报错解决方案
报错原因
!Join(对应CloudFormation的Fn::Join内置函数)的第二个参数必须是字符串列表,你之前的写法中直接给!Join传入了单个!Sub生成的字符串,不符合语法要求,因此触发模板验证错误。
同时你原有的逻辑也不符合ALB监听器HostHeader配置的常用规则:直接将逗号分隔的param1作为Values的单个元素,会被识别为一个包含逗号的整体主机头,而非多个独立的主机头条目。
修正方案
方案1:标准多主机头配置(推荐)
ALB监听器的HostHeader规则的Values字段本身支持传入多个独立主机头组成的列表,无需手动拼接为单个逗号分隔字符串,写法如下:
- Field: host-header Values: !Split - ',' - !Join - ',' - - !Ref param1 - !Sub '${appname}.${env}.endpoint'
执行逻辑:
- 先将
param1的逗号分隔值,和拼接生成的业务endpoint,用逗号拼接为一个完整的长逗号分隔字符串 - 再通过
!Split将长字符串按逗号拆分为独立的主机头列表,直接赋值给Values
如果param1传入值为endpoint1,endpoint2,endpoint3,appname为myapp,env为prod,最终生成的Values为:["endpoint1", "endpoint2", "endpoint3", "myapp.prod.endpoint"]
方案2:单逗号分隔主机头配置
如果你的业务场景确实需要将所有主机头合并为单个逗号分隔的字符串作为唯一配置项,写法如下:
- Field: host-header Values: - !Join - ',' - - !Ref param1 - !Sub '${appname}.${env}.endpoint'
这里!Join的第二个参数是包含param1和拼接结果的字符串列表,完全符合CloudFormation语法要求,不会再触发验证报错。
内容的提问来源于stack exchange,提问作者Fatilearns
相关产品推荐
相关产品推荐

