01.はじめに
【AWS】CloudFormtionでブログサービスを構築してみた(03.S3,CloudFront編)の続きである。
過去に公開した記事は下記の通りである。
・【AWS】CloudFormtionでブログサービスを構築してみた(概要編)
・【AWS】CloudFormtionでブログサービスを構築してみた(01.Network編)
・【AWS】CloudFormtionでブログサービスを構築してみた(02.EC2,RDS,ALB編)
・【AWS】CloudFormtionでブログサービスを構築してみた(03.S3,CloudFront編)
この記事で扱うものはコンポーネントは下記である。
1.Route53
02 構成図
本稿でWAFの設定以外が完了する。
Route53で
ALB→プライマリレコードの設定
CloudFront →セカンダリレコードの設定を実施する
テーブルにすると下記になる。
レコード名 | タイプ | ルーティングポリシー | 差別化要因 | 値/トラフィックのルーティング先 |
---|---|---|---|---|
www.domain name | A | フェイルオーバー | プライマリ | ALB |
www.domain name | A | フェイルオーバー | セカンダリ | CloudFront |
03.テスト方法
設定後、下記観点でテストを実施する。
1.Route53で設定したドメインで通常アクセスが出来るか
2.EC2を2台ともシャットダウンした状態でセカンダリに通信が流れるか。
3.EC2は生きているがRDSをシャットダウンした状態でも問題なくセカンダリに通信が流れるか(ヘルスチェックのパスが/index.phpで問題ないか)
04.テンプレートファイル
Outputs情報
Outputs:
#CloudFrontのDNS名の定義
CloudFrontDNS:
Value: !GetAtt CloudFrontDistribution.DomainName
Export:
Name: CloudFront-DNS-Outputs
#ALBのDNS名の定義(Route53で使う)
ALBDomainName:
Value: !GetAtt CFALB.DNSName
Export:
Name: ALB-DNS-Outputs
#ALBのゾーンIDの定義(Route53で使う)
ALBZoneId:
Value: !GetAtt CFALB.CanonicalHostedZoneID
Export:
Name: ALB-CanonicalHostedZoneID-Outputs
ネットワーク編で記載したymlファイルに下記を追記する。
# ------------------------------------------------------------#
# パラメータ
# ------------------------------------------------------------#
Parameters:
ドメイン名を指定
HostedZoneName:
Type: String
Description: Type of this domain name.
################
##以下追記する###
#################
#Route53のショートネームを指定。初回はwwwで登録する
Shortname:
Type: String
Description: Short name.
Default: "www."
~~~~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~~
# ------------------------------------------------------------#
# Route53
# ------------------------------------------------------------#
# ------------------------------------------------------------#
# HostZone
# ------------------------------------------------------------#
Route53HostedZone:
Type: AWS::Route53::HostedZone
Properties:
Name: !Sub "${HostedZoneName}"
HostedZoneTags:
-
Key: Name
Value: DNS-Zone
#################
###以下追記する###
#################
# ------------------------------------------------------------#
# HealthCheck
# ------------------------------------------------------------#
DNSHealthCheck:
Type: 'AWS::Route53::HealthCheck'
Properties:
HealthCheckConfig:
Port: 443
Type: HTTPS
#RDSがダウンしたら下記には疎通が通らないのでEC2とRDSの監視を両方網羅できる
ResourcePath: /index.php
FullyQualifiedDomainName: !ImportValue ALB-DNS-Outputs
RequestInterval: 30
FailureThreshold: 3
HealthCheckTags:
-
Key: Name
Value: DNS-HealthCheck
# ------------------------------------------------------------#
# Record
# ------------------------------------------------------------#
DNSRecord:
Type: AWS::Route53::RecordSetGroup
Properties:
HostedZoneName: !Sub "${HostedZoneName}."
RecordSets:
#Primary(ALB)
- Name: !Sub "${Shortname}${HostedZoneName}."
Failover: PRIMARY
HealthCheckId: !Ref DNSHealthCheck
SetIdentifier: "LB-P"
Type: A
AliasTarget:
HostedZoneId: !ImportValue ALB-CanonicalHostedZoneID-Outputs
EvaluateTargetHealth: true
DNSName: !ImportValue ALB-DNS-Outputs
#Secondary(CloudFront)
- Name: !Sub "${Shortname}${HostedZoneName}."
Failover: SECONDARY
SetIdentifier: "LB-S"
Type: A
AliasTarget:
HostedZoneId: Z2FDTNDATAQYW2 # 固定値
DNSName: !ImportValue CloudFront-DNS-Outputs
05.テストアクセス
1.Route53で設定したドメインで通常アクセスが出来るか
→想定通り
2.2.EC2を2台ともシャットダウンした状態でセカンダリに通信が流れるか。
EC2をシャットダウンする
1-2分くらい待ってからアクセスするとSorryページに通信が切り替わる。
→想定通り
3.EC2は生きているがRDSをシャットダウンした状態でも問題なく
セカンダリに通信が流れるか(ヘルスチェックのパスが/index.phpで問題ないか)
シャットダウン後すぐはヘルスチェックが切り替わらないのでデータベース接続エラーが出る
しばらくするとSorryページに通信が切り替わる(ブラウザキャッシュとかの関係もあるのだろうか?)
参考文献