기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
DNS 레코드를 Amazon Route 53 프라이빗 호스팅 영역으로 대량 마이그레이션합니다.
Ram Kandaswamy, Amazon Web Services
요약
이 패턴은 DNS 레코드를 Amazon Route 53 호스팅 영역으로 대량 마이그레이션하는 작업을 자동화합니다. Python용 AWS SDK(Boto3)와 함께 Python 스크립트를 사용하여 Amazon Simple Storage Service(Amazon S3)에 저장된 JSON 파일에서 레코드 데이터를 읽고 Route 53 API를 사용하여 프로그래밍 방식으로 레코드를 생성합니다.
소스 시스템이 표준 BIND 영역 파일을 내보내는 경우 Route 53 네이티브 가져오기 기능 또는 cli53
콘솔을 통해 각 레코드를 수동으로 생성하지 않고 기존 시스템의 많은 DNS 레코드를 Route 53 호스팅 영역으로 마이그레이션해야 하는 경우이 패턴을 사용합니다.
사전 조건 및 제한 사항
사전 조건
활성 상태의 AWS 계정
정규화된 도메인 이름(FQDN), 레코드 유형, TTL(Time to Live) 및 값에 대한 열이 있는 호스팅 영역 레코드가 포함된 Excel 워크시트
Python 3.12 이상(Python 다운로드
참조) pandas Python 라이브러리 설치됨(
pip3 install pandas)A, NAPTR 및 SRV 레코드와 같은 DNS 레코드 유형에 대한 지식(지원되는 DNS 레코드 유형 참조)
Python 언어 및 해당 라이브러리에 대한 지식
제한 사항
이 패턴은
change_resource_record_setsAPI 호출에서 사용 가능한 모든 속성을 사용하지 않습니다. 사용 사례에 따라 코드를 확장합니다.Excel 워크시트에서는 각 행의 값이 고유한 것으로 간주됩니다. 각 FQDN에 대해 여러 값이 동일한 행에 나타날 것으로 예상됩니다. 그렇지 않은 경우 동일한 FQDN에 대해 여러 값을 연결하도록 코드를 수정합니다.
이 패턴은 Boto3를 사용하여 Route 53 API를 직접 호출합니다. Boto3
create_stack및update_stack명령에 AWS CloudFormation 래퍼를 사용하도록 코드를 개선하고 JSON 값을 사용하여 템플릿 리소스를 채울 수 있습니다.소스 시스템이 BIND 영역 파일 형식으로 레코드를 내보낼 수 있는 경우 Route 53 가져오기 기능을 대신 사용하는 것이 좋습니다.
일부 AWS 서비스는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 리전별 서비스를
참조하세요. 구체적인 엔드포인트는 서비스 엔드포인트 및 할당량 페이지를 참조하고 서비스 링크를 선택합니다.
아키텍처

