(続)静的Webサイトホスティング二重化してみる(その3)
前回まででAzureのBlobによる静的サイトホスティング構成が完了しました。いよいよ今回でDNSの設定を書き替えてフェイルオーバ環境を構築します。
登録されているAWSのAliasレコードのAレコードを削除してからヘルスチェックを登録してAレコードにフェイルオーバーの設定を施してから登録を行うという内容です。
最終的にこういう構成になります。
◆シリーズ
その2:AzureでApplicationGateway+Blob構成を作る
その3:DNSでフェイルオーバー設定(今回)
その4:S3とBlobにGitHubActions使ってコンテンツ同期
◆環境
aws-cli/2.4.27 Python/3.8.8 Linux/5.4.0-104-generic exe/x86_64.ubuntu.20 prompt/off Python 3.10.3 Ubuntu20.04.4LTS
◆作業内容
# 1.Route53ヘルスチェック
#・クラウドフロント情報取得
$ CLOUDFRONT_URL=$(aws cloudfront list-distributions \
--query "DistributionList.Items[].{DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == '${YOUR_DOMAIN}'] | [0].DomainName"\
--output=text \
) && echo $CLOUDFRONT_URL
#・ヘルスチェック作成
$ cat << EOF > create-health-check.json
{
"Type": "HTTPS_STR_MATCH",
"ResourcePath": "/",
"FullyQualifiedDomainName": "$CLOUDFRONT_URL",
"SearchString": "",
"RequestInterval": 30,
"FailureThreshold": 3
}
EOF
$ aws route53 create-health-check --caller-reference $(date "+%Y%m%d%H%M%S") --health-check-config file://create-health-check.json
# 2.エイリアス登録Aレコード削除
$ cat << EOF > delete_arecode.json
{
"Comment": "Creating Alias resource record sets in Route 53",
"Changes": [{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "${YOUR_DOMAIN}.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "$CLOUDFRONT_URL.",
"EvaluateTargetHealth": false
}
}
}]
}
EOF
$ HOSTED_ZONE_ID=$( \
aws route53 list-hosted-zones \
--query "HostedZones[?Name=='${HOSTED_DOMAIN}.'].Id" \
--output text)
$ aws route53 change-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID --change-batch file://delete_arecode.json
# 3.フェイルオーバー付きでAレコード登録
$ cat << EOF > create_azure_arecode.json
{
"Comment": "This is route53.json file",
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "${YOUR_DOMAIN}",
"Type": "A",
"SetIdentifier": "primary-record",
"Failover": "PRIMARY",
"AliasTarget":{
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "$CLOUDFRONT_URL",
"EvaluateTargetHealth": false
},
"HealthCheckId": "${YOUR_HEALTHCHECK_ID}"
}
},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "${YOUR_DOMAIN}",
"Type": "A",
"SetIdentifier": "secondary-record",
"Failover": "SECONDARY",
"TTL": 60,
"ResourceRecords": [{
"Value": "${YOUR_AZURE_LB_IP}"
}]
}
}
]
}
EOF
$ aws route53 change-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID --change-batch file://create_azure_arecode.json
◆参考サイト
・ヘルスチェック作成サンプル
・Aレコード削除
・ヘルスチェック付のAレコード設定サンプル
これでフェイルオーバ構成できました。ヨワヨワなので他のサイトのコピペばかりで時間ばかりかかりましたが何とかできました。
コスト面ではやや厳しいかもです。トータル5時間ほどで200円位なので月間30,000円位となるのでこれはバックアップとしておいておくには少し厳しい価格設定かもしれないです。あと、ApplicationGatewayはIPv4しか対応していないのでGCPのL7LBの方がお手軽でよいかもしれないです。DNSのhttpsレコードみたく他のクラウドのエンドポイントが指定できるようになれば、もう少し安価で選択肢も広がるんですけどね。
でコンテンツ更新2ヶ所やるのめんどくさい問題とTerraformでできないんか問題出てきますよね。。。Teraformはツライにしても更新は1ヶ所で完結させたいので気が向いたら次回あるかもしれないです。(いつになるかはわかりません。)

コメント