AWS 라우트53, 다른 계정으로 호스팅 영역 DNS 레코드 이전하기
들어가며: 라우트53 도메인(Domain)과 호스팅 영역(Hosted Zone)
이전 글에서는 AWS 라우트53에 등록된 도메인을 다른 계정으로 마이그레이션해보았습니다. 라우트53에서는 도메인 뿐만아니라, 도메인에 연결된 DNS를 관리하는 호스팅 영역(Hosted Zone)이 별도로 존재합니다. 도메인과 호스팅 영역을 함께 관리하는 경우 도메인을 이전하더라도 호스팅 영역은 자동으로 이전되지 않습니다. 따라서 호스팅 영역도 이전하고자 하는 경우 별도의 작업이 필요합니다.
라우트53 호스팅 영역을 이전하는 방법에 대해서는 공식 문서에 자세히 설명되어 있습니다.
하지만 막상 문서를 보면 이해하기 어려운 부분들이 있어서 직접 호스팅 영역을 옮겨보면서, 다른 AWS 계정으로 호스팅 영역을 옮기는 방법을 핵심만 소개해보고자 합니다(단, 이 글에서 다루는 마이그레이션 사례는 레코드가 적은 비교적 단순한 경우입니다. 대규모 마이그레이션 작업이 필요한 경우 문서를 꼭 숙지하시고 마이그레이션 작업을 진행하시기 바랍니다).
호스팅 영역 마이그레이션 과정 3단계
이번에도 5555555566 계정에 등록된 44bits.tv
의 호스팅 영역을 66666666677 계정으로 이전한다고 가정해보겠습니다. 이미 도메인은 이전 글에서 이전하였으므로 호스팅 영역만 이전하면 됩니다. 안타깝게도 기존 데이터를 자동적으로 마이그레이션하는 기능은 제공되지 않습니다. AWS 공식 문서에서 소개하는 호스팅 영역 마이그레이션 방법을 간략히 정리해보면 다음과 같습니다.
- 스텝1: 기존 호스팅 영역에 등록된 데이터를 추출하고 마이그레이션 가능하도록 수정
- 스텝2: 새로운 호스팅 영역 생성 및 편집한 DNS 레코드 등록
- 스텝3: 라우트53 도메인에 새로운 네임서버 등록
그럼 간단한 한 단계 씩 진행해보겠습니다.
스텝 1: 기존 호스팅 영역에 등록된 데이터를 추출하고 마이그레이션 가능하도록 수정
먼저 기존에 5555555566 계정에 속한 호스팅 영역의 데이터를 list-resource-record-sets
로 추출하고, json
형식으로 저장합니다. <HOSTED_ZONE_ID>
에는 마이그레이션하고자 하는 호스팅 영역의 ID를 지정합니다.
$ aws route53 list-resource-record-sets --hosted-zone-id <HOSTED_ZONE_ID> > output-old.json
output-old.json
파일의 내용은 대략적으로 다음과 같습니다.
{
"ResourceRecordSets": [
{
"Name": "44bits.tv.",
"Type": "A",
...
},
{
"Name": "44bits.tv.",
"Type": "NS",
...
},
{
"Name": "44bits.tv.",
"Type": "SOA",
...
},
{
"Name": "_a3db5a54bbc7f56fe4563b12c423e3e2f.44bits.tv.",
"Type": "CNAME",
...
},
{
"Name": "www.44bits.tv.",
"Type": "A",
...
},
{
"Name": "_ba5a989238eadfe4563b12c42ebbe4.www.44bits.tv.",
"Type": "CNAME",
...
}
]
}
기존 호스팅 영역에는 6개의 레코드가 등록되어있는 것을 과인할 수 있습니다. 레코드들은 각각 A 레코드 2개, CNAME 레코드 2개, SOA 레코드 하나, NS 레코드 하나입니다.
그럼 마이그레이션 작업을 위해 바로 편집 들어갑니다. 나중에 비교를 위해 기존 파일을 남겨둡니다.
$ cp output-old.json create-records.json
마이그레이션할 내용은 create-records.json
을 편집해서 준비합니다. 파일의 두 번째 줄의 ResourceRecordSets
를 Changes
로 변경해줍니다. 그리고 Type
이 SOA
혹은 NS
인 레코드를 삭제합니다. 이제 A 레코드 2개와 CNAME 레코드 2개만 남았습니다.
{
"Changes": [
{
"Name": "44bits.tv.",
"Type": "A",
...
},
{
"Name": "_a3db5a54bbc7f56fe4563b12c423e3e2f.44bits.tv.",
"Type": "CNAME",
...
},
{
"Name": "www.44bits.tv.",
"Type": "A",
...
},
{
"Name": "_ba5a989238eadfe4563b12c42ebbe4.www.44bits.tv.",
"Type": "CNAME",
...
}
]
}
다음으로 Changes
배열의 각 레코드의 내용을 다음 형태로 감싸줍니다.
{
"Action": "CREATE",
"ResourceRecordSet": {
<RECORD>
}
}
마이그레이션을 위한 최종적인 결과물은 다음과 같습니다. 뒤에서 살펴보겠지만, 이 내용을 마이그레이션에 사용합니다.
{
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "44bits.tv.",
"Type": "A",
...
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "www.44bits.tv.",
"Type": "A",
...
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "_a3db5a54bbc7f56fe4563b12c423e3e2f.44bits.tv.",
"Type": "CNAME",
...
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "_ba5a989238eadfe4563b12c42ebbe4.www.44bits.tv.",
"Type": "CNAME"
...
}
}
]
}
스텝2: 새로운 호스팅 영역 생성 및 편집한 DNS 레코드 등록
이제 66666666677 계정에서 작업할 차례입니다. 먼저 라우트53의 호스팅 영역 메뉴에서 44bits.tv
호스팅 영역을 새로 만듭니다. Type
은 Public Hosted Zone
을 선택하고 Create
를 클릭합니다. 이전 계정에 호스팅 영역이 있더라도 충돌은 일어나지 않습니다.

