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