amazon-web-services - 在 Cloudformation 中实现此条件时,为什么我会看到 'did not find expected node content'?

标签 amazon-web-services yaml aws-cloudformation

我想检索不同的资源记录,具体取决于我的条件是否为真,否则如果名称是其他内容,则更改字符串。这是我的例子:

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
            - ""
            - - !GetAtt
              - domainName
              - regionalValue
              - "." 
        ]

我已经运行了 cfn-lint,并且在 !Join 命令之前(紧接在我的 ! If 语句。我遵循 ->

的条件公式
!If [condition_name, value_if_true, value_if_false]

谢谢

最佳答案

在 YAML 中,流式节点(即 […]{…})不能包含 block 式节点(即使用缩进构建的所有内容)。另外,您有多个没有意义的结构,例如

- !Join
- ""

这里,第一项被标记为 !Join 但为空,因此不会加入任何内容。同样适用

- !GetAtt
- domainName

似乎有意义的重写是

- !If
  - conditionIsTrue
  - !Join [".", ["Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-dnsZone"]]
  - !Join
    - ""
    - !GetAtt
      - domainName
      - regionalValue
      - "." 

如您所见,我删除了内部 {…} 因为 YAML 支持 [a: b] 作为 [{a: b} 的简写符号]

如果要使用流式节点,则需要将所有包含的节点设置为流式:

- !If [
    conditionIsTrue, 
    !Join [
      ".",
      ["Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-dnsZone"]
    ],
    !Join ["", !GetAtt [domainName, regionalValue, "."]]
  ]

关于amazon-web-services - 在 Cloudformation 中实现此条件时,为什么我会看到 'did not find expected node content'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70068214/

相关文章:

python - Docker Build 找不到 pip

amazon-web-services - Kubernetes 预计服务帐户 token 到期时间问题

amazon-web-services - CodeBuild 无法创建日志

java - Jackson:反序列化接口(interface)集的实例化子类(yml)

kubernetes - 了解 Kubernetes 的配置文件

amazon-web-services - AWS - 找不到 Cloudfront 堆栈

mysql - 从 EC2 到 RDS 的连接缓慢,而到 RDS 的本地连接正常

jenkins - 持续集成 : running Jenkins Build on newly created EC2 Instance using AWS Cloudformation+OpsWorks, 什么是最佳实践?

aws-cloudformation - 更新 Cloud Formation 配置文件中的 EmailSubject 和 EmailMessage

python - 如何使用 ruamel.yaml 而不是 pyyaml 通过 python 编辑 YAML 文件?