皆様こんにちは。
今回はCloudFormationを利用して高可用性アーキテクトの構築をしていきます。
この記事ではCloudFormationよりRoute53の設定を行います。
このブログはCloudFormationによるRoute53の設定をする上での知識を記事としてまとめ再確認し、皆様と共有するため作成します。

1.高可用性アーキテクト構築目次

目次はこちら

2.Route53とは

Amazon Route 53 は、可用性と拡張性に優れたクラウドのドメインネームシステム (DNS) ウェブサービスです。Amazon Route 53 は、www.example.com のような名前を、コンピュータが互いに接続するための数字の IP アドレス (192.0.2.1 など) に変換するサービスで、デベロッパーや企業がエンドユーザーをインターネットアプリケーションにルーティングする、きわめて信頼性が高く、コスト効率の良い方法となるよう設計されています。Amazon Route 53 は IPv6 にも完全準拠しています。
引用:Amazon Route 53

Aレコード

Aレコードはドメイン名からIPv4アドレスを解決するレコードです。

AAAAレコード

AAAAレコードはドメイン名からIPv6アドレスを解決するレコードです。

CNAMEレコード

CNAMEレコードはドメイン名から別のドメイン名を参照するレコードです。
次回で設定するACMはCNAMEレコードを使用してドメインの検証をします。

エイリアスレコード

レコードというよりはAレコードの拡張機能であり、エイリアスレコードを使用すると選択したAWSリソースをipアドレスではなく、そのAWSリソースがデフォルトで持つDNS名でトラフィックをルーティングできるようになります。

今回は名前解決を利用してWebサーバーにアクセスできるようにするために、Route53を設定していきます。

類似サービスとして「Amazon Lightsail」のDNSゾーンがあげられます。

3.フロー図

file
Route53の設定のフローは以下になります。

  1. Route53のホストゾーンを作成します。(今回は都合上ホストゾーンの作成は省略させていただきます申し訳ございません。ホストゾーン作成は公式リファレンスの[create-hosted-zone]コマンドのページを参考にしてください。)
  2. Route53にルーティング先をALBに設定したエイリアスレコードを作成し、ドメインでアクセスした際はALBにルーティングするようにします。(外部からはAレコードタイプに見えます)

4.Route53設定

Route53の構築の全体のソースコードは下記の通りです。
ファイル名「ut-Route53-CF」

AWSTemplateFormatVersion: "2010-09-09"
Resources:
#レコード作成
  Route53RecordSet:
    Type: "AWS::Route53::RecordSet"
    Properties:
      Name: "ut.test.cloud5.jp."
      Type: "A"
      AliasTarget: 
        HostedZoneId: !ImportValue ut-alb-hostzoneid
        DNSName: !ImportValue ut-alb-dnsname
        EvaluateTargetHealth: true
      HostedZoneId: "Z01000061EWXXK1FTAO6J"

#Outputsセクション設定
Outputs:
  RecordOutput1:
    Value: !Ref Route53RecordSet
    Export:
      Name: ut-route53-name

レコード作成部分のソースコードとOutputsセクション部分のソースコードをそれぞれ説明していきます。

4-1.レコード作成

今回は既存のホストゾーンを利用するので、レコードの作成から始めます。
レコード作成のソースコードは下記の通りです。

#レコード作成
  Route53RecordSet:
    Type: "AWS::Route53::RecordSet"
    Properties:
      Name: "ut.test.cloud5.jp."
      Type: "A"
      AliasTarget: 
        HostedZoneId: !ImportValue ut-alb-hostzoneid
        DNSName: !ImportValue ut-alb-dnsname
        EvaluateTargetHealth: true
      HostedZoneId: "Z01000061EWXXK1FTAO6J"

設定項目は下記の通りです。

使用するオプション 設定値 説明
Name ut.test.cloud5.jp  設定したいレコード名を入力。
Type A レコードタイプを指定します。ALBを使用する場合はAレコード(外部から見たタイプであり、中身はエイリアスレコード)を指定します。
HostedZoneId !ImportValue ut-alb-hostzoneid ALBのホストゾーンのIDを参照します。
DNSName !ImportValue ut-alb-dnsname ルーティング先であるALBのDNS名を参照します。
EvaluateTargetHealth true ターゲットのヘルスの評価をオンに設定。
HostedZoneId Z01000061EWXXK1FTAO6J Route53のホストゾーンのIDを入力します。

これでレコード作成のソースコードの説明は以上です。

4-2.Outputsセクション設定

Outputsセクション設定のソースコードは下記の通りです。

#Outputsセクション設定
Outputs:
  RecordOutput1:
    Value: !Ref Route53RecordSet
    Export:
      Name: ut-route53-name

設定項目は下記の通りです。

使用するオプション 設定値 説明
Value !Ref Route53RecordSet  作成したレコードの名前を参照
Name ut-route53-name 設定した名前で出力

これでOutputsセクション設定のソースコードの説明は以上です。

5.検証

スタック作成後PowerShellからnslookupコマンドを使用して、ドメイン名から対応するIPアドレスを取得できるかの検証を行います。

①以下のコマンドを使用してドメイン名からIPアドレスを取得します。

nslookup -type=a ut.test.cloud5.jp

出力

サーバー:  ntt.setup
Address:  192.168.1.1

権限のない回答:
名前:    ut.test.cloud5.jp
Addresses:  3.37.238.238
          13.209.120.244

自分のドメイン名からIPアドレスが返されました。

②ALBのDNS名から同じIPアドレスが返ってくるか以下のコマンドで確認をします。

nslookup ut-ALB-878921977.ap-northeast-2.elb.amazonaws.com

出力

サーバー:  ntt.setup
Address:  192.168.1.1

権限のない回答:
名前:    ut-ALB-878921977.ap-northeast-2.elb.amazonaws.com
Addresses:  3.37.238.238
          13.209.120.244

ALBのDNS名から同じIPアドレスが返ってくることを確認できました。

6.感想

ホストゾーンの作成からではなくレコードの作成からになってしまいすいません。
次回もよろしくお願いします。

7.参照

AWS CloudFormation – AWS::Route53::RecordSet
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html

Last modified: 2022-06-22

Author