You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CloudFormation规则验证异常求助:UseSSL为Yes时证书ARN非空校验失效

解决CloudFormation规则验证不生效的问题

我帮你仔细排查了这段CloudFormation规则代码,核心问题出在YAML缩进错误,导致Fn::Equals的逻辑没有被正确解析,进而让整个断言失效。

问题分析

你当前的Fn::Not嵌套Fn::Equals的写法里,Fn::Equals的两个比较参数(证书ARN引用和空字符串)缩进层级不对,CloudFormation无法识别这是Fn::Equals的比较项,导致整个断言逻辑没有按预期执行。

至于你提到移除Fn::Not后验证成功但逻辑相反,那是因为移除后断言变成了「当UseSSL为Yes时,证书ARN必须为空」,这和你的需求完全颠倒,所以会出现逻辑反向的情况。

修正后的代码

Fn::Equals的两个参数缩进调整到它的子层级,确保CloudFormation能正确解析比较逻辑:

Rules:
  ValidateHostedZone:
    RuleCondition:
      Fn::Equals:
        - Ref: UseSSL
        - 'Yes'
    Assertions:
      - Assert:
          Fn::Not:
            - Fn::Equals:
                - Ref: ALBSSLCertificateARN
                - ''
        AssertDescription: ACM Certificate value cannot be empty if SSL is required

额外排查点

如果调整缩进后还是有问题,可以检查这两个细节:

  • 确认UseSSL参数的取值确实是字符串'Yes'(CloudFormation的字符串比较是大小写敏感的,注意不要写成'yes''YES'
  • 确认ALBSSLCertificateARN参数的类型是String,且没有设置默认值为非空字符串(如果默认值不是空,即使用户没输入,也会绕过验证)

调整后,当UseSSL'Yes'时,CloudFormation会自动检查ALBSSLCertificateARN是否为空字符串,如果为空就会抛出你定义的错误提示,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Abhishek Verma

火山引擎 最新活动