Closed10

AWS アカウント間でドメイン移管する

janusweljanuswel

大きく分けて 2 段階

  1. ドメイン移管
    1. 移管元アカウントで移管リクエストを作成する
    2. 移管先アカウントで移管リクエストを受諾する
  2. ネームサーバー移行
    1. 移管元アカウントの NS レコードの TTL を短くする
    2. 移管先アカウントでホストゾーンを作る
    3. 移管元アカウントからレコードをエクスポートする
    4. 移管先アカウントにレコードをインポートする
    5. 移管先アカウントのドメインにネームサーバーを登録する
    6. 移行できたか確かめる
    7. 移管元アカウントのホストゾーンを削除する
janusweljanuswel

移管元アカウントで移管リクエストを作成する

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-transfer-between-aws-accounts.html

DOMAIN_NAME="your.domain.name"
DESTINATION_ACCOUNT_ID="000000000000"

aws route53domains \
  transfer-domain-to-another-aws-account \
  --region us-east-1 \
  --domain-name ${DOMAIN_NAME} \
  --account-id ${DESTINATION_ACCOUNT_ID}

DOMAIN_NAME には移管したいドメイン名を、 DESTINATION_ACCOUNT_ID には移管先アカウントの ID を設定する
Route53 自体はリージョン関係ないのだが、 CLI で設定するときには --region us-east-1 が必要みたい

プロファイル指定など必要であれば --profile オプションで指定する
以降、プロファイルはすべて必要なときに指定する

結果として JSON が返ってくるので Password は控えておく

{
    "OperationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "Password": "yyyyyyyyyyyyyy"
}
janusweljanuswel

移管先アカウントで移管リクエストを受諾する

https://docs.aws.amazon.com/cli/latest/reference/route53domains/accept-domain-transfer-from-another-aws-account.html

DOMAIN_NAME="your.domain.name"

aws route53domains \
  accept-domain-transfer-from-another-aws-account \
  --region us-east-1 \
  --domain-name ${DOMAIN_NAME} \
  --password "yyyyyyyyyyyyyy"

--password には移管リクエスト作成時に出力されたパスワードを指定する

成功すると OperationId プロパティのみの JSON が返ってくる

これでドメイン移管はおわり

janusweljanuswel

移管先アカウントにレコードをインポートする

https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html

移行元アカウントからエクスポートしたレコードをインポート可能な形に変形する

cat records.old.json \
  | jq '.ResourceRecordSets[] | select(.Type | test("(NS|SOA)") | not)' \
  | jq -s 'map({Action: "CREATE", ResourceRecordSet:.}) | {Comment: "importing DNS records", Changes: .}' \
  > commands.json

で、こう

NEW_HOSTED_ZONE_ID="XXXXXXXXXXXXXXXXXXXX"

aws route53 \
  change-resource-record-sets \
  --hosted-zone-id ${NEW_HOSTED_ZONE_ID} \
  --change-batch file://commands.json
janusweljanuswel

移行できたか確かめる

dig your.domain.name NS

移管先アカウントのネームサーバーが出てきたら OK

このスクラップは2024/05/15にクローズされました