Azure Application Gatewayのエラーページ設定更新

 

Application Gatewayでシステムメンテナンス等でWEBサーバを全部停止した場合は、デフォルトの502エラーページが表示されます。

Application Gatewayのリスナーにカスタムのエラーページを設定する事でユーザー作成のエラーページを表示する事が出来ます。

WEBサイト等のシステムメンテナンスを案内する場合等には、リスナーにメンテナンス案内をエラーページを設定することで、Application Gatewayの機能でメンテナンス案内を表示が可能になります。

エラーページは、Blobストレージのパス等固定のURLを指定する事で設定できます。

最初にAzure Portal上でエラーページの設定を行いました。その次にカスタムエラーページのBlobストレージへのアップロード、Application Gateway側での設定更新をPower Shellでやってみました。

1 .Azure PortalでApplication Gatewayのエラーページ設定をしてみる

今回は以下の前提で試してみました。

      • エラーページはBlobストレージにアップしたHTMLファイルを利用する
      • エラー用のHTMLファイルは事前にアップロード済みである

まず、最初にBLOBストレージにアップロードしたエラーページのURLを確認します。

ストレージアカウントのStorage Explorerを選択すると下記画面が表示させますので、Blobコンテナのエラーファイルを置いたディレクトリに移動します。

ファイルを選択し右クリックしプルダウンでプロパティを選択します。

プロパティを選択すると下記画面が表示されますので、Uriの行がエラーページで指定する内容にあんります。Uriをコピーします

次にAzure Portal上Application Gatewayの設定を行います。

Application Gatewayのメニューで設定対象のApplication Gatewayを選択します。

Application Gatewayのメニューでリスナーを選択すると下記画面が表示されます。設定対象のリスナーを選択します。

リスナーの設定画面が表示されます。

エラーページのURLの項目ではいを選択します。

無効なゲートウェイ-502と禁止-403のエラーページが設定できます。先ほどストレージアカウントで確認したエラーページのUriを入力します。

これでAzure Portalを利用したエラーページの設定が完了です。

.Power Shellを使ってBlobストレージにファイルをアップロードする

次にPower Shellでのエラーページの更新を試してみます。実施する手順は2つになります。

      • エラーページのBlobストレージへのアップロード
      • Application Gatewayのエラーページパスを変更する。

まず、エラーページのHTMLファイルをBlobストレージを行います。

以下のページを参考に、HTMLファイルのBlobストレージアップロード用Power Shellを作ってみました。

https://docs.microsoft.com/en-us/powershell/module/az.storage/set-azstorageblobcontent?view=azps-3.3.0

※試してみた所、Content Typeを指定しないと、ファイルとしてアップロードはできますが、エラーページとして表示出来ませんでした。明示的にContent Typeを指定います。

※同じファイル名でアップロードしてもエラーページは更新されません。別名でのアップロードが必要です。

# Blobストレージにファイルをuploadする
# 参考URL
# https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-powershell#upload-blobs-to-the-container

# パラメータ
$resourceGroupName = “ストレージアカウントのリソースグループ名”
$StorageAccountName = “ストレージアカウント名”
$containerName = “コンテナ名”
$LocalFilePath = “アップロードするファイルパス”

# 処理部分
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $StorageAccountName
$ctx = $storageAccount.Context

Set-AzStorageBlobContent -File $LocalFilePath `
-Container $containerName `
-Properties @{“ContentType” = “text/html”} `
-Context $ctx

3.Power Shellを使ってApplication Gatewayのエラーページを更新する

Application Gatewayのエラーページの更新は、エラーページのパスを変更する事で実現しています。Power Shell作成にあたっては以下のページを参考にしました。

https://docs.microsoft.com/ja-jp/powershell/module/az.network/set-azapplicationgatewayhttplistenercustomerror?view=azps-3.3.0&viewFallbackFrom=azps-2.4.0

# APGW Custom error Page Update
# 参考URL
# https://docs.microsoft.com/ja-jp/powershell/module/az.network/set-azapplicationgatewayhttplistenercustomerror?view=azps-3.3.0&viewFallbackFrom=azps-2.4.0

#パラメータ
$resourceGroupName = “Application GatewayのRG名”
$APGWName =“Application Gateway名”
$ListenerName = “リスナー名”
$StatusCode = “更新対象のエラーコード(ex;HttpStatus403)”
$customErrorUrl = “ErrorページのURL(ex;https://Blobストレージ名.blob.core.windows.net/コンテナ名/ファイル名)”

#処理部分
$AppGw = Get-AzApplicationGateway -Name $APGWName -ResourceGroupName $resourceGroupName
$httplistner = Get-AzApplicationGatewayHttpListener -Name $ListenerName -ApplicationGateway $Appgw
$updatelistener = Set-AzApplicationGatewayHttpListenerCustomError -HttpListener $httplistner -StatusCode $StatusCode -CustomErrorPageUrl $customErrorUrl
Set-AzApplicationGateway -ApplicationGateway $AppGw

※マイクロソフトサポート様に指摘/修正頂き完成しています。本当にありがとうございます。

4.留意点

Application Gatewayはエラーページをキャッシュで保持します。

キャッシュの更新は、エラーページのパス変更かApplication Gatewayの再起動でできます。

Application Gatewayの再起動の場合は同じファイル名でもエラーページのキャッシュ更新が可能ですが、Application Gateway再起動分の停止時間が発生します。

パスの変更の場合は設定変更の反映だけになる為停止時間が発生しません。

エラーページの更新は、事前にBlobストレージに別ファイル名でアップしておき、エラーページのパス名を切り替えるのが良さそうです。

Application  Gatewayの再起動については以下の記事に記載しております。

Power ShellでAzure Application Gatewayの起動停止