演習 - アプリケーション ゲートウェイを作成して構成する

完了

Application Gateway では、着信する要求がエンドポイントでリッスンされ、バックエンド プール内の Web サーバーの 1 つにそれらの要求が転送されます。 Application Gateway でトラフィックを転送する方法、および Web サーバー間に要求を負荷分散する方法が記述されている構成を提供します。

車両部門のシステムでは、車両登録 Web アプリがホストされている Web サーバー間に着信した要求を負荷分散するよう、Application Gateway を構成する必要があります。 また、いずれかの Web サーバーで障害が発生したときにそれを検出し、動作しているサーバーにトラフィックをリダイレクトできるよう、Application Gateway を構成する必要もあります。 さらに、車両登録サイトと免許更新サイトに対する要求が適切なバックエンド Web サービスに送信されるよう、パスベースのルーティングを構成する必要があります。

この演習では、Web サーバーのバックエンド プールを含む Application Gateway のインスタンスを作成します。 Application Gateway が、着信した HTTP 要求を処理するように適切なリスナーが構成されていること、およびこれらの要求を機能している Web サーバーにルーティングすることを確認します。

Diagram showing the resources that will be deployed.

アプリケーション ゲートウェイ用にネットワークを構成する

  1. アプリケーション ゲートウェイで必要なプライベート サブネットを作成するには、次のコマンドを実行します。 サブネットは、appGatewaySubnet という名前で、前の演習で作成した vehicleAppVnet 仮想ネットワーク内にあります。

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. アプリケーション ゲートウェイのパブリック IP アドレスと DNS ラベルを作成するには、次のコマンドを実行します。 DNS ラベルはグローバルに一意である必要があります。 ラベルを生成するには、次のコードで $RANDOM 関数を使用します。

    az network public-ip create \
      --resource-group $RG \
      --name appGatewayPublicIp \
      --sku Standard \
      --dns-name vehicleapp${RANDOM}
    

アプリケーション ゲートウェイを作成する

  1. まず、次のコマンドを使用して WAF ポリシーを作成します。

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  2. 次のコマンドを使用し、次の構成で vehicleAppGateway という名前のアプリケーション ゲートウェイを作成します。

    • Web サーバーの仮想マシンの IP アドレスを含むバックエンド プール。
    • SQL インジェクションやクロスサイト スクリプティング攻撃で使用されるものなど、悪意のある要求をブロックするファイアウォール。
    • ポート 8080 でリッスンする一時的なリスナー。 このリスナーは後のステップで置き換えますが、アプリケーション ゲートウェイを作成するために必要です。
    • これらの要求をバックエンド プール内の Web サーバーにルーティング (および負荷を分散) するルール。
    az network application-gateway create \
    --resource-group $RG \
    --name vehicleAppGateway \
    --sku WAF_v2 \
    --capacity 2 \
    --vnet-name vehicleAppVnet \
    --subnet appGatewaySubnet \
    --public-ip-address appGatewayPublicIp \
    --http-settings-protocol Http \
    --http-settings-port 8080 \
    --private-ip-address 10.0.0.4 \
    --frontend-port 8080 \
    --waf-policy waf-pol \
    --priority 100
    

    Note

    このコマンドは、完了までに数分かかる場合があります。

  3. webServer1webServer2 のプライベート IP アドレスを調べるには、次のコマンドを実行します。

    az vm list-ip-addresses \
      --resource-group $RG \
      --name webServer1 \
      --query [0].virtualMachine.network.privateIpAddresses[0] \
      --output tsv
    
    az vm list-ip-addresses \
      --resource-group $RG \
      --name webserver2 \
      --query [0].virtualMachine.network.privateIpAddresses[0] \
      --output tsv
    
  4. 次に、各 Web サイト用のバックエンド プールを追加します。 最初に、仮想マシンで実行される車両登録サイトのバックエンド プールを作成します。 次のコマンドの IP アドレスが、前のコマンドで出力された IP アドレスと一致していることを確認します。

    az network application-gateway address-pool create \
      --gateway-name vehicleAppGateway \
      --resource-group $RG \
      --name vmPool \
      --servers 10.0.1.4 10.0.1.5
    
  5. App Service で実行される免許更新サイトのバックエンド プールを作成するには、次のコマンドを実行します。

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. ポート 80 に対して、フロントエンド ポートを作成します。

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. ポート 80 での要求を処理するには、リスナーを作成します。

    az network application-gateway http-listener create \
        --resource-group $RG \
        --name vehicleListener \
        --frontend-port port80 \
        --frontend-ip appGatewayFrontendIP \
        --gateway-name vehicleAppGateway
    

正常性プローブを追加する

  1. Web サーバーが利用可能かどうかをテストする正常性プローブを作成します。 正常性プローブは 15 秒ごとに実行されて (--interval 15)、Web アプリのルート パスに HTTP GET 要求が送信されます。 Web アプリが 10 秒以内に応答しない場合 (--timeout 10)、プローブはタイムアウトします。プローブが 3 回連続して失敗した場合 (--threshold 3)、Web サーバーは、異常とマークされます。

    バックエンドの 1 つとして App Service を使っているため、ホスト ヘッダーを App Service の名前に設定します。 これを設定しないと、App Service は応答せず、正常として認識されません。

    az network application-gateway probe create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name customProbe \
        --path / \
        --interval 15 \
        --threshold 3 \
        --timeout 10 \
        --protocol Http \
        --host-name-from-http-settings true
    
  2. 次に、作成した正常性プローブを使用するには、ゲートウェイに対する HTTP 設定を作成します。

    az network application-gateway http-settings create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appGatewayBackendHttpSettings \
        --host-name-from-backend-pool true \
        --port 80 \
        --probe customProbe
    

パスベースのルーティングを構成する

次に、このアプリケーション ゲートウェイに対してパスベースのルーティングを構成する必要があります。 /VehicleRegistration/ に対する要求は vmPool にルーティングし、/LicenseRenewal/ に対する要求は appServicePool にルーティングします。 URL コンテキストのない要求はすべて、既定として vmPool にルーティングします。

  1. vmPool に対するパス マップを作成するには、次のコマンドを実行します。

    az network application-gateway url-path-map create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name urlPathMap \
        --paths /VehicleRegistration/* \
        --http-settings appGatewayBackendHttpSettings \
        --default-http-settings appGatewayBackendHttpSettings \
        --address-pool vmPool \
        --default-address-pool vmPool
    
  2. appServicePool に対するパス マップ ルールを作成するには、次のコマンドを実行します。

    az network application-gateway url-path-map rule create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServiceUrlPathMap \
        --paths /LicenseRenewal/* \
        --http-settings appGatewayBackendHttpSettings \
        --address-pool appServicePool \
        --path-map-name urlPathMap
    
  3. 次に、作成したパス マップを使って新しいルーティング規則を作成します。

    az network application-gateway rule create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServiceRule \
        --priority 200 \
        --http-listener vehicleListener \
        --rule-type PathBasedRouting \
        --address-pool appServicePool \
        --url-path-map urlPathMap
    
  4. 構成の最後の部分は、最初にアプリケーション ゲートウェイをデプロイするときに作成したルールを削除することです。 カスタム ルールを設定したので、それはもう必要ありません。

    az network application-gateway rule delete \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name rule1
    

すべての設定が済んだので、次にテストを行います。