새로 만든 호스팅 영역의 ID를 기록해둡니다. 이제 앞서 수정한 파일로 마이그레이션을 진행할 차례입니다. change-resource-record-sets
명령어로 기존 레코드를 마이그레이션합니다. --hosted-zone-id
에는 새로 만든 호스팅 영역 아이디를 지정해줍니다. --change-batch
에는 앞서 수정한 마이그레이션 파일 create-records.json
을 지정합니다.
$ aws route53 change-resource-record-sets --hosted-zone-id <NEW_HOSTED_ZONE_ID> --change-batch file://create-records.json
{
"ChangeInfo": {
"Id": "/change/C0873240R8EB5K6D1ZCR",
"Status": "PENDING",
"SubmittedAt": "2020-06-29T16:52:07.828000+00:00"
}
}
생성 후 Status
가 PENDING
으로 나오지만 레코드 개수가 많지 않으면 금방 완료됩니다. 다른 에러가 발생되지 않았다면 마이그레이션은 이걸로 끝입니다!
이제 마이그레이션이 잘 되었는지 기존 레코드와 새로운 레코드를 비교해볼 차례입니다. list-resource-record-sets
명령어로 새로운 호스팅 영역의 레코드들을 저장하고, 기존 output-old.json
의 내용과 비교해봅니다.
$ aws route53 list-resource-record-sets --hosted-zone-id <NEW_HOSTED_ZONE_ID> > output-new.json
# diff로 기존 레코드와 새로운 레코드를 비교해봅니다.
$ diff output-old.json output-new.json
출력 결과에 NS 레코드와 SOA 레코드 차이만 나오면 정상적으로 마이그레이션에 성공한 것입니다.
스텝3: 라우트53 도메인에 새로운 네임서버 등록
하지만 아직 새로운 호스팅 영역이 도메인에 연결되어있지는 않습니다. 새로운 호스팅 영역을 사용하려면 호스팅 영역에 속한 네임서버를 도메인에 등록해주어야합니다.
네임서버 레코드는 호스팅 영역과 함께 자동적으로 생성됩니다. NS 레코드의 도메인 4개를 복사해둡니다. 이제 등록된 도메인(Registered domains) 메뉴에서 도메인 상세 정보 페이지로 이동합니다. 네임서버 아래에 있는 Add or Edit name serverls
를 클릭하면 네임 서버 변경을 위한 팝업이 나타납니다.

여기에 새로운 호스팅 영역의 네임서버 정보를 입력하고 저장합니다. 네임 서버 변경까지는 조금 시간이 걸립니다. 네임 서버 변경 결과는 다음 명령어로 확인해볼 수 있습니다.
$ dig @8.8.8.8 +short NS 44bits.tv
변경된 네임서버 주소가 나타나면, 마이그레이션 성공입니다.