Route 53 テンプレートスニペット - AWS CloudFormation

Route 53 テンプレートスニペット

ホストゾーンの名前または ID を使用した Amazon Route 53 リソースレコードセット

Amazon Route 53 リソースレコードセットを作成する際は、その追加先となるホストゾーンを指定する必要があります。CloudFormation では、2 つの方法でホストゾーンを指定できます。

  • HostedZoneId プロパティを使用して、ホストゾーンを明示的に指定できます。

  • HostedZoneName プロパティを使用して、CloudFormation にホストゾーンを検索させることができます。HostedZoneName プロパティを使用して同じ名前のホストゾーンが複数見つかった場合、CloudFormation はスタックを作成しません。

HostedZoneId を使用したリソースレコードセットの追加

この例では、ドメイン名が SPFmysite.example.com レコードを保存し、HostedZoneId プロパティを使用してホストゾーンを指定する、Amazon Route 53 リソースレコードセットを追加しています。

JSON

"myDNSRecord" : { "Type" : "AWS::Route53::RecordSet", "Properties" : { "HostedZoneId" : "Z3DG6IL3SJCGPX", "Name" : "mysite.example.com.", "Type" : "SPF", "TTL" : "900", "ResourceRecords" : [ "\"v=spf1 ip4:192.168.0.1/16 -all\"" ] } }

YAML

myDNSRecord: Type: AWS::Route53::RecordSet Properties: HostedZoneId: Z3DG6IL3SJCGPX Name: mysite.example.com. Type: SPF TTL: '900' ResourceRecords: - '"v=spf1 ip4:192.168.0.1/16 -all"'

HostedZoneName を使用したリソースレコードセットの追加

この例では、HostedZoneName プロパティを使用してホストゾーンを指定するドメイン名「mysite.example.com」の Amazon Route 53 リソースレコードセットを追加します。

JSON

"myDNSRecord2" : { "Type" : "AWS::Route53::RecordSet", "Properties" : { "HostedZoneName" : "example.com.", "Name" : "mysite.example.com.", "Type" : "A", "TTL" : "900", "ResourceRecords" : [ "192.168.0.1", "192.168.0.2" ] } }

YAML

myDNSRecord2: Type: AWS::Route53::RecordSet Properties: HostedZoneName: example.com. Name: mysite.example.com. Type: A TTL: '900' ResourceRecords: - 192.168.0.1 - 192.168.0.2

RecordSetGroup を使用した加重リソースレコードセットの設定

この例では、AWS::Route53::RecordSetGroup を使用して、「example.com」の 2 つの CNAME レコードを設定します。ホストゾーン RecordSets プロパティは、"mysite.example.com" という DNS 名の CNAME レコードセットを保持します。各レコードセットには、識別子 (SetIdentifier) と重み (Weight) が含まれます。リソースにルーティングされるインターネットトラフィックの割合は、次の計算に基づきます。

  • Frontend One: 140/(140+60) = 140/200 = 70%

  • Frontend Two: 60/(140+60) = 60/200 = 30%

加重リソースレコードセットの詳細については、「Amazon Route 53 デベロッパーガイド」の「Weighted routing」(加重ルーティング) を参照してください。

JSON

"myDNSOne" : { "Type" : "AWS::Route53::RecordSetGroup", "Properties" : { "HostedZoneName" : "example.com.", "Comment" : "Weighted RR for my frontends.", "RecordSets" : [ { "Name" : "mysite.example.com.", "Type" : "CNAME", "TTL" : "900", "SetIdentifier" : "Frontend One", "Weight" : "140", "ResourceRecords" : ["example-ec2.amazonaws.com"] }, { "Name" : "mysite.example.com.", "Type" : "CNAME", "TTL" : "900", "SetIdentifier" : "Frontend Two", "Weight" : "60", "ResourceRecords" : ["example-ec2-larger.amazonaws.com"] } ] } }

YAML

myDNSOne: Type: AWS::Route53::RecordSetGroup Properties: HostedZoneName: example.com. Comment: Weighted RR for my frontends. RecordSets: - Name: mysite.example.com. Type: CNAME TTL: '900' SetIdentifier: Frontend One Weight: '140' ResourceRecords: - example-ec2.amazonaws.com - Name: mysite.example.com. Type: CNAME TTL: '900' SetIdentifier: Frontend Two Weight: '60' ResourceRecords: - example-ec2-larger.amazonaws.com

RecordSetGroup を使用したエイリアスリソースレコードセットの設定

