コンテンツにスキップ

Route 53: エイリアスレコードを AWS CLI で登録する

概要

エイリアスレコードを登録するには各サービスの DNS 名だけでなく hosted zone の ID が必要になります。

以下は AWS CLI で必要な情報を取得して登録する方法です。

バッチ

ALB

RECORD_NAME=(レコード名)
TARGET_DOMAIN_NAME=(ALB の DNS 名)

ZONE_DOMAIN_NAME=$(echo "${RECORD_NAME}" | sed -E "s|^[^\.]+\.||")
HOSTED_ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name "${ZONE_DOMAIN_NAME}" --output text --query "HostedZones[0].Id" | awk -F/ "{print \$3}")
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

RECORD_NAME=(レコード名)

ZONE_DOMAIN_NAME=$(echo "${RECORD_NAME}" | sed -E "s|^[^\.]+\.||")
HOSTED_ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name "${ZONE_DOMAIN_NAME}" --output text --query "HostedZones[0].Id" | awk -F/ "{print \$3}")
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
            }
          }
        }
      ]
    }"