Ipv6

使用 CloudFormation,我無法獲得用於 ELB 的 AAAA 記錄

  • December 10, 2015

我有以下兩個 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"]}]]}
       }
     }
   ]
 }
}

堆棧更新後,我看到我的區域中列出的兩條記錄都帶有預期的別名值。經 dig 驗證,A 記錄有效:

$ 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.到 ELB 的 DNS 名稱的開頭有關。如果我更改 A 記錄,使其使用 Fn:Join 附加dualstack.到 DNS 名稱之前,它也會以同樣的方式失敗。

Fn::Join 是否以正確的方式添加ipv6.或添加dualstack.到 DNS 名稱的開頭?

原來我太聰明了。即使 CanonicalHostedZoneName 中的輸出不包含ipv6.or 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"]}
       }
     }
   ]
 }
}

引用自:https://serverfault.com/questions/742018