
AWS入門 初心者が覚えておくべきAWSの基本
現在の企業Webシステムは、複数のサーバーを組み合わせて構築されることが一般的です。Webシステムを運用するには、高い可用性と冗長性が求められるためです。小規模システムであってもシステム要件によっては高い可用性と冗長性が必要になる場合もあります。
複数のWebサーバーが存在する場合に手軽に可用性と拡張性の向上を実現できるのが負荷分散機能です。負荷分散機能の利用で、あるWebサイトへのリクエストを受け付けた時に配下のWebサーバーへリクエストを振り分けて分散処理することにより、一つのWebサーバーの処理負荷を軽減し、サイトに一時的に大量のアクセスが来ても運用が継続できる可能性が高くなるのです。
今回はHTTPの属性を用いた負荷分散を可能にするAzure Application Gatewayについて解説します。
Azure Application Gateway は、Webアプリケーションに対する通信を管理して負荷分散機能を提供します。
オンプレミスシステムなどでは、一般的に負荷分散は、送信元 IP アドレスと送信元ポート、送信先 IP アドレスと送信先ポートをそれぞれ読み取って分散するOSIレイヤー4での負荷分散のことを指します。Azureサービスでは、Azure LB(Azure Load Balancer)がレイヤー4で機能する負荷分散サービスです。
一方、Azure Application Gatewayは、URLなどのHTTPヘッダー情報に基づいて経路を制御します。複数のサーバーを含めた負荷分散先のサーバーグループを「サーバープール」とします。例えば、送信先URLに基づいてトラフィックを制御する場合、/imageが送信先URLに含まれる時は、画像用に準備された特定のサーバープールへ、/videoがURLにある場合、ビデオ用に準備されたサーバープールへ、それぞれ通信可能です。
このようなHTTP属性に基づくルーティングは、アプリケーションレイヤー(OSIレイヤー7)負荷分散と呼ばれます。
ここではAzure Application Gatewayの持つ機能とメリットについて、お伝えしていきます。
HTTPヘッダー情報に基づき、パケットをルーティングします。IPアドレスやポート番号などで負荷分散できない場合でも、URLによる負荷分散ができます。
サーバーにリクエストを振り分ける際、Cookieを確認することで、特定クライアントからのリクエストを特定のサーバーに紐付けられる機能です。例えばWebショップなどのWebアプリケーションは、決済などの際に最初にセッションを張ったWebサーバーと処理を継続する必要があります。その場合にはセッションアフィニティ機能を利用します。
サーバープール毎に異なるドメインが割り当てられるので、ドメインが異なるWebサイトを複数運用していても通信を目的のサイトへルーティングできます。
通常SSLでのアクセスはアクセスされるWebサーバーでSSLを復号されなければなりません。しかしAzure Application GatewayはSSLの復号機能を持っていますので、Azure Application GatewayでSSLを復号することでWebサーバーの負荷を減らせます。
Web Application Firewall(WAF)をAzure Application Gatewayで動作させることで、SQLインジェクション、クロス・サイト・スクリプティングなどの攻撃からWebアプリケーションを一元的に保護できます。
サーバーの自動スケーリングをサポートしています。トラフィックの変化を検知し、サーバーのスケールアップまたはスケールダウンを自動で実施することによりWebサイトの可用性向上とコストの最適化ができます。
サーバープールのリソース状態を監視して、異常とみなしたサーバーをサーバープールから自動的に外します。そして、正常な応答が確認され次第、再度サーバープールに組み込まれます。
この機能によりWebサイトが表示されないなどの不具合を防げます。監視は、サービスで使用している、HTTPで定義されているポートを使用して実施されております。
なお、監視対象サーバーの正常性確認には「プローブ」と呼ばれる通信を使用します。プローブでは次の項目が設定可能です。
プロパティ | 初期値 | 説明 |
---|---|---|
プローブのURL | http://127.0.0.1:<port>/ | 監視対象のURL |
Interval | 30 | 次の正常性プローブが送信されるまでの秒数 |
タイムアウト | 30 | アプリケーション ゲートウェイがプローブの応答を待機する秒数。この時間を超過すると、監視対象サーバーは異常としてマークされます。プローブが正常として返された場合は、対応する監視対象サーバーのステータスが正常に戻ります |
異常のしきい値 | 3 | 通常の正常性プローブで障害が発生した場合に送信するプローブの数です。プローブの連続失敗回数が異常のしきい値に達すると、監視対象サーバーは「ダウン」とマークされます |
Protocol | - | プローブを送信するために使用するプロトコルです。プローブでは監視対象サーバーの HTTP 設定で定義されているプロトコルを使用します |
Host | - | プローブを送信するホスト名です。Azure Application Gateway でマルチサイトが構成されている場合にのみ適用されます。マルチサイトが構成されていない場合は"127.0.0.1" を使用する。この値はVMホスト名とは異なります |
Path | - | プローブの相対パスです。パスは先頭を”/”にしなければなりません |
Azure Application Gatewayは制約も存在します。ここではその注意点をみていきましょう。
ここからはAzure Application Gatewayを利用する場面毎のポイントを順番にお伝えしていきます。
Azure Application Gatewayでは、サーバープールごとに異なるURLを設定できます。場合によってはひとつのAzure Application Gatewayで複数のサイトを運営したい場合もあるでしょう。そのような時でもサーバープールごとに異なるURLを設定すれば問題なく運用できます。
負荷分散機能の導入を考えるシステムであれば、複数のサーバーで構成されている場合が多いはずです。複数のサーバープールの情報セキュリティを一元的に管理したい時にはAzure Application GatewayのWAF機能が便利です。WAFを起動することにより、複数サーバーのセキュリティポリシーをまとめて管理でき、各サーバーで情報セキュリティ対策を個別にするよりもサーバーへの負荷を軽減できます。
Azure Application Gatewayはレイヤー7での負荷分散機能を提供しているため、IP以外にもシステム要件に応じてURLやCookieなどのHTTPヘッダー情報を参照した負荷分散ができます。
また通信が暗号化されている場合には、HTTPヘッダーを参照するために暗号化された通信の復号が必須です。Azure Application Gatewayで復号を実施することにより、各サーバーの負荷を減らせます。
Webサイトのジャンルによっては、特定のタイミングでトラフィックが集中することがあるかもしれません。たとえばWebショッピングサイトなどであれば、セールのタイミングなどでアクセスが集中し、最悪サーバーがダウンしてしまうこともあり得ます。Azure Application Gatewayの自動スケール機能が利用でき、トラフィックの状況に応じたリソース増強・縮小を自動的に実施でき、不測のサーバーダウンなどを回避できます。
Azure Application Gatewayの料金は、利用可能になっている合計時間と処理されたデータ量に基づいて課金されます。
詳しくは公式サイトの料金表をご確認ください。
Application Gateway の料金 | Microsoft Azure(Microsoft Azure公式ページ)
Webサイトの冗長性や可用性を高めるには、複数Webサーバーに対する負荷分散機能の使用が不可欠と言えます。Azure Application GatewayはOSIレイヤー7レベルでの負荷分散を実現しており、URLなどHTTPヘッダー情報を参照しての負荷分散が可能です。IPアドレスではなくURLなどで負荷分散させるシステム要件への対応などに最適といえます。
Azure上で運用しているWebサイトの冗長性や可用性の向上させたいときには、Azure Application Gatewayを検討しましょう。
24時間365日対応可能なクラウド監視・運用代行で、あなたをシステム運用から解放します!