はじめに
CloudFront で独自のドメイン名を使用するためには、必要な ACM の作成や DNS レコードの追加を行う必要があります。
これを AWS CLI で実行するスクリプトを作成します。
独自ドメインでアクセスするためには作成した証明書を CloudFront ディストリビューションに設定する必要があります。
こちらは、本スクリプトでは実施されないため、別途マネジメントコンソール等から実施する必要がある点にはご注意ください。
結論
以下スクリプトで ACM の作成や DNS レコードの作成を行うことができます。
TARGET_DOMAIN="hoge.com"
HOSTED_DOMAIN="fuga.hoge.com"
DISTRIBUTION_DOMAIN="abcdefghijklm.cloudfront.net"
export AWS_DEFAULT_REGION=us-east-1
aws acm request-certificate \
--domain-name ${TARGET_DOMAIN} \
--validation-method DNS
CERTIFICATE_ARN=$( \
aws acm list-certificates \
--query "CertificateSummaryList[?DomainName=='${TARGET_DOMAIN}'].CertificateArn" \
--output text ) \
&& echo ${CERTIFICATE_ARN}
VALIDATION_RECORD_NAME=$( \
aws acm describe-certificate \
--certificate-arn ${CERTIFICATE_ARN} \
--query "Certificate.DomainValidationOptions[0].ResourceRecord.Name" \
--output text) \
&& VALIDATION_RECORD_VALUE=$( \
aws acm describe-certificate \
--certificate-arn ${CERTIFICATE_ARN} \
--query "Certificate.DomainValidationOptions[0].ResourceRecord.Value" \
--output text) \
&& echo "
VALIDATION_RECORD_NAME = ${VALIDATION_RECORD_NAME}
VALIDATION_RECORD_VALUE = ${VALIDATION_RECORD_VALUE}"
HOSTED_ZONE_ID=$( \
aws route53 list-hosted-zones \
--query "HostedZones[?Name=='${HOSTED_DOMAIN}.'].Id" \
--output text) \
&& echo ${HOSTED_ZONE_ID}
aws route53 change-resource-record-sets \
--hosted-zone-id ${HOSTED_ZONE_ID} \
--change-batch \
"{
\"Changes\": [
{
\"Action\": \"CREATE\",
\"ResourceRecordSet\": {
\"Name\": \"${VALIDATION_RECORD_NAME}\",
\"Type\": \"CNAME\",
\"TTL\": 300,
\"ResourceRecords\": [{\"Value\": \"${VALIDATION_RECORD_VALUE}\"}]
}
}
]
}"
aws route53 change-resource-record-sets \
--hosted-zone-id ${HOSTED_ZONE_ID} \
--change-batch \
"{
\"Changes\": [
{
\"Action\": \"CREATE\",
\"ResourceRecordSet\": {
\"Name\": \"${HOSTED_DOMAIN}\",
\"Type\": \"A\",
\"AliasTarget\": {
\"HostedZoneId\": \"Z2FDTNDATAQYW2\",
\"DNSName\": \"${DISTRIBUTION_DOMAIN}\",
\"EvaluateTargetHealth\": false
}
}
}
]
}"
各コマンドの詳細
TARGET_DOMAIN
にはホストゾーンのドメイン名を指定します。HOSTED_DOMAIN
には証明書をリクエストするドメインを指定します。*.ドメイン名
としてサブドメインを指定することもできます。
CloudFront のため環境変数でAWS_DEFAULT_REGIO=us-east-1
を設定します。
TARGET_DOMAIN="hoge.com"
HOSTED_DOMAIN="fuga.hoge.com"
DISTRIBUTION_DOMAIN="abcdefghijklm.cloudfront.net"
export AWS_DEFAULT_REGION=us-east-1
ACM で証明書を作成する。
証明書のARNは後のコマンドで使用するため変数に入れておきます。
aws acm request-certificate \
--domain-name ${TARGET_DOMAIN} \
--validation-method DNS
CERTIFICATE_ARN=$( \
aws acm list-certificates \
--query "CertificateSummaryList[?DomainName=='${TARGET_DOMAIN}'].CertificateArn" \
--output text ) \
&& echo ${CERTIFICATE_ARN}
作成した ACM の証明書からレコード情報を取得し、Route 53 に登録します。
VALIDATION_RECORD_NAME=$( \
aws acm describe-certificate \
--certificate-arn ${CERTIFICATE_ARN} \
--query "Certificate.DomainValidationOptions[0].ResourceRecord.Name" \
--output text) \
&& VALIDATION_RECORD_VALUE=$( \
aws acm describe-certificate \
--certificate-arn ${CERTIFICATE_ARN} \
--query "Certificate.DomainValidationOptions[0].ResourceRecord.Value" \
--output text) \
&& echo "
VALIDATION_RECORD_NAME = ${VALIDATION_RECORD_NAME}
VALIDATION_RECORD_VALUE = ${VALIDATION_RECORD_VALUE}"
HOSTED_ZONE_ID=$( \
aws route53 list-hosted-zones \
--query "HostedZones[?Name=='${HOSTED_DOMAIN}.'].Id" \
--output text) \
&& echo ${HOSTED_ZONE_ID}
aws route53 change-resource-record-sets \
--hosted-zone-id ${HOSTED_ZONE_ID} \
--change-batch \
"{
\"Changes\": [
{
\"Action\": \"CREATE\",
\"ResourceRecordSet\": {
\"Name\": \"${VALIDATION_RECORD_NAME}\",
\"Type\": \"CNAME\",
\"TTL\": 300,
\"ResourceRecords\": [{\"Value\": \"${VALIDATION_RECORD_VALUE}\"}]
}
}
]
}"
エイリアスリソースレコードセットを作成します。
aws route53 change-resource-record-sets \
--hosted-zone-id ${HOSTED_ZONE_ID} \
--change-batch \
"{
\"Changes\": [
{
\"Action\": \"CREATE\",
\"ResourceRecordSet\": {
\"Name\": \"${HOSTED_DOMAIN}\",
\"Type\": \"A\",
\"AliasTarget\": {
\"HostedZoneId\": \"Z2FDTNDATAQYW2\",
\"DNSName\": \"${DISTRIBUTION_DOMAIN}\",
\"EvaluateTargetHealth\": false
}
}
}
]
}"
おわりに
本記事では CloudFront で独自のドメイン名を使用する際に必要な ACM の作成や DNS レコードの追加を行うスクリプトを作成しました。
この記事がどなたかの参考になれば幸いです。
コメント