如何将CommaDelimitedList类型证书ARN传入AWS::ElasticLoadBalancingV2::ListenerCertificate资源
解决方案
问题原因
AWS::ElasticLoadBalancingV2::ListenerCertificate的Certificates属性要求的是包含CertificateArn键的对象数组,而CommaDelimitedList参数类型返回的是纯字符串数组,两者结构不匹配,这是报错的核心原因。安全组等资源可以直接传入CommaDelimitedList是因为对应属性本身就要求字符串数组,无需额外转换,两者场景的属性类型要求存在差异。
可行写法
用CloudFormation原生的!Map(即Fn::Map)函数遍历字符串数组,为每一项自动加上CertificateArn前缀结构,无需提前固定证书数量,适配多环境可变需求:
AWSTemplateFormatVersion: "2010-09-09" Parameters: # 补充监听器ARN参数,ListenerCertificate资源必填 pAlbListenerArn: Type: String Description: 要绑定证书的ALB监听器ARN pAdditionalAlbListenerCertArns: Type: CommaDelimitedList Default: "arn:aws:acm:us-east-1:123456789012:certificate/xxxx-xxxx-xxxx-xxxx,arn:aws:acm:us-east-1:123456789012:certificate/yyyy-yyyy-yyyy-yyyy" Description: 输入ACM证书的ARN列表,多个用英文逗号分隔 Resources: rCertificatesList: Type: AWS::ElasticLoadBalancingV2::ListenerCertificate Properties: ListenerArn: !Ref pAlbListenerArn Certificates: !Map Input: !Ref pAdditionalAlbListenerCertArns Map: CertificateArn: !MapValue
补充说明
!Map函数会遍历Input字段传入的数组Map字段定义了数组每一项的转换规则,!MapValue指代数组遍历到的当前元素- 转换后会自动生成符合要求的
[{"CertificateArn": "cert1"}, {"CertificateArn": "cert2"}]格式 - 如果你使用的区域暂不支持原生
!Map函数,可在模板顶部添加Transform: 'AWS::LanguageExtensions'开启语言扩展宏,即可正常使用该语法
内容的提问来源于stack exchange,提问作者user2253884
相关产品推荐
相关产品推荐

