У меня есть два следующих ресурса 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
...
Я думаю, это как-то связано с тем, что Fn :: Join используется для добавления ipv6.
в начало DNS-имени ELB. Если я изменю запись A, чтобы она использовала Fn: Join, чтобы добавить dualstack.
к имени DNS он также не работает таким же образом.
Fn :: Join - правильный способ добавления ipv6.
или dualstack.
в начало DNS-имени?
Оказывается, я был слишком умен. Несмотря на то, что вывод в 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"]}
}
}
]
}
}