(続)静的Webサイトホスティング二重化してみる(その2)
前回はAWS-CLIでAWS上に静的サイトホスティングの構成を作るところまでを終わらせました。今回はAzure-CLIを使って、Blob+ApplicationGatewayの構成で静的Webサイトホスティングを有効化してSSL証明書をぶち込むところまでをやってみます。SSLはZeroSSLを使用します。(自動更新の仕組みまでは作れませんでした。残念)
◆シリーズ
その2:AzureでApplicationGateway+Blob構成を作る(今回)
その4:S3とBlobにGitHubActions使ってコンテンツ同期
◆環境
azure-cli 2.14.0 Python 3.10.2 Ubuntu20.04.4LTS
◆作業内容
1.事前準備(SSL準備)
(1)ZeroSSLでCNAME用文字列取得
・ZeroSSLに新規登録し、[NewCertificate]で新規証明書の発行を開始する
・ドメインを入力して[NextStep]をクリックする
・[90-Day Certificate]を選択して[Next Step]をクリック
・[CSR&Contract]で[Auto-Generate CSR]が有効であることを確認し[Next Step]をクリック
・Freeを選択して[Next Step]をクリック
・[DNS(CNAME)]を選んで表示された内容をメモし[Next Step]をクリックする
(2)AWSのRoute53にZeroSSLのCNAME登録
$ cat << EOF > createcnamerecode.json
{
"Comment": "Creating Alias resource record sets in Route 53",
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "${ZEROSSL_YOUR_DOMAIN}",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [{
"Value": "${ZEROSSL_STRING}"
}]
}
}]
}
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://createcnamerecode.json
(3)CNAME登録後作業
・[Verify Domain]をクリックする
・CNAME認証が完了したころ合いを見計らつて[Certificates]をクリックし[STATUS]が[Issued]となっていることを確認してから[Install]をクリック
・[DownloadCertificate(.zip)]をクリックしダウンロードしたZipファイルを解凍しAzure-CLIを実行するUbuntuにアップロードしておく
2.Azure作業
#(1)Azure-CLIアップデート
$ sudo apt -y update
$ sudo apt -y upgrade
$ sudo apt install -y jq
$ az upgrade
#(2)Blob構築
$ az login
#・ストレージアカウント作成
$ az group create --name ${YOUR_RESOURCE_GROUP} --location japaneast
$ az storage account create \
--name ${YOUR_STORAGE_NAME} \
--resource-group ${YOUR_RESOURCE_GROUP} \
--location japaneast \
--sku Standard_GZRS
#(3)静的Webサイトホスティング有効化
$ az storage blob service-properties update --account-name ${YOUR_STORAGE_NAME} \
--static-website --404-document 404.html \
--index-document index.html
#・アカウントキー取得
$ SA_TMP_AK=$(az storage account keys list \
--resource-group ${YOUR_RESOURCE_GROUP} \
--account-name ${YOUR_STORAGE_NAME} \
--out tsv)
$ SA_ACCOUNT_KEY=$(echo $SA_TMP_AK | awk '{print $3 }')
#・ファイルアップロード
$ az storage blob upload-batch \
--source "html" \
--destination \$web \
--account-key $SA_ACCOUNT_KEY \
--account-name "${YOUR_STORAGE_NAME}"
#・エンドポイント取得
$ ENDPOINT=$(az storage account show --name tohonokaitk | jq -r .primaryEndpoints.web | sed -E 's/^.*(http|https):\/\/([^/]+).*/\2/g')
#(4)V-NET作成
$ az network vnet create \
--name ${YOUR_VNET_NAME} \
--resource-group ${YOUR_RESOURCE_GROUP} \
--location japaneast \
--address-prefix 10.0.0.0/16 \
--subnet-name ${YOUR_SUBNET_NAME} \
--subnet-prefix 10.0.1.0/24
#(5)パブリック固定IP取得
$ az network public-ip create \
--resource-group ${YOUR_RESOURCE_GROUP} \
--name ${YOUR_IP_NAME} \
--allocation-method Static \
--sku Standard
#(6)証明書保管(ZeroSSLで発行した証明書を保管)
$ mkdir ${PATH_TO_SSLKEY}
$ cd ${PATH_TO_SSLKEY}
$ openssl pkcs12 -export -out "certificate_combined.pfx" -inkey "private.key" -in "certificate.crt" -certfile ca_bundle.crt
Enter Export Password:${PASSWORD}
Verifying - Enter Export Password:${PASSWORD}
#(7)ApplicationGateway作成(https接続)
$ az network application-gateway create \
--name ${YOUR_LB_NAME} \
--location japaneast \
--resource-group ${YOUR_RESOURCE_GROUP} \
--vnet-name ${YOUR_VNET_NAME} \
--subnet ${YOUR_SUBNET_NAME} \
--capacity 2 \
--sku Standard_v2 \
--public-ip-address ${YOUR_IP_NAME} \
--private-ip-address 10.0.1.200 \
--frontend-port 443 \
--servers $ENDPOINT \
--http-settings-port 443 \
--http-settings-protocol https \
--cert-file ${PATH_TO_SSLKEY}/certificate_combined.pfx \
--cert-password ${PASSWORD} \
--http2 Enabled
#・新しいホスト名でオーバーライドする
$ az network application-gateway http-settings update \
--host-name-from-backend-pool true \
--resource-group ${YOUR_RESOURCE_GROUP} \
--gateway-name ${YOUR_LB_NAME} \
--name appGatewayBackendHttpSettings
#(8)httpリダイレクト設定
#・ポートの作成
$ az network application-gateway frontend-port create \
--name ${YOUR_PORT_NAME} \
--port 80 \
--resource-group ${YOUR_RESOURCE_GROUP} \
--gateway-name ${YOUR_LB_NAME}
#・リスナーの作成
$ az network application-gateway http-listener create \
--name ${YOUR_LISTNER_NAME} \
--frontend-ip appGatewayFrontendIP \
--frontend-port ${YOUR_PORT_NAME} \
--resource-group ${YOUR_RESOURCE_GROUP} \
--gateway-name ${YOUR_LB_NAME}
#・リダイレクト先設定
$ az network application-gateway redirect-config create \
--name ${YOUR_CONFIG_NAME} \
--type Permanent \
--include-path true \
--include-query-string true \
--target-listener appGatewayHttpListener \
--resource-group ${YOUR_RESOURCE_GROUP} \
--gateway-name ${YOUR_LB_NAME}
#・ルール設定
$ az network application-gateway rule create \
--name ${YOUR_RULE_NAME} \
--rule-type Basic \
--http-listener ${YOUR_LISTNER_NAME} \
--redirect-config ${YOUR_CONFIG_NAME} \
--resource-group ${YOUR_RESOURCE_GROUP} \
--gateway-name ${YOUR_LB_NAME}
#(9)IP取得
$ az network public-ip show \
--resource-group lb_tohonokai_test \
--name tohonokai_tk_IPAddress \
--query [ipAddress] \
--output tsv
${YOUR_AZURE_LB_IP}
◆参考サイト
・AzureのLoadBarancer設定
・Blob静的Webサイトホスティング
・ApplicationGateway
・ZeroSSL
・ApplicationGatewayへのSSL適用
・Azure-CLI Blob
とりあえずここまででIPアドレスでSSLにてAzureの静的サイトホスティングにアクセスできるところまでは確認できました。
次回はAWSのAレコードを書き替えてフェイルオーバできるところまでやります。









コメント