💰

Application Gatewayを停止してコスト削減

2024/03/28に公開

Azure Application Gatewayとは?

Azure Application Gatewayは、Web トラフィックの負荷分散、SSL ターミネーション、Web アプリケーション ファイアウォール (WAF) など、さまざまな機能を備えたWebアプリケーション配信コントローラーです。
一言でいえば「Azureで提供されているL7分散のロードバランサー」です。

しかし、その機能の豊富さゆえに、運用コストが高い…と思う方もいるかもしれません。しかも、比較的低額で提供されていたV1 SKUが廃止されるアナウンスがありました😱
https://learn.microsoft.com/ja-jp/azure/application-gateway/v1-retirement

上記のアナウンスの背景からApplication Gatewayのコストに悩まされる人が増えているのではと思っています。
そこでn番煎じかもしれませんが、コスト削減方法の1つであるApplication Gatewayの停止について紹介します

Application Gatewayは実は停止できる

Application Gatewayは実は停止できる。の「実は」という部分がポイントです

クラウドリソースといえば使わないときは停止してコスト削減する。って常識ではありますが、Application Gatewayはなぜそれが見落とされていることが多いのでしょうか。私が勤務している会社でもこの事実を知ってるインフラエンジニアは多くないと思います。(お恥ずかしながら私も最近知りました)

なんとポータルではApplication Gatewayの「停止」、「起動」ができないのです。現時点だとAzure CLI と AzurePowershellを介してのみ「停止」、「起動」ができます。
https://learn.microsoft.com/ja-jp/azure/application-gateway/application-gateway-faq#application-gateway----------------------
ポータルに表示されていないので↑のFAQのリファレンスを読んだ人だけの知る人ぞ知る仕様になってる気がします。

実際にコストはどのくらい削減できるか

「停止できてるっていっても奥さん、どうせ細かい料金は発生したままなんでしょー(誰)」と疑ってる方もいるかもしれません。
しかし、心配ご無用です。

※Application Gatewayに割り当てているパブリックIPの料金は発生し続けるので注意です💦

そのため、開発環境など常に利用していないApplication Gatewayはどんどん停止してコストを下げましょう。
Azure Automationで〇時に停止、〇時に起動のような自動化をしてもいいかもしれません。いつか私も試してみて記事にするかもです。

Application Gatewayの停止・起動方法

次のコマンドを実行して、Application Gatewayを停止・起動します。
<app-gateway-name> はApplication Gateway名に<resource-group-name>はリソースグループ名に置き換えてください。

Azure CLIを使用する場合

##停止
az network application-gateway stop --name <app-gateway-name> --resource-group <resource-group-name>

## 起動
az network application-gateway start --name <app-gateway-name> --resource-group <resource-group-name>

Azure Powershellを使用する場合

##停止
$appGateway = Get-AzApplicationGateway -Name <app-gateway-name> -ResourceGroupName <resource-group-name>
Stop-AzApplicationGateway -ApplicationGateway $appGateway

## 起動
$appGateway = Get-AzApplicationGateway -Name <app-gateway-name> -ResourceGroupName <resource-group-name>
Start-AzApplicationGateway -ApplicationGateway $appGateway

停止・起動状態の確認方法

Azureポータルを使用する場合

なぜか状態確認はAzureポータルでもできる

Azure CLIを使用する場合

##確認コマンド
az network application-gateway show --name <app-gateway-name> --resource-group <resource-group-name> --query "operationalState"
##出力例
"Stopped"

Azure Powershellを使用する場合

##確認コマンド
$AppGw = Get-AzApplicationGateway -Name <app-gateway-name> -ResourceGroupName <resource-group-name>
($AppGw).OperationalState
##出力例
Stopped

Discussion