次の例では、AWS::Route53::RecordSetGroup を使用して、ELB バージョン 1 (Classic) ロードバランサーとバージョン 2 (Application または Network) lロードバランサーにトラフィックをルーティングする example.com という名前のエイリアスリソースレコードセットを設定します。AliasTarget プロパティは、GetAtt 組み込み関数を使用して、myELB LoadBalancer のホストゾーン ID と DNS 名を指定します。GetAtt は、トラフィックをバージョン 1 かバージョン 2 のどちらのロードバランサーにルーティングするかに応じて、myELB リソースのさまざまなプロパティを取得します。

  • バージョン 1 ロードバランサー: CanonicalHostedZoneNameID および DNSName

  • バージョン 2 ロードバランサー: CanonicalHostedZoneID および DNSName

エイリアスリソースレコードセットの詳細については、「Route 53 デベロッパーガイド」の「Choosing between alias and non-alias records」(エイリアスレコードと非エイリアスレコードの選択) を参照してください。

バージョン 1 ロードバランサーの JSON

"myELB" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "AvailabilityZones" : [ "us-east-1a" ], "Listeners" : [ { "LoadBalancerPort" : "80", "InstancePort" : "80", "Protocol" : "HTTP" } ] } }, "myDNS" : { "Type" : "AWS::Route53::RecordSetGroup", "Properties" : { "HostedZoneName" : "example.com.", "Comment" : "Zone apex alias targeted to myELB LoadBalancer.", "RecordSets" : [ { "Name" : "example.com.", "Type" : "A", "AliasTarget" : { "HostedZoneId" : { "Fn::GetAtt" : ["myELB", "CanonicalHostedZoneNameID"] }, "DNSName" : { "Fn::GetAtt" : ["myELB","DNSName"] } } } ] } }

バージョン 1 ロードバランサーの YAML

myELB: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AvailabilityZones: - "us-east-1a" Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP myDNS: Type: AWS::Route53::RecordSetGroup Properties: HostedZoneName: example.com. Comment: Zone apex alias targeted to myELB LoadBalancer. RecordSets: - Name: example.com. Type: A AliasTarget: HostedZoneId: !GetAtt 'myELB.CanonicalHostedZoneNameID' DNSName: !GetAtt 'myELB.DNSName'

バージョン 2 ロードバランサーの JSON

"myELB" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "Subnets" : [ {"Ref": "SubnetAZ1"}, {"Ref" : "SubnetAZ2"} ] } }, "myDNS" : { "Type" : "AWS::Route53::RecordSetGroup", "Properties" : { "HostedZoneName" : "example.com.", "Comment" : "Zone apex alias targeted to myELB LoadBalancer.", "RecordSets" : [ { "Name" : "example.com.", "Type" : "A", "AliasTarget" : { "HostedZoneId" : { "Fn::GetAtt" : ["myELB", "CanonicalHostedZoneID"] }, "DNSName" : { "Fn::GetAtt" : ["myELB","DNSName"] } } } ] } }

バージョン 2 ロードバランサーの YAML

myELB: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Subnets: - Ref: SubnetAZ1 - Ref: SubnetAZ2 myDNS: Type: AWS::Route53::RecordSetGroup Properties: HostedZoneName: example.com. Comment: Zone apex alias targeted to myELB LoadBalancer. RecordSets: - Name: example.com. Type: A AliasTarget: HostedZoneId: !GetAtt 'myELB.CanonicalHostedZoneID' DNSName: !GetAtt 'myELB.DNSName'

CloudFront ディストリビューションのエイリアスリソースレコードセット

以下の例では、指定された CloudFront ディストリビューションにクエリをルーティングするエイリアスレコードセットを作成します。

注記

エイリアスリソースレコードセットを作成するときは、以下の例に示すように Z2FDTNDATAQYW2 プロパティに HostedZoneId を指定する必要があります。CloudFront 用のエイリアスリソースレコードセットは、プライベートホストゾーンでは作成できません。

JSON

{ "myDNS": { "Type": "AWS::Route53::RecordSetGroup", "Properties": { "HostedZoneId": { "Ref": "myHostedZoneID" }, "RecordSets": [ { "Name": { "Ref": "myRecordSetDomainName" }, "Type": "A", "AliasTarget": { "HostedZoneId": "Z2FDTNDATAQYW2", "DNSName": { "Fn::GetAtt": [ "myCloudFrontDistribution", "DomainName" ] } } } ] } } }

YAML

myDNS: Type: 'AWS::Route53::RecordSetGroup' Properties: HostedZoneId: !Ref myHostedZoneID RecordSets: - Name: !Ref myRecordSetDomainName Type: A AliasTarget: HostedZoneId: Z2FDTNDATAQYW2 DNSName: !GetAtt - myCloudFrontDistribution - DomainName