사용자는 DNS 레코드 데이터가 포함된 Excel 워크시트를 Amazon S3 버킷에 업로드합니다.
로컬에서(또는 Kiro와 같은 IDE에서) 실행되는 Python 스크립트는 Boto3를 사용하여 Amazon S3 버킷에서 JSON 파일을 읽습니다.
스크립트는 레코드를 처리하고 Route 53
change_resource_record_setsAPI 작업을 호출하여 호스팅 영역에 레코드를 생성합니다.
도구
서비스
기타 도구
Kiro - Python 마이그레이션 스크립트를 개발하고 실행하는 데 사용되는 에이전트 AI 기능이 있는 IDE입니다. 자세한 내용은 Kiro
를 참조하세요. pandas - Excel 워크시트를 JSON 형식으로 변환하는 데 사용되는 Python 데이터 분석 라이브러리입니다.
모범 사례
모든 레코드에 대해 스크립트를 실행하기 전에 5~10개의 레코드로 구성된 작은 하위 집합으로 테스트하여 데이터 형식을 확인하고 레코드 생성을 수정합니다.
대신
UPSERT작업을 사용합니다CREATE.UPSERT작업이 없는 경우 레코드를 생성하고 없는 경우 레코드를 업데이트합니다. 이렇게 하면 스크립트가 멱등성이 있고 안전하게 다시 실행할 수 있습니다.변경 사항을 일괄 처리하여
ChangeResourceRecordSets요청 한도 내에서 유지합니다.UPSERT작업을 사용하면 각ResourceRecord요소가 최대 1,000개 요소에 두 번 포함됩니다.삽입 전에 데이터를 검증합니다. FQDNs 마침표(
.)로 끝나는지, TTL 값이 양의 정수인지, 레코드 유형이 지원되는 DNS 레코드 유형과 일치하는지 확인합니다.대량으로 변경하기 전에 기존 레코드를 백업
합니다. 를 사용하여 롤백 지점을 list_resource_record_sets제공하여 현재 호스팅 영역 레코드를 내보냅니다.지수 백오프가 있는 재시도 로직을 구현하여 Route 53 API 속도 제한을 처리합니다. 자세한 내용은 오류 재시도 및 지수 백오프를 AWS 참조하세요.
최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여하세요. 자세한 내용은 AWS Identity and Access Management (IAM) 설명서의 최소 권한 부여 및 보안 모범 사례를 참조하세요.
에픽
| 작업 | 설명 | 필요한 기술 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
기록을 위한 Excel 파일을 만드세요. |
행 예제:
| 데이터 엔지니어 | ||||||||
엑셀 워크시트 데이터를 JSON으로 변환합니다. |
| 데이터 엔지니어, Python 개발자 | ||||||||
Amazon S3 버킷에 JSON 파일을 업로드합니다. |
| 앱 개발자 |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
호스팅 영역 생성. |
와 같은 코드형 인프라(IaC) 도구를 사용하여 이러한 단계를 적절한 리소스 및 속성을 사용하여 스택을 생성하는 템플릿으로 AWS CloudFormation 바꿀 수도 있습니다. 자세한 내용은 CloudFormation 설명서의 AWS Route 53::HostedZone을 참조하세요. | 클라우드 아키텍트, 네트워크 관리자, Python 스킬 |
Amazon S3에서 JSON 데이터를 읽습니다. |
| 앱 개발자, Python 개발자 |
데이터 값을 정리하고 레코드를 삽입합니다. |
| 앱 개발자, Python 기술 |
문제 해결
| 문제 | Solution |
|---|---|
|
|
| 이 오류는 |
조절 오류(속도 제한 초과) | 초당 5개의 API 요청을 초과했습니다. 지터를 사용하여 지수 백오프를 구현합니다. 자세한 내용은 오류 재시도 및 지수 백오프를 AWS 참조하세요. |
레코드가 해결되지 않음 | VPC가 호스팅 영역과 연결되어 있고 VPC에서 DNS 확인이 활성화되어 있는지 확인합니다. |
| 데이터에는 중단되지 않는 공백( |
관련 리소스
참조
영역 파일을 가져와 레코드 생성(Route 53 설명서)
create_hosted_zone
(Boto3 설명서) change_resource_record_sets
(Boto3 설명서) 지원되는 DNS 레코드 유형( Route 53 설명서)
자습서 및 동영상
Amazon Route 53을 사용한 DNS 설계
추가 정보
NAPTR 및 SRV 레코드의 경우 Excel 워크시트의 Value 필드에는 단일 문자열로 연결된 모든 필수 구성 요소가 포함되어야 합니다. JSON으로 내보내기 전에 Excel의 CONCAT 함수를 사용하여 개별 속성(주문, 기본 설정, 플래그, 서비스, regexp, NAPTR 대체, 우선 순위, 가중치, 포트, SRV 대상)을 결합합니다.
마이그레이션에 1,000개 이상의 레코드가 포함된 경우 JSON 파일을 배치로 분할하고 각 배치를 개별적으로 처리하여 Route 53 API 제한 내에서 유지합니다. UPSERT 작업을 사용할 때 각 ResourceRecord 요소는 ChangeResourceRecordSets 요청당 최대 1,000개의 요소 수에 두 번 포함됩니다.
첨부
이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.