既存のAWSアカウント(aws-1)で既にドメインの登録を行っている場合、もう一つ(例えば開発環境)のAWSアカウント(aws-2)でも同一のドメインからサブドメインを切りたい場合の手順です。
今回の手順は以下のような環境を想定していますが、適宜読み替えて下さい。
対象アカウントのプロファイルを作成
アカウントをまたいで作業が入るので、それおぞれのアカウントのプロファイルを定義します。
同一の端末から実行することを想定しているので、複数のプロファイルを定義していますが、同一の端末からする必要性はありません。
aws configure --profile aws-1
# AWS Access Key ID [None]: AK****************5Q
# AWS Secret Access Key [None]: cV************************************hh
# Default region name [None]: ap-northeast-1
# Default output format [None]:
aws configure --profile aws-2
# AWS Access Key ID [None]: AK****************2Q
# AWS Secret Access Key [None]: s6************************************Bg
# Default region name [None]: ap-northeast-1
# Default output format [None]:
aws-2にホストゾーン作成
作成するホストゾーンは dev.example.com
ROOT_DOMAIN=example.com
SUB_DOMAIN=dev.${ROOT_DOMAIN}
aws route53 create-hosted-zone \
--name ${SUB_DOMAIN} \
--caller-reference `date +%Y%m%d%H%M%S` \
--profile aws-2
作成したホストゾーンIDを取得します
HOSTED_ZONE_ID=$(aws route53 list-hosted-zones \
--query "HostedZones[?Name==\`${SUB_DOMAIN}.\`].Id" \
--output text \
--profile aws-2)
echo ${HOSTED_ZONE_ID}
#
ホストゾーンIDから作成したホストゾーンのNSレコードを取得します
これは次にルートドメインのホストゾーンにNSレコードを登録するためです
NS_RECORDS=($(aws route53 list-resource-record-sets \
--hosted-zone-id ${HOSTED_ZONE_ID} \
--query "ResourceRecordSets[?Type==\`NS\`].ResourceRecords[].Value" \
--output text \
--profile aws-2))
echo ${NS_RECORDS}
#
aws-1に、aws-2で作成したホストゾーンのNSレコードと同じ値のNSレコードを作成
レコード作成の前にルートドメインのホストゾーンIDを取得します
ROOT_HOSTED_ZONE_ID=$(aws route53 list-hosted-zones \
--query "HostedZones[?Name==\`${ROOT_DOMAIN}.\`].Id" \
--output text \
--profile aws-1)
echo ${ROOT_HOSTED_ZONE_ID}
#
ルードドメインのホストゾーンにNSレコードを作成します
作成するNSレコードの値は、aws-2側で作成したホストゾーンのNSレコードと同じ値を登録します
cat << EOT > change-resource-record-sets-aws-1.json
{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "${SUB_DOMAIN}",
"Type": "NS",
"TTL": 300,
"ResourceRecords": [
{ "Value": "${NS_RECORDS[0]}" },
{ "Value": "${NS_RECORDS[1]}" },
{ "Value": "${NS_RECORDS[2]}" },
{ "Value": "${NS_RECORDS[3]}" }
]
}
}]
}
EOT
aws route53 change-resource-record-sets \
--hosted-zone-id ${ROOT_HOSTED_ZONE_ID} \
--change-batch file://change-resource-record-sets-aws-1.json \
--profile aws-1
aws-2にAレコード(例:4.4.4.4)を登録
最後にaws-2側にAレコードを作成します
今回はEC2インスタンスのパブリックIPアドレスを直接指定するよな記述ですが、AliasでALBを指定するなど、もちろん可能ですので、読み替えて下さい
cat << EOT > change-resource-record-sets-aws-2.json
{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "app.${SUB_DOMAIN}",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{ "Value": "4.4.4.4" }
]
}
}]
}
EOT
aws route53 change-resource-record-sets \
--hosted-zone-id ${HOSTED_ZONE_ID} \
--change-batch file://change-resource-record-sets-aws-2.json \
--profile aws-2