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 로드 밸런서:
CanonicalHostedZoneNameID
및DNSName
버전 2 로드 밸런서:
CanonicalHostedZoneID
및DNSName
별칭 리소스 레코드 세트에 대한 자세한 내용을 알아보려면 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