Azure Application Gatewayのエラーページを更新するPower Shell

 

Application Gatewayでシステムメンテナンス等でPoolメンバーの仮想マシンを全部停止した場合は、デフォルトの502エラーページが表示されます。
システムメンテナンスを案内する場合には、Listenerに502エラーや403エラーページを設定することで、Application Gatewayの機能でカスタムエラーページの表示が可能になります。
エラーページは、Blobストレージのパス等固定のURLを指定する事で設定できます。

今回は、システムメンテナンス等で定時にファイル更新するケースがあったので、Power Shellでカスタムエラーページの設定を更新できるようにしてみました。

前回の記事にも記載した通り、Application  Gatewayのキャッシュに保存されるため、更新にはファイル名の変更が必要になります。

Azure Application Gatewayの起動、停止をPower Shellでやってみた

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

まず、事前にエラーページのHTMLファイルをBlobストレージにしておきます。以下のページを参考にPower Shellを作成しています。

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

※Content Typeを指定しないと、ファイルとしてアップロードはできますが、エラーページとして表示出来ないので注意が必要です。

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

# パラメータ
$resourceGroupName = “ストレージアカウントのRG名”
$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

.Azure Application Gatewayのエラーページを更新するPower Shell

以下のページを参考に更新する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

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

.留意点

エラーページを設定している、URLのパス名やファイル名が更新された場合は、Application Gatewayを再起動しなくても反映されます。
同じファイル名でメンテナンス画面をアップするような方法ですと、Application Gatewayの再起動が必要となり停止時間が発生します。
その為、メンテナンス画面の更新は、今回のように事前にBlobストレージにファイルをアップしたうえで、パス名を切り替えるのが一番良さそうです。