便利に使える負荷分散サービス！Azure Application Gateway入門【初心者向け】

#はじめに
今回は**[Azure Application Gateway](https://azure.microsoft.com/ja-jp/services/application-gateway/)** のご紹介です。
HTTP/HTTPSのトラフィックを柔軟に負荷分散することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/7bdba557-a10e-641c-b807-7b21b364cb5d.png)

##Azure Application Gatewayの概要
アプリケーション層 (OSIネットワーク参照モデルの第7層)で動作する負荷分散機能です。
Azure Load Balancer でも負荷分散はできますが、Application Gatewayではより柔軟に、パスベースの振り分け等の機能も提供されます。

##Application Gatewayの機能
Application Gatewayを作成すると、エンドポイントがAzure Load Balancerによって提供されます。
Azure Load BalancerはトラフィックをApplication Gatewayインスタンスに分散し、インスタンス上で各種の処理が行われます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/1c83fada-41a7-a02c-c8e0-57e9daae5ae9.png)

[引用元](https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-introduction)

Application GatewayはSmall、Medium、Largeの3つのサイズが選べます。
上のサイズになるほど以下の表のようにスループットが向上します。

##Application Gatewayの詳細なサービス範囲
Application Gatewayは、サブスクリプションごとに最大50個まで作成できます。
各Application Gatewayには最大10個のインスタンス(L7の仮想負荷分散装置)を割り当てることができます。
また、Application Gatewayには20個のHTTPリスナーを作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/6facfe09-6698-992a-e50f-b78f8d7c7531.png)

[引用元](https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-introduction)

###トラフィックの分散

Application Gatewayへのトラフィックはラウンドロビン方式で、バックエンドのサーバに分散されます。

###SSL終端とオフロード

Application GatewayがSSL終端となってHTTPSとHTTPへの変換を行います。
復号・暗号化をApplication Gateway上で行うことでバックエンドのCPU負荷を削減します。

###エンド・ツー・エンドSSL

- HTTPS通信をHTTPに変換、URLパスベースのルーティング、CookieベースのセッションアフィニティなどのApplication Gateway上での処理を行います。
- 再びHTTPからHTTPSに変換して、バックエンドにトラフィックを流します。
- Application Gatewayとバックエンド間のエンド・ツー・エンドのHTTPS通信を維持しながら、各種機能も利用することが可能になります。

###Cookieベースのセッションアフィニティ

Cookieを利用して、ユーザセッションを特定のバックエンドに送ることができます。
ユーザのセッション情報をバックエンドで保存したり管理したりする場合に役に立ちます。

###URLパスベースのルーティング

事前に設定したURLパスベースのルールに則って、特定のバックエンドにトラフィックを振り分けることができます。
例えば、
http://contoso.com/video* に対する要求はVideoServerPoolに
http://contoso.com/images* に対する要求は ImageServerPool にそれぞれルーティングできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/ae75e461-88f2-fe07-eee4-dc4ad5c79a0d.png)

###複数サイトのホスト

最大で20のWebサイトを1つのApplication Gatewayで処理、バックエンドに転送することができます。
例えば、１つのApplication Gatewayを使って、www.hogehoge.com と www.foobar.com のような２つのドメインへのトラフィックをコントロールできます。

###リダイレクト

Application Gateway上でリダイレクトも可能です。
HTTPからHTTPSへのリダイレクト、パスに基づくリダイレクト、外部サイトへのリダイレクトが可能です。
サーバを立てなくてもいろんなパターンのリダイレクトを行えるのは便利です。

###Webアプリケーションファイアウォール(WAF)

- Application Gatewayで提供され、脆弱性や攻撃からWebアプリケーションを保護できます。
- SQLインジェクション、クロス・サイト・スクリプティングなどからの保護が提供
- WAFには、検出モードと防止モードがある
- 検出モードの場合は、許可されない通信が発生すると、ログに記録されます。
- 防止モードは検知と同時にさらに通信がブロックされ、アクセスしたユーザには「403 不正アクセス」が表示されセッションが終了します。

###監視

Application Gatewayにつながるバックエンドの死活監視を行い、異常なインスタンスへの振り分けを停止することもできます。
「既定の正常性プローブ」はルートパスに対するHTTP応答確認により死活を監視できます。
「カスタムの正常性プローブ」では、さらに柔軟にURLパスや監視のパラメータを個別に設定できます。

###その他

- Application Gateway は、インターネット接続ゲートウェイ、または内部的にのみ使用されるゲートウェイのいずれかとして構成できる
- Application Gatewayの属するサブネット上にネットワークセキュリティグループ(NSG)がある場合、65503～65534のポート範囲をインバウンドトラフィック用に開いておく必要がある。
- WebSocket通信のサポートがある
- WAFはサイズMediumとLargeで利用可能。

###料金
Application Gatewayを構成して利用した時間と、Application Gatewayによって処理されたデータ量(GB単位)に対して課金されます。

Azureデータセンター外へ出ていくデータの転送量ももちろん課金されます。

#最後に
このサービスを利用することで、ネットワーク機器、HTTPサーバのレイヤなど、複数の機器、ソフトにまたがって行っていた設定を、
Application Gateway上で一括して管理することができ、猥雑な作業を短縮できるので開発に注力できるようになります。

スループットレベルやインスタンス数を自分である程度コントロールできるようになります。
事前に想定した負荷に備えることができるので、コストの想定やトラブルを最小限に抑えられるようになりますので、活用していきたいですね！