

# Route 53 템플릿 코드 조각
<a name="quickref-route53"></a>

**Topics**
+ [호스팅 영역 이름 또는 ID를 사용하는 Amazon Route 53 리소스 레코드 세트](#scenario-route53-recordset-by-host)
+ [RecordSetGroup을 사용하여 가중치 기반 리소스 레코드 세트 설정](#scenario-recordsetgroup-weighted)
+ [RecordSetGroup을 사용하여 별칭 리소스 레코드 세트 설정](#scenario-recordsetgroup-zoneapex)
+ [CloudFront 배포에 대한 별칭 리소스 레코드 세트](#scenario-user-friendly-url-for-cloudfront-distribution)

## 호스팅 영역 이름 또는 ID를 사용하는 Amazon Route 53 리소스 레코드 세트
<a name="scenario-route53-recordset-by-host"></a>

Amazon Route 53 리소스 레코드 세트 생성 시 이러한 레코드 세트를 추가할 호스팅 영역을 지정해야 합니다. CloudFormation은 호스팅 영역을 지정하는 두 가지 방법을 제공합니다.
+ `HostedZoneId` 속성을 사용하여 호스팅 영역을 명시적으로 지정할 수 있습니다.
+ `HostedZoneName` 속성을 사용하여 CloudFormation에서 호스팅 영역을 찾도록 할 수 있습니다. `HostedZoneName` 속성을 사용하며 이름이 동일한 여러 호스팅 영역이 있는 경우 CloudFormation은 스택을 생성하지 않습니다.

### HostedZoneId를 사용하여 RecordSet 추가
<a name="scenario-recordset-using-id"></a>

이 예제는 `HostedZoneId` 속성을 사용하여 호스팅 영역을 지정하는 도메인 이름 `mysite.example.com`에 대한 `SPF` 레코드가 들어 있는 Amazon Route 53 리소스 레코드 세트를 추가합니다.

#### JSON
<a name="quickref-route53-example-1.json"></a>

```
 1. "myDNSRecord" : {
 2.   "Type" : "AWS::Route53::RecordSet",
 3.   "Properties" : 
 4.   {
 5.     "HostedZoneId" : "Z3DG6IL3SJCGPX",
 6.     "Name" : "mysite.example.com.",
 7.     "Type" : "SPF",
 8.     "TTL" : "900",
 9.     "ResourceRecords" : [ "\"v=spf1 ip4:192.168.0.1/16 -all\"" ]
10.   }
11. }
```

#### YAML
<a name="quickref-route53-example-1.yaml"></a>

```
1. myDNSRecord:
2.   Type: AWS::Route53::RecordSet
3.   Properties:
4.     HostedZoneId: Z3DG6IL3SJCGPX
5.     Name: mysite.example.com.
6.     Type: SPF
7.     TTL: '900'
8.     ResourceRecords:
9.     - '"v=spf1 ip4:192.168.0.1/16 -all"'
```

### HostedZoneName를 사용하여 RecordSet 추가
<a name="scenario-recordset-using-name"></a>

이 예제에서는 `HostedZoneName` 속성을 사용하여 호스팅 영역을 지정하는 도메인 이름 "mysite.example.com"에 대한 Amazon Route 53 리소스 레코드 세트를 추가합니다.

#### JSON
<a name="quickref-route53-example-2.json"></a>

```
 1. "myDNSRecord2" : {
 2.             "Type" : "AWS::Route53::RecordSet",
 3.             "Properties" : {
 4.                 "HostedZoneName" : "example.com.",
 5.                 "Name" : "mysite.example.com.",
 6.                 "Type" : "A",
 7.                 "TTL" : "900",
 8.                 "ResourceRecords" : [
 9.                     "192.168.0.1",
10.                     "192.168.0.2"
11.                 ]
12.             }
13.         }
```

#### YAML
<a name="quickref-route53-example-2.yaml"></a>

```
 1. myDNSRecord2:
 2.   Type: AWS::Route53::RecordSet
 3.   Properties:
 4.     HostedZoneName: example.com.
 5.     Name: mysite.example.com.
 6.     Type: A
 7.     TTL: '900'
 8.     ResourceRecords:
 9.     - 192.168.0.1
10.     - 192.168.0.2
```

## RecordSetGroup을 사용하여 가중치 기반 리소스 레코드 세트 설정
<a name="scenario-recordsetgroup-weighted"></a>

이 예제에서는 [AWS::Route53::RecordSetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-route53-recordsetgroup.html)을 사용하여 '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 개발자 안내서*의 [가중치 기반 라우팅](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-weighted.html)을 참조하세요.

### JSON
<a name="quickref-route53-example-3.json"></a>

```
 1.         "myDNSOne" : {
 2.             "Type" : "AWS::Route53::RecordSetGroup",
 3.             "Properties" : {
 4.                 "HostedZoneName" : "example.com.",
 5.                 "Comment" : "Weighted RR for my frontends.",
 6.                 "RecordSets" : [
 7.                   {
 8.                     "Name" : "mysite.example.com.",
 9.                     "Type" : "CNAME",
10.                     "TTL" : "900",
11.                     "SetIdentifier" : "Frontend One",
12.                     "Weight" : "140",
13.                     "ResourceRecords" : ["example-ec2.amazonaws.com"]
14.                   },
15.                   {
16.                     "Name" : "mysite.example.com.",
17.                     "Type" : "CNAME",
18.                     "TTL" : "900",
19.                     "SetIdentifier" : "Frontend Two",
20.                     "Weight" : "60",
21.                     "ResourceRecords" : ["example-ec2-larger.amazonaws.com"]
22.                   }
23.                   ]
24.             }
25.         }
```

### YAML
<a name="quickref-route53-example-3.yaml"></a>

```
 1. myDNSOne:
 2.   Type: AWS::Route53::RecordSetGroup
 3.   Properties:
 4.     HostedZoneName: example.com.
 5.     Comment: Weighted RR for my frontends.
 6.     RecordSets:
 7.     - Name: mysite.example.com.
 8.       Type: CNAME
 9.       TTL: '900'
10.       SetIdentifier: Frontend One
11.       Weight: '140'
12.       ResourceRecords:
13.       - example-ec2.amazonaws.com
14.     - Name: mysite.example.com.
15.       Type: CNAME
16.       TTL: '900'
17.       SetIdentifier: Frontend Two
18.       Weight: '60'
19.       ResourceRecords:
20.       - example-ec2-larger.amazonaws.com
```

## RecordSetGroup을 사용하여 별칭 리소스 레코드 세트 설정
<a name="scenario-recordsetgroup-zoneapex"></a>

다음 예제에서는 [AWS::Route53::RecordSetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-route53-recordsetgroup.html)을 사용하여 ELB 버전 1(Classic) 로드 밸런서 및 버전 2(애플리케이션 또는 네트워크) 로드 밸런서로 트래픽을 라우팅하는 `example.com`이라는 별칭 리소스 레코드 세트를 설정합니다. [AliasTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-route53-recordset-aliastarget.html) 속성은 `GetAtt` 내장 함수를 사용하여 `myELB` `LoadBalancer`의 호스팅 영역 ID와 DNS 이름을 지정합니다. `GetAtt`는 트래픽을 버전 1 또는 버전 2 중에서 어떤 로드 밸런서로 라우팅하는지에 따라 `myELB` 리소스의 다른 속성을 검색합니다.
+ 버전 1 로드 밸런서: `CanonicalHostedZoneNameID` 및 `DNSName`
+ 버전 2 로드 밸런서: `CanonicalHostedZoneID` 및 `DNSName`

별칭 리소스 레코드 세트에 대한 자세한 내용을 알아보려면 *Route 53 개발자 안내서*의 [별칭 및 비별칭 레코드 선택](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html)을 참조하세요.

### 버전 1 로드 밸런서용 JSON
<a name="quickref-route53-example-4.json"></a>

```
 1.       "myELB" : {
 2.         "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
 3.         "Properties" : {
 4.             "AvailabilityZones" : [ "us-east-1a" ],
 5.             "Listeners" : [ {
 6.                 "LoadBalancerPort" : "80",
 7.                 "InstancePort" : "80",
 8.                 "Protocol" : "HTTP"
 9.             } ]
10.         }
11.       },
12.       "myDNS" : {
13.         "Type" : "AWS::Route53::RecordSetGroup",
14.         "Properties" : {
15.           "HostedZoneName" : "example.com.",
16.           "Comment" : "Zone apex alias targeted to myELB LoadBalancer.",
17.           "RecordSets" : [
18.             {
19.               "Name" : "example.com.",
20.               "Type" : "A",
21.               "AliasTarget" : {
22.                   "HostedZoneId" : { "Fn::GetAtt" : ["myELB", "CanonicalHostedZoneNameID"] },
23.                   "DNSName" : { "Fn::GetAtt" : ["myELB","DNSName"] }
24.               }
25.             }
26.           ]
27.         }
28.     }
```

### 버전 1 로드 밸런서용 YAML
<a name="quickref-route53-example-4.yaml"></a>

```
 1. myELB:
 2.   Type: AWS::ElasticLoadBalancing::LoadBalancer
 3.   Properties:
 4.     AvailabilityZones:
 5.     - "us-east-1a"
 6.     Listeners:
 7.     - LoadBalancerPort: '80'
 8.       InstancePort: '80'
 9.       Protocol: HTTP
10. myDNS:
11.   Type: AWS::Route53::RecordSetGroup
12.   Properties:
13.     HostedZoneName: example.com.
14.     Comment: Zone apex alias targeted to myELB LoadBalancer.
15.     RecordSets:
16.     - Name: example.com.
17.       Type: A
18.       AliasTarget:
19.         HostedZoneId: !GetAtt 'myELB.CanonicalHostedZoneNameID'
20.         DNSName: !GetAtt 'myELB.DNSName'
```

### 버전 2 로드 밸런서용 JSON
<a name="quickref-route53-example-4-v2.json"></a>

```
 1.       "myELB" : {
 2.         "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
 3.         "Properties" : {
 4.             "Subnets" : [ 
 5.                 {"Ref": "SubnetAZ1"}, 
 6.                 {"Ref" : "SubnetAZ2"}
 7.             ]
 8.         }
 9.       },
10.       "myDNS" : {
11.         "Type" : "AWS::Route53::RecordSetGroup",
12.         "Properties" : {
13.           "HostedZoneName" : "example.com.",
14.           "Comment" : "Zone apex alias targeted to myELB LoadBalancer.",
15.           "RecordSets" : [
16.             {
17.               "Name" : "example.com.",
18.               "Type" : "A",
19.               "AliasTarget" : {
20.                   "HostedZoneId" : { "Fn::GetAtt" : ["myELB", "CanonicalHostedZoneID"] },
21.                   "DNSName" : { "Fn::GetAtt" : ["myELB","DNSName"] }
22.               }
23.             }
24.           ]
25.         }
26.     }
```

### 버전 2 로드 밸런서용 YAML
<a name="quickref-route53-example-4-v2.yaml"></a>

```
 1. myELB:
 2.   Type: AWS::ElasticLoadBalancingV2::LoadBalancer
 3.   Properties:
 4.     Subnets:
 5.     - Ref: SubnetAZ1
 6.     - Ref: SubnetAZ2
 7. myDNS:
 8.   Type: AWS::Route53::RecordSetGroup
 9.   Properties:
10.     HostedZoneName: example.com.
11.     Comment: Zone apex alias targeted to myELB LoadBalancer.
12.     RecordSets:
13.     - Name: example.com.
14.       Type: A
15.       AliasTarget:
16.         HostedZoneId: !GetAtt 'myELB.CanonicalHostedZoneID'
17.         DNSName: !GetAtt 'myELB.DNSName'
```

## CloudFront 배포에 대한 별칭 리소스 레코드 세트
<a name="scenario-user-friendly-url-for-cloudfront-distribution"></a>

다음 예에서는 사용자 지정 도메인 이름을 기존 CloudFront 배포에 매핑하는 별칭 A 레코드를 생성합니다. `myHostedZoneID`는 동일한 템플릿의 실제 `AWS::Route53::HostedZone` 리소스 또는 파라미터에 대한 참조로 간주됩니다. `myCloudFrontDistribution`는 동일한 템플릿 내의 `AWS::CloudFront::Distribution` 리소스를 참조합니다. 별칭 레코드는 표준 CloudFront 호스팅 영역 ID(`Z2FDTNDATAQYW2`)를 사용하며, `Fn::GetAtt`를 사용하여 배포의 도메인 이름을 자동으로 확인합니다. 이 설정을 사용하면 IP 주소 없이 웹 트래픽을 사용자 지정 도메인에서 CloudFront 배포로 라우팅할 수 있습니다.

**참고**  
별칭 리소스 레코드 세트를 생성할 때 `Z2FDTNDATAQYW2` 속성을 `HostedZoneId`로 지정해야 합니다. 프라이빗 영역에서는 CloudFront에 대한 별칭 리소스 레코드 세트를 생성할 수 없습니다.

### JSON
<a name="quickref-route53-example-5.json"></a>

```
 1. {
 2.     "myDNS": {
 3.         "Type": "AWS::Route53::RecordSetGroup",
 4.         "Properties": {
 5.             "HostedZoneId": {
 6.                 "Ref": "myHostedZoneID"
 7.             },
 8.             "RecordSets": [
 9.                 {
10.                     "Name": {
11.                         "Ref": "myRecordSetDomainName"
12.                     },
13.                     "Type": "A",
14.                     "AliasTarget": {
15.                         "HostedZoneId": "Z2FDTNDATAQYW2",
16.                         "DNSName": {
17.                             "Fn::GetAtt": [
18.                                 "myCloudFrontDistribution",
19.                                 "DomainName"
20.                             ]
21.                         },
22.                         "EvaluateTargetHealth": false
23.                     }
24.                 }
25.             ]
26.         }
27.     }
28. }
```

### YAML
<a name="quickref-route53-example-5.yaml"></a>

```
 1. myDNS:
 2.   Type: AWS::Route53::RecordSetGroup
 3.   Properties:
 4.     HostedZoneId: !Ref myHostedZoneID
 5.     RecordSets:
 6.       - Name: !Ref myRecordSetDomainName
 7.         Type: A
 8.         AliasTarget:
 9.           HostedZoneId: Z2FDTNDATAQYW2
10.           DNSName: !GetAtt 
11.             - myCloudFrontDistribution
12.             - DomainName
13.           EvaluateTargetHealth: false
```