使用 CloudFormation,我无法获取与 ELB 配合使用的 AAAA 记录

使用 CloudFormation,我无法获取与 ELB 配合使用的 AAAA 记录

我有以下两个 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"]}
        }
      }
    ]
  }
}

相关内容