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

Route 53 템플릿 코드 조각

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

Amazon Route 53 리소스 레코드 세트 생성 시 이러한 레코드 세트를 추가할 호스팅 영역을 지정해야 합니다. AWS CloudFormation에서는 두 가지 방법으로 호스팅 영역을 지정할 수 있습니다.

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

  • HostedZoneName 속성을 사용하여 AWS CloudFormation에서 호스팅 영역을 찾도록 할 수 있습니다. HostedZoneName 속성을 사용하며 이름이 동일한 여러 호스팅 영역이 있는 경우 AWS 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 배포로 라우팅하는 별칭 레코드 세트를 생성합니다.

참고

별칭 리소스 레코드 세트를 생성할 때, 다음 예제처럼 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