Назад | Перейти на главную страницу

Используя CloudFormation, я не могу получить запись AAAA для работы с ELB

У меня есть два следующих ресурса 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"]}
        }
      }
    ]
  }
}