【CloudFormation】Route53のパブリックホストゾーンをデプロイしてみる
1. はじめに
こんにちわ、Mitsuoです。
今回はCloudFormationを用いてRoute53のホストゾーンをデプロイしてみました。
Route53とは、フルマネージドなDNSサーバサービスです。利用者がBINDなどを構築せずともAWSのサービスとして名前解決の仕組みを導入する事が出来ます。
事前にドメインを取得する事が前提にはなりますが、Route53を利用するにあたり、最初にホストゾーンと言うレコード情報を登録するリソースを作成します。ホストゾーンの作成後、そのホストゾーン上に自動でSOAレコードとNSレコードが生成され、他のレコードを登録することが出来ます。
ですので、レコードセットを登録しないと実用が出来ないのですが、レコードセットはCLIで行うケースも多いと思っており、ホストゾーン単体のテンプレートがあっても良いかなと思い記事にします。
決して面倒になって後回しにした訳では無いですよ?
また、今回はパブリック用ホストゾーンの作成になります。
なお、テンプレートに関連して一部の機能の説明はありますが、Route53の概要に関しては解説していないため、公式ドキュメントや他の技術ブログを参照してください。
参考:What is Amazon Route 53?
参考:AWS再入門ブログリレー Amazon Route 53編
クラスメソッドさんの再入門ブログリレーにも書かれていますが、Route53に関しては、AWSサービスの理解よりDNS自体の理解が求められると思っています。どのように名前解決されるのか、レコードの種別に関する知識は、最低限理解する事をお勧めします。
個人的には以下のブログが非常に分かりやすいと思いました。
参考:【初心者向け】無料ドメインを使ってAmazon Route 53で実装しながら理解するDNS
また、EC2にBINDをインストールして動かしてみるのも、Route53がどれだけマネージドに名前解決の仕組みを提供しているかが分かるので、時間がある方は調べてみてください。
3. 作成したリソース
テンプレートで作成するリソースは以下の通りです。
- Route53 パブリックホストゾーン
4 テンプレート情報
作成したテンプレートになります。
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy a Route53 HostedZone.
# ------------------------------------------------------------#
# Caution:
# This template is for deploying Route53 HostedZone.
# If your domain is registered with a registrar other than Route 53,
# you must update the name servers with your registrar to make Route 53 the DNS service for the domain.
# For more information, see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/MigratingDNS.html
# ------------------------------------------------------------#
# Metadata:
# This can privide details about the template.
# For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html.
# As Metadata Keys, AWS::CloudFormation::Interface can Defines the grouping and ordering of input parameters
# when they are displayed in the AWS CloudFormation console.
# For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-interface.html.
# ------------------------------------------------------------#
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
-
Parameters:
- SystemName
- EnvType
- Tagprefix
- Owner
- DomainName
ParameterLabels:
SystemName:
default: "Type the Systemname"
EnvType:
default: "Select the environment in which you deploy resources"
Tagprefix:
default: "Type the Tagprefix which is logical unit name about this stack(e.g. Webserver,Monitoring,Logging)"
Owner:
default: "Type who owns these resources (e.g. project name or worker, whether this purpose is just verification or not)"
DomainName:
default: "Type the name of domain, which Specify a fully qualified domain name, for example, www.example.com. The trailing dot is optional"
# ------------------------------------------------------------#
# Parameters
# This Can enable templates to input custom values each time you create or update a stack.
# For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html.
# ------------------------------------------------------------#
Parameters:
SystemName:
Type: String
EnvType:
Type: String
Default: "dev"
AllowedValues:
- dev
- prod
Tagprefix:
Type: String
Owner:
Type: String
DomainName:
Type: String
Default: "www.example.com"
AllowedPattern: "(?!-)[a-zA-Z0-9-.]{1,63}(?<!-)"
ConstraintDescription: "Must be a valid the name of domain."
# ------------------------------------------------------------#
# Resources
# This can declare the AWS resources that you want to include in the stack.
# For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html.
# ------------------------------------------------------------#
Resources:
# ------------------------------------------------------------#
# Create Route53 Hosted Zone
# This Matadata and Parameters are not used by Hosted zone but HostedZoneTags,
# ------------------------------------------------------------#
HostedZone1:
Type: "AWS::Route53::HostedZone"
Properties:
HostedZoneConfig:
Comment: "Enter any comments you would like to make"
Name: !Sub "${DomainName}"
HostedZoneTags:
- Key: "Name"
Value: !Sub "${SystemName}-${EnvType}-${Tagprefix}-HostedZone"
- Key: 'Owner'
Value: !Sub "Owner"
5 補足情報
テンプレートに関して、以下の通り補足します。
5.1 Metadata/Parameters
メタデータおよびパラメターセクションで、以下の値を定義します。
項目 | 備考 |
---|---|
SystemName |
プロジェクト名や利用目的等を入力する |
EnvType |
デプロイする環境を選択する 検証、ステージング、本番の3点 |
Tagprefix |
任意で入力するPrefix値 |
Owner |
作業者、所有者、コスト管理用に入力する |
5.2 想定ユースケース
今回のテンプレートは、次の様なユースケースを想定して作成しました。
- ドメイン名を取得済みの人がホストゾーン作成を自動化したい
- リソースレコードは手動またはCLIなどで対応する予定の方
- DNSクエリログ設定は行わない
- パブリック用ホストゾーン
- プライマリ用ホストゾーンは
AWS::Route53::HostedZone
で作成する事が出来る - プロパティ
VPC
の有無によって、パブリックかプライベートホストゾーンかをテンプレートは判断する
- プライマリ用ホストゾーンは
テンプレートに関しては、公式ドキュメントを参照ください。
AWS::Route53::HostedZone
AWS::Route53::HostedZone VPC
AWS::Route53::HostedZone QueryLoggingConfig
書いてて思ってますが、こんなピンポイントでいるのか?とは思っています。
とりあえず、今後リソースレコード用のテンプレートは書くので静観いただけると。
5.3 動作確認
実際に動作を確認してみます。
上記のテンプレートを用いてホストゾーンを作成します。
スタック名:Route53HostedZone
項目 | 備考 |
---|---|
SystemName |
mitsuopj |
EnvType |
dev |
Tagprefix |
image |
Owner |
routetraffic |
DomainName |
取得したドメイン名 |
Route53、またはドメインレジストラで取得したドメイン名を入力してください。
ドメイン名はFQDNで入力が必要です。
ルートドメイン(ドメイン名の末尾にあるドット)の入力はAWS側が補完してくれるので、どちらでも大丈夫です。
つまりwww.example.com
とwww.example.com.
は同一としてみなされます。
ではスタックを作成します。
パラメータ値の情報でもドメイン名が確認が出来ます。
ドメイン名を黒塗りにしていますが、www.example.com
に読み替えて見て頂ければ思います。
ホストゾーンが作成されたことを確認します。
ホストゾーンの中にデフォルトでSOAレコードとNSレコードが作成されていますね。
政治家の報告文書の様になっています。
5.4 留意事項
留意事項は以下の通りです。
- ドメインレジストラ、例えばお名前.comなどでドメイン登録を行った場合、ホストゾーン内のNSレコードの値をレジストラ側に設定する必要がある
- お名前.comで登録したドメインの管理方法についてクラスメソッドさんの記事がありました、ご参考まで
お名前.comで取得したドメインをRoute53のネームサーバで管理設定してみた
公式ドキュメントもよければ参考ください。
Making Amazon Route 53 the DNS service for an existing domain
- 余談になりますが、ドメイン名の参照に!Ref関数を使う事が出来なかったので、!Sub関数を使うようにしている
5.5 まとめ
今回はホストゾーンを作成してみました。次回以降の記事でレコードセットを含めた内容に出来ればと思います。
テンプレートは自己責任でご自由にお使いください。
このブログが誰かの役に立てばと思います。Mituoでした!!
5.6 参考資料
What is Amazon Route 53?
AWS再入門ブログリレー Amazon Route 53編
【初心者向け】無料ドメインを使ってAmazon Route 53で実装しながら理解するDNS
AWS::Route53::HostedZone
AWS::Route53::HostedZone VPC
AWS::Route53::HostedZone QueryLoggingConfig
お名前.comで取得したドメインをRoute53のネームサーバで管理設定してみた
Making Amazon Route 53 the DNS service for an existing domain
Discussion