Route 53 템플릿 코드 조각 - AWS CloudFormation

Route 53 템플릿 코드 조각

호스팅 영역 이름 또는 ID를 사용하는 Amazon Route 53 리소스 레코드 세트

Amazon Route 53 리소스 레코드 세트 생성 시 이러한 레코드 세트를 추가할 호스팅 영역을 지정해야 합니다. CloudFormation은 호스팅 영역을 지정하는 두 가지 방법을 제공합니다.

  • HostedZoneId 속성을 사용하여 호스팅 영역을 명시적으로 지정할 수 있습니다.

  • HostedZoneName 속성을 사용하여 CloudFormation에서 호스팅 영역을 찾도록 할 수 있습니다. HostedZoneName 속성을 사용하며 이름이 동일한 여러 호스팅 영역이 있는 경우 CloudFormation은 스택을 생성하지 않습니다.

HostedZoneId를 사용하여 RecordSet 추가

이 예제는 HostedZoneId 속성을 사용하여 호스팅 영역을 지정하는 도메인 이름 mysite.example.com에 대한 SPF 레코드가 들어 있는 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를 사용하여 RecordSet 추가

이 예제에서는 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 개발자 안내서가중치 기반 라우팅을 참조하세요.

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(애플리케이션 또는 네트워크) 로드 밸런서로 트래픽을 라우팅하는 example.com이라는 별칭 리소스 레코드 세트를 설정합니다. AliasTarget 속성은 GetAtt 내장 함수를 사용하여 myELB LoadBalancer의 호스팅 영역 ID와 DNS 이름을 지정합니다. GetAtt는 트래픽을 버전 1 또는 버전 2 중에서 어떤 로드 밸런서로 라우팅하는지에 따라 myELB 리소스의 다른 속성을 검색합니다.

  • 버전 1 로드 밸런서: CanonicalHostedZoneNameIDDNSName

  • 버전 2 로드 밸런서: CanonicalHostedZoneIDDNSName

별칭 리소스 레코드 세트에 대한 자세한 내용을 알아보려면 Route 53 개발자 안내서별칭 및 비별칭 레코드 선택을 참조하세요.

버전 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 배포에 매핑하는 별칭 A 레코드를 생성합니다. myHostedZoneID는 동일한 템플릿의 실제 AWS::Route53::HostedZone 리소스 또는 파라미터에 대한 참조로 간주됩니다. myCloudFrontDistribution는 동일한 템플릿 내의 AWS::CloudFront::Distribution 리소스를 참조합니다. 별칭 레코드는 표준 CloudFront 호스팅 영역 ID(Z2FDTNDATAQYW2)를 사용하며, Fn::GetAtt를 사용하여 배포의 도메인 이름을 자동으로 확인합니다. 이 설정을 사용하면 IP 주소 없이 웹 트래픽을 사용자 지정 도메인에서 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" ] }, "EvaluateTargetHealth": false } } ] } } }

YAML

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