

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# DNS 레코드를 Amazon Route 53 프라이빗 호스팅 영역으로 대량 마이그레이션합니다.
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## 요약
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

네트워크 엔지니어와 클라우드 관리자는 Amazon Route 53의 프라이빗 호스팅 영역에 도메인 이름 시스템(DNS) 레코드를 추가할 수 있는 효율적이고 간단한 방법이 필요합니다. 수동 접근 방식을 사용하여 Microsoft Excel 워크시트의 항목을 Route 53 콘솔의 적절한 위치로 복사하는 것은 번거롭고 오류가 발생하기 쉽습니다. 이 패턴은 여러 레코드를 추가하는 데 필요한 시간과 노력을 줄이는 자동화된 접근 방식을 설명합니다. 또한 여러 호스팅 영역을 생성할 수 있는 반복 가능한 일련의 단계를 제공합니다.

이 패턴은 Amazon Simple Storage Service(Amazon S3)를 사용하여 레코드를 저장합니다. 데이터를 효율적으로 처리하기 위해 패턴은 단순하고 Python 사전 (`dict` 데이터 유형) 을 지원하는 기능 때문에 JSON 형식을 사용합니다.

**참고**  
시스템에서 영역 파일을 생성할 수 있다면 [Route 53 가져오기](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) 기능을 대신 사용해 보십시오.

## 사전 조건 및 제한 사항
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**사전 조건 **
+ 프라이빗 호스팅 영역 레코드가 포함된 Excel 워크시트
+ A 레코드, NAPTR (이름 기관 포인터) 레코드, SRV 레코드와 같은 다양한 유형의 DNS 레코드에 대한 지식 ([지원되는 DNS 레코드 유형](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html) 참조)
+ Python 언어 및 해당 라이브러리에 대한 지식

**제한 사항 **
+ 이 패턴은 모든 사용 사례 시나리오에 대한 광범위한 범위를 제공하지는 않습니다. 예를 들어 [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) 호출은 API의 사용 가능한 모든 속성을 사용하지 않습니다.
+ Excel 워크시트에서는 각 행의 값이 고유한 것으로 간주됩니다. 각 FQDN(Fulalified Domain Name)에 대한 여러 값이 동일한 행에 표시될 것으로 예상됩니다. 그렇지 않은 경우 이 패턴에 제공된 코드를 수정하여 필요한 연결을 수행해야 합니다.
+ 이 패턴은 Python용 AWS SDK(Boto3)를 사용하여 Route 53 서비스를 직접 호출합니다. `create_stack` 및 `update_stack` 명령에 AWS CloudFormation 래퍼를 사용하도록 코드를 개선하고 JSON 값을 사용하여 템플릿 리소스를 채울 수 있습니다.

## 아키텍처
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**기술 스택**
+ 트래픽 라우팅을 위한 Route 53 프라이빗 호스팅 영역
+ 출력 JSON 파일을 저장하기 위한 Amazon S3

![\[Route 53 프라이빗 호스팅 영역으로 DNS 레코드를 대량으로 마이그레이션하기 위한 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


워크플로는 이전 다이어그램에 나와 있고 *에픽* 섹션에서 설명한 대로 다음 단계로 구성됩니다.

1. 레코드 세트 정보가 있는 Excel 워크시트를 S3 버킷에 업로드합니다.

1. Excel 데이터를 JSON 형식으로 변환하는 Python 스크립트를 만들고 실행합니다.

1. S3 버킷에서 레코드를 읽고 데이터를 정리합니다.

1. 프라이빗 호스팅 영역에서 레코드 세트를 생성합니다.

## 도구
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) — Amazon Route 53은 도메인 등록, DNS 라우팅 및 상태 확인을 처리하는 가용성과 확장성이 뛰어난 DNS 웹 서비스입니다.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)-Amazon Simple Storage Service(S3)는 객체 스토리지 서비스입니다. Amazon S3를 사용하면 인터넷을 통해 언제 어디서든 원하는 양의 데이터를 저장하고 검색할 수 있습니다.

