Azure CLI を使用して複数の Web サイトをホストするアプリケーション ゲートウェイを作成する

アプリケーション ゲートウェイを作成するときに、Azure CLI を使用して複数の Web サイトのホスティングを構成できます。 この記事では、仮想マシン スケール セットを使用してバックエンド アドレス プールを定義します。 その後、Web トラフィックがプール内の適切なサーバーに確実に到着するように、所有するドメインに基づいてリスナーと規則を構成します。 この記事では、複数のドメインを所有していることを前提として、www.contoso.comwww.fabrikam.com の例を使用します。

この記事では、次のことについて説明します。

  • ネットワークのセットアップ
  • アプリケーション ゲートウェイの作成
  • バックエンド リスナーの作成
  • ルーティング規則の作成
  • バックエンド プールを含んだ仮想マシン スケール セットの作成
  • ドメインの CNAME レコードの作成

複数サイト アプリケーション ゲートウェイ

好みに応じて、Azure PowerShell を使ってこの手順を実行することもできます。

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • このチュートリアルには、Azure CLI のバージョン 2.0.4 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

リソース グループを作成する

リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 az group create を使用してリソース グループを作成します。

次の例では、myResourceGroupAG という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroupAG --location eastus

ネットワーク リソースを作成する

az network vnet create を使用して、仮想ネットワークと myAGSubnet という名前のサブネットを作成します。 次に、az network vnet subnet create を使用して、バックエンド サーバーに必要なサブネットを追加できます。 az network public-ip create を使用して myAGPublicIPAddress という名前のパブリック IP アドレスを作成します。

az network vnet create \
  --name myVNet \
  --resource-group myResourceGroupAG \
  --location eastus \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myAGSubnet \
  --subnet-prefix 10.0.1.0/24

az network vnet subnet create \
  --name myBackendSubnet \
  --resource-group myResourceGroupAG \
  --vnet-name myVNet \
  --address-prefix 10.0.2.0/24

az network public-ip create \
  --resource-group myResourceGroupAG \
  --name myAGPublicIPAddress \
  --allocation-method Static \
  --sku Standard

アプリケーション ゲートウェイの作成

az network application-gateway create を使用して、アプリケーション ゲートウェイを作成することができます。 Azure CLI を使用してアプリケーション ゲートウェイを作成するときは、容量、SKU、HTTP 設定などの構成情報を指定します。 このアプリケーション ゲートウェイを、先ほど作成した myAGSubnetmyAGPublicIPAddress に割り当てます。

az network application-gateway create \
  --name myAppGateway \
  --location eastus \
  --resource-group myResourceGroupAG \
  --vnet-name myVNet \
  --subnet myAGsubnet \
  --capacity 2 \
  --sku Standard_v2 \
  --http-settings-cookie-based-affinity Disabled \
  --frontend-port 80 \
  --http-settings-port 80 \
  --http-settings-protocol Http \
  --public-ip-address myAGPublicIPAddress

アプリケーション ゲートウェイの作成には数分かかる場合があります。 アプリケーション ゲートウェイを作成すると、新たに次の機能が確認できます。

  • appGatewayBackendPool - アプリケーション ゲートウェイには、少なくとも 1 つのバックエンド アドレス プールが必要です。
  • appGatewayBackendHttpSettings - 通信に使用するポート 80 と HTTP プロトコルを指定します。
  • appGatewayHttpListener - appGatewayBackendPool に関連付けられている既定のリスナー。
  • appGatewayFrontendIP -myAGPublicIPAddressappGatewayHttpListener に割り当てます。
  • rule1 - appGatewayHttpListener に関連付けられている既定のルーティング規則。

バックエンド プールの追加

az network application-gateway address-pool create を使用して、バックエンド サーバーを含めるために必要なバックエンド プールを追加します

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name contosoPool

az network application-gateway address-pool create \
  --gateway-name myAppGateway \
  --resource-group myResourceGroupAG \
  --name fabrikamPool

リスナーの追加

az network application-gateway http-listener create を使用して、トラフィックのルーティングに必要なリスナーを追加します。

Note

Application Gateway または WAF v2 SKU では、リスナーごとに最大 5 つのホスト名を構成することもできます。ホスト名にワイルドカード文字を使用できます。 詳細については、「リスナーにおけるワイルドカードのホスト名」を参照してください。 Azure CLI を使用してリスナーで複数のホスト名とワイルドカード文字を使用するには、--host-name ではなく --host-names を使用する必要があります。 host-names を使用すると、最大 5 つのホスト名をスペースで区切られた値として指定できます。 たとえば、--host-names "*.contoso.com *.fabrikam.com" のように指定します。

az network application-gateway http-listener create \
  --name contosoListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port appGatewayFrontendPort \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway \
  --host-name www.contoso.com

