You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation编写条件逻辑时出现'did not find expected node content'报错原因?

错误根因

  • 核心是YAML语法缩进错误,导致!If内置函数的三个参数结构不完整,cfn-lint解析时无法识别到!If对应的第三个参数(条件为假时的返回值),因此抛出did not find expected node content报错。
  • 附带两个语法不规范问题:
    1. 真值分支的!Join使用冗余:仅单个拼接元素时不需要调用!Join,直接写对应值即可。
    2. 假值分支的!Join多行短格式对齐错误,被解析为外层ResourceRecords数组的独立元素,而非!If的参数。

修正后的示例代码

myDNSresource:
    Type: AWS::Route53::RecordSet
    Condition: devEnv
    Properties:
      HostedZoneName: 
        Fn::ImportValue: !Sub "${stackName}-${AWS::Region}-dnsZone"
      Name: !Join [".", [!Ref hostname, {"Fn::ImportValue": !Sub "${stackname}-${AWS::Region}-dnsZone"}]]
      Type: CNAME
      TTL: 130
      ResourceRecords:
        - !If 
          - conditionIsTrue
          # 条件为真时的返回值,如需拼接可自行补充!Join逻辑
          - Fn::ImportValue: !Sub "${accountStackName}-${AWS::Region}-dnsZone"
          # 条件为假时的返回值,正确对齐的!Join结构
          - !Join
            - ""
            - - !GetAtt domainName.regionalValue
              - "."

补充说明

如果你的业务确实需要在条件为真时拼接多个字符串组成域名,可以保留!Join,只需要调整参数结构和缩进即可,示例如下:

!If 
  - conditionIsTrue
  - !Join [".", [!Ref "prefixStr", {"Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-dnsZone"}]]
  - # 假值分支逻辑同上

内容的提问来源于stack exchange,提问作者i'i'i'i'i'i'i'i'i'i'i'i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:36:02