## 에픽
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### 자동화를 위한 데이터 준비
<a name="prepare-data-for-automation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기록을 위한 Excel 파일을 만드세요. | 현재 시스템에서 내보낸 레코드를 사용하여 FQDN (정규화된 도메인 이름), 레코드 유형, TTL (TTL), 값 등 레코드에 필요한 열이 있는 Excel 워크시트를 만드십시오. NAPTR 및 SRV 레코드의 경우 값은 여러 속성의 조합이므로 Excel의 `concat` 방법을 사용하여 이러한 속성을 결합하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | 데이터 엔지니어, 엑셀 스킬 | 
| 작업 환경을 확인하세요. | IDE에서 Python 파일을 생성하여 엑셀 입력 워크시트를 JSON 형식으로 변환합니다. (IDE 대신 Amazon SageMaker 노트북을 사용하여 Python 코드로 작업할 수도 있습니다.)사용 중인 Python 버전이 버전 3.7 이상인지 확인하십시오.<pre> python3 --version</pre>**pandas** 패키지를 설치합니다.<pre> pip3 install pandas --user</pre> | 일반 AWS | 
| 엑셀 워크시트 데이터를 JSON으로 변환합니다. | Excel에서 JSON으로 변환하는 다음 코드가 포함된 Python 파일을 생성합니다.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>여기서 `Book1`은(는) Excel 워크시트의 이름이고 `my.json`은(는) 출력 JSON 파일의 이름입니다. | 데이터 엔지니어, Python 스킬 | 
| 이 JSON 파일을 S3 버킷에 업로드합니다. | `my.json` 파일을 S3 버킷에 업로드합니다. 자세한 내용은 Amazon S3 설명서의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요. | 앱 개발자 | 
| FQDNName | RecordType | 값 | TTL | 
| something.example.org | A | 1.1.1.1 | 900 | 

### 레코드 삽입
<a name="insert-records"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프라이빗 호스팅 영역을 생성합니다. | [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) API와 다음 Python 샘플 코드를 사용하여 프라이빗 호스팅 영역을 생성합니다. 파라미터 `hostedZoneName`, `vpcRegion` 및 `vpcId`를 사용자의 값으로 바꿉니다.<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>또한 AWS CloudFormation과 같은 코드형 인프라(IaC) 도구를 사용하여 이러한 단계를 적절한 리소스 및 속성이 포함된 스택을 생성하는 템플릿으로 대체할 수 있습니다. | 클라우드 아키텍트, 네트워크 관리자, Python 스킬 | 
| Amazon S3에서 세부 정보를 사전으로 검색합니다. | 다음 코드를 사용하여 S3 버킷에서 읽고 JSON 값을 Python 사전으로 가져옵니다. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>`json_content`은(는) Python 사전이 들어 있습니다. | 앱 개발자, Python 기술 | 
| 공백 및 유니코드 문자의 데이터 값을 정리합니다. | 데이터의 정확성을 보장하기 위한 안전 조치로 다음 코드를 사용하여 `json_content`의 값에 대해 제거 작업을 수행하십시오. 이 코드는 각 문자열의 앞과 끝에 있는 공백 문자를 제거합니다. 또한 `replace` 메서드를 사용하여 고정된 (끊어지지 않는) 공백 (`\xa0` 문자) 을 제거합니다.<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | 앱 개발자, Python 기술 | 
| 레코드를 삽입합니다. | 이전 `for` 루프의 일부로 다음 코드를 사용합니다.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>이 에픽의 첫 번째 단계에 있는 호스팅 영역 `xxxxxxx` ID는 어디에 있습니까? | 앱 개발자, Python 기술 | 

## 관련 리소스
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**참조**
+ [영역 파일을 가져와서 레코드 생성](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (Amazon Route 53 설명서)
+ [create\$1hosted\$1zone 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (Boto3 설명서)
+ [변경\$1리소스\$1레코드\$1세트 메서드](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) (Boto3 설명서)

**자습서 및 동영상**
+ [파이썬 튜토리얼](https://docs.python.org/3/tutorial/) (파이썬 문서)
+ [Amazon Route 53을 사용한 DNS 설계](https://www.youtube.com/watch?v=2y_RBjDkRgY) (유튜브 동영상, *AWS 온라인 테크 토크*)