Route 53: エイリアスレコードを AWS CLI で登録する
概要
エイリアスレコードを登録するには各サービスの DNS 名だけでなく hosted zone の ID が必要になります。
以下は AWS CLI で必要な情報を取得して登録する方法です。
バッチ
CloudFront
HOSTED_ZONE_ID=(Route53 の Zone ID)
RECORD_NAME=(レコード名)
TARGET_DOMAIN_NAME=(CloudFront の DNS 名)
# CloudFront の Zone ID は固定
TARGET_HOSTED_ZONE_ID=Z2FDTNDATAQYW2
aws route53 change-resource-record-sets \
--hosted-zone-id "${HOSTED_ZONE_ID}" \
--change-batch "{
\"Changes\": [
{
\"Action\": \"UPSERT\",
\"ResourceRecordSet\": {
\"Name\": \"${RECORD_NAME}\",
\"Type\": \"A\",
\"AliasTarget\": {
\"HostedZoneId\": \"${TARGET_HOSTED_ZONE_ID}\",
\"DNSName\": \"${TARGET_DOMAIN_NAME}\",
\"EvaluateTargetHealth\": true
}
}
}
]
}"
ALB
HOSTED_ZONE_ID=(Route53 の Zone ID)
RECORD_NAME=(レコード名)
TARGET_DOMAIN_NAME=(ALB の DNS 名)
# 指定したドメイン名が設定された ALB を探す
TARGET_HOSTED_ZONE_ID=$(aws elbv2 describe-load-balancers | jq -r ".LoadBalancers[] | select(.DNSName == \"${TARGET_DOMAIN_NAME}\") | .CanonicalHostedZoneId")
aws route53 change-resource-record-sets \
--hosted-zone-id "${HOSTED_ZONE_ID}" \
--change-batch "{
\"Changes\": [
{
\"Action\": \"UPSERT\",
\"ResourceRecordSet\": {
\"Name\": \"${RECORD_NAME}\",
\"Type\": \"A\",
\"AliasTarget\": {
\"HostedZoneId\": \"${TARGET_HOSTED_ZONE_ID}\",
\"DNSName\": \"${TARGET_DOMAIN_NAME}\",
\"EvaluateTargetHealth\": true
}
}
}
]
}"
API Gateway
HOSTED_ZONE_ID=(Route53 の Zone ID)
RECORD_NAME=(レコード名)
# 指定したドメイン名が設定された API Gateway を探す
APIGW_DOMAIN_NAME_INFO=$(aws apigateway get-domain-name --domain-name "${RECORD_NAME}")
TARGET_DOMAIN_NAME=$(echo "${APIGW_DOMAIN_NAME_INFO}" | jq -r ".regionalDomainName")
TARGET_HOSTED_ZONE_ID=$(echo "${APIGW_DOMAIN_NAME_INFO}" | jq -r ".regionalHostedZoneId")
aws route53 change-resource-record-sets \
--hosted-zone-id "${HOSTED_ZONE_ID}" \
--change-batch "{
\"Changes\": [
{
\"Action\": \"UPSERT\",
\"ResourceRecordSet\": {
\"Name\": \"${RECORD_NAME}\",
\"Type\": \"A\",
\"AliasTarget\": {
\"HostedZoneId\": \"${TARGET_HOSTED_ZONE_ID}\",
\"DNSName\": \"${TARGET_DOMAIN_NAME}\",
\"EvaluateTargetHealth\": true
}
}
}
]
}"