目次
CloudFormation で Route53 のホストゾーンを作成して EIP と ELB の DNS 名をレコードに追加する
こんにちは、SRE課の栩野です。
CloudFormation で Route53 を作成する機会があったので
ホストゾーンを作成しつつ、EIP と ELB の DNS 名をレコードに登録する方法についてネタにします。
事前準備
今回は Route53 のテンプレート作成がメインなので、他のテンプレート作成については触れません。
とりあえずの事前準備として、EC2 と ELB のスタックを作成する際に
EIP と DNS 名をアウトプットしておく必要があるので以下の通りに Outputs の設定が必要です。
Outputs:
# EIPをアウトプット
ElasticIP:
# Type: "AWS::EC2::EIP" のリソースをアウトプット
Value: !Ref ElasticIP
# Route53 側で呼び出すために名前をつけてExport
Export:
Name: elasticip
# ELBのDNSNameをアウトプット
ALBDNSName:
# Type: AWS::ElasticLoadBalancingV2::LoadBalancer のリソースから
# DNSNameをアウトプット
Value: !GetAtt ALB.DNSName
Export:
Name: alb-dnsname
# ELBのCanonicalHostedZoneIDをアウトプット
ALBHostedZoneID:
# Type: AWS::ElasticLoadBalancingV2::LoadBalancer のリソースから
# CanonicalHostedZoneIDをアウトプット
Value: !GetAtt ALB.CanonicalHostedZoneID
Export:
Name: alb-hostzoneid
Route53 のテンプレート作成
EIP と ELB の DNS 名がアウトプット出来ていれば
以下のテンプレートを使って、Route53 のホストゾーンとレコードを作成することが出来ます。
テンプレートでは、apex(サブドメインなし)の A レコードに直接 EIP を設定して
www の A レコードに ELB の DNS 名を設定する形で作成してます。
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
# とりあえずはスタック作成時にパラメータでドメイン名入力する
HostedZoneName:
Description: domain name.
Type: String
Resources:
# ホストゾーンの作成
Route53HostedZone:
Type: AWS::Route53::HostedZone
Properties:
# ここにはパラメータで入力したドメイン名が入る
Name: !Sub "${HostedZoneName}"
# レコードの作成
route53RSGroup:
Type: AWS::Route53::RecordSetGroup
Properties:
# 上記で作成したホストゾーンを指定
HostedZoneId: !Ref Route53HostedZone
# ここからレコードの作成部分 (Aレコードを二つ作成する)
RecordSets:
# apex(サブドメインなし)の設定
- Name: !Sub "${HostedZoneName}."
# 事前準備でアウトプットしたEIPをImportValueで呼び出して設定
ResourceRecords:
- !ImportValue elasticip
# TypeはAレコード
Type: A
# とりあえずTTL300にする
TTL: 300
# wwwの設定
- Name: !Sub "www.${HostedZoneName}."
# ELBのドメイン名を設定するときはAliasTargetを使う
AliasTarget:
# 事前準備でアウトプットしたCanonicalHostedZoneIDを設定
HostedZoneId: !ImportValue alb-hostzoneid
# 事前準備でアウトプットしたDNSNameを設定
DNSName: !ImportValue alb-dnsname
Type: A
このテンプレートからスタックを作成すると...
こんな感じで Route53 にホストゾーンが作成され
apex に EIP、www に ELB の DNS 名が設定されました!
次回はこの延長で、CloudFormation で ACM の証明書を取得して
ELB に適用する方法をネタにしてみようと思います。
以上、最後までありがとうございました。
参考
aws::route53::hostedzone (AWS ドキュメント)
aws::route53::recordsetgroup (AWS ドキュメント)
運用サービス課 課長
運用・監視の設計から導入まで、運用サービスを担当してます。
運用監視やセキュリティ関連の話題に興味があるので、そのあたりのブログを多めで投稿していきたいと思ってます。
LINK
クラウドベリージャム:プロフィールページ