az network application-gateway http-listener create \
  --name fabrikamListener \
  --frontend-ip appGatewayFrontendIP \
  --frontend-port appGatewayFrontendPort \
  --resource-group myResourceGroupAG \
  --gateway-name myAppGateway \
  --host-name www.fabrikam.com   

ルーティング規則の追加

ルールの優先度フィールドが使用されていない場合、ルールは一覧表示された順序で処理されます。 トラフィックは、特異性に関係なく、最初に一致した規則を使って転送されます。 たとえば、同一のポート上に基本リスナーを使用するルールとマルチサイト リスナーを使用するルールがある場合、マルチサイトのルールを適切に動作させるには、リストでマルチサイト リスナーのルールを基本リスナーのルールよりも先に配置する必要があります。

この例では、2 つの新しい規則を作成し、アプリケーション ゲートウェイをデプロイしたときに作成された既定の規則を削除します。 az network application-gateway rule create を使用して、規則を追加することができます。

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name contosoRule \
  --resource-group myResourceGroupAG \
  --http-listener contosoListener \
  --rule-type Basic \
  --address-pool contosoPool

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name fabrikamRule \
  --resource-group myResourceGroupAG \
  --http-listener fabrikamListener \
  --rule-type Basic \
  --address-pool fabrikamPool

az network application-gateway rule delete \
  --gateway-name myAppGateway \
  --name rule1 \
  --resource-group myResourceGroupAG

ルーティング規則に優先度を追加する

より具体的なルールが最初に処理されるようにするには、ルールの優先度フィールドを使用してそのルールの優先度が高くなっていることを確認します。 既存のすべての要求ルーティング規則に対して規則の優先度フィールドを設定する必要があります。また、後で作成される新しい規則にも規則の優先度の値が必要です。

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name wccontosoRule \
  --resource-group myResourceGroupAG \
  --http-listener wccontosoListener \
  --rule-type Basic \
  --priority 200 \
  --address-pool wccontosoPool

az network application-gateway rule create \
  --gateway-name myAppGateway \
  --name shopcontosoRule \
  --resource-group myResourceGroupAG \
  --http-listener shopcontosoListener \
  --rule-type Basic \
  --priority 100 \
  --address-pool shopcontosoPool

仮想マシン スケール セットの作成

この例では、アプリケーション ゲートウェイで 3 つのバックエンド プールをサポートする 3 つの仮想マシン スケール セットを作成します。 作成するスケール セットの名前は、myvmss1myvmss2、および myvmss3 です。 各スケール セットには、IIS をインストールする 2 つの仮想マシン インスタンスが含まれています。

for i in `seq 1 2`; do

  if [ $i -eq 1 ]
  then
    poolName="contosoPool"
  fi

  if [ $i -eq 2 ]
  then
    poolName="fabrikamPool"
  fi

  az vmss create \
    --name myvmss$i \
    --resource-group myResourceGroupAG \
    --image UbuntuLTS \
    --admin-username azureuser \
    --admin-password Azure123456! \
    --instance-count 2 \
    --vnet-name myVNet \
    --subnet myBackendSubnet \
    --vm-sku Standard_DS2 \
    --upgrade-policy-mode Automatic \
    --app-gateway myAppGateway \
    --backend-pool-name $poolName
done

NGINX のインストール

for i in `seq 1 2`; do

  az vmss extension set \
    --publisher Microsoft.Azure.Extensions \
    --version 2.0 \
    --name CustomScript \
    --resource-group myResourceGroupAG \
    --vmss-name myvmss$i \
    --settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],
  "commandToExecute": "./install_nginx.sh" }'

done

ドメインの CNAME レコードの作成

パブリック IP アドレスを使用してアプリケーション ゲートウェイを作成した後は、DNS アドレスを取得し、これを使用してドメインに CNAME レコードを作成できます。 az network public-ip show を使用して、アプリケーション ゲートウェイの DNS アドレスを取得できます。 DNSSettings の fqdn 値をコピーし、作成した CNAME レコードの値として使用します。

az network public-ip show \
  --resource-group myResourceGroupAG \
  --name myAGPublicIPAddress \
  --query [dnsSettings.fqdn] \
  --output tsv

アプリケーション ゲートウェイを再起動すると VIP が変更される可能性があるため、A レコードの使用はお勧めしません。

アプリケーション ゲートウェイのテスト

ブラウザーのアドレス バーにドメイン名を入力します。 http://www.contoso.com. など

アプリケーション ゲートウェイの contoso サイトをテストする

アドレスをもう 1 つのドメインに変更します。次の例のように表示されます。

アプリケーション ゲートウェイの fabrikam サイトをテストする

リソースをクリーンアップする

必要がなくなったら、リソース グループ、アプリケーション ゲートウェイ、およびすべての関連リソースを削除します。

az group delete --name myResourceGroupAG

次のステップ

URL パスベースのルーティング規則のあるアプリケーション ゲートウェイを作成する