我有以下两个 CloudFormation 资源:
"TestELB" { ... },
"TestRecordSetGroup": {
"Type": "AWS::Route53::RecordSetGroup",
"Properties": {
"HostedZoneName": "example.com.",
"RecordSets": [
{
"Name": "subdomain.example.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneNameID"]},
"DNSName": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneName"]}
}
},
{
"Name": "subdomain.example.com.",
"Type": "AAAA",
"AliasTarget": {
"HostedZoneId": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneNameID"]},
"DNSName": {"Fn::Join": [".", ["ipv6", {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneName"]}]]}
}
}
]
}
}
堆栈更新后,我看到区域中列出的两条记录均具有预期的别名值。A 记录有效,经 dig 验证:
$ dig A subdomain.example.com
...
;; QUESTION SECTION:
;subdomain.example.com. IN A
;; ANSWER SECTION:
subdomain.example.com. 59 IN A 11.22.33.44
;; Query time: 38 msec
...
但是 AAAA 记录不起作用:
$ dig AAAA subdomain.example.com
...
;; QUESTION SECTION:
;subdomain.example.com. IN AAAA
;; AUTHORITY SECTION:
example.com. 899 IN SOA ns-1234.awsdns-11.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
;; Query time: 54 msec
...
ipv6.
我认为这与使用 Fn::Join 添加到 ELB 的 DNS 名称开头有关。如果我更改 A 记录,使其使用 Fn:Join 添加dualstack.
到 DNS 名称前面,它也会以同样的方式失败。
Fn::Join 是否是将DNS 名称添加到其开头的ipv6.
正确方法?dualstack.
答案1
事实证明我太聪明了。尽管 CanonicalHostedZoneName 中的输出不包含ipv6.
或dualstack.
,在这种情况下,你实际上并不需要它。通过 AWS 文献中没有详细记录的一些魔法,记录集可以了解别名是在 A 上下文中还是 AAAA 上下文中,并相应地执行正确的操作。完整的工作记录集组是:
"TestRecordSetGroup": {
"Type": "AWS::Route53::RecordSetGroup",
"Properties": {
"HostedZoneName": "example.com.",
"RecordSets": [
{
"Name": "subdomain.example.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneNameID"]},
"DNSName": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneName"]}
}
},
{
"Name": "subdomain.example.com.",
"Type": "AAAA",
"AliasTarget": {
"HostedZoneId": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneNameID"]},
"DNSName": {"Fn::GetAtt": ["TestELB", "CanonicalHostedZoneName"]}
}
}
]
}
}