Below Allows you to swap between cloudfront and a static ip address.
Note the new line after the - for the If statement, this tells yaml that this is an object array, you need to replicate everything in the object array as cloudformation does not merge objects arrays together.
WebDNSRecordSet:
Type: AWS::Route53::RecordSet
DependsOn:
- DistributionConfig
Properties:
Fn::If:
- IsIPRestricted
-
HostedZoneName: !Sub "${Domain}." ResourceRecords:
- 123.123.123.123
TTL: '900' Name: !Sub "www.${Domain}." Type: A
-
HostedZoneName: !Sub "${Domain}." AliasTarget:
DNSName:
Fn::GetAtt: [DistributionConfig, DomainName]
HostedZoneId: "Z2FDTNDATAQYW2" Name: !Sub "www.${Domain}." Type: A
https://www.json2yaml.com/
When run through https://www.json2yaml.com/
you get
{
"WebDNSRecordSet": {
"Type": "AWS::Route53::RecordSet",
"DependsOn": [
"DistributionConfig"
],
"Properties": {
"Fn::If": [
"IsIPRestricted",
{
"HostedZoneName": "${Domain}.",
"ResourceRecords": [
"123.123.123.123"
],
"TTL": "900",
"Name": "www.${Domain}.",
"Type": "A"
},
{
"HostedZoneName": "${Domain}.",
"AliasTarget": {
"DNSName": {
"Fn::GetAtt": [
"DistributionConfig",
"DomainName"
]
},
"HostedZoneId": "Z2FDTNDATAQYW2"
},
"Name": "www.${Domain}.",
"Type": "A"
}
]
}
}
}