チュートリアル: Azure PowerShell を使用して Azure 内で Windows 仮想マシンの負荷分散を行って高可用性アプリケーションを作成するTutorial: Load balance Windows virtual machines in Azure to create a highly available application with Azure PowerShell

負荷分散では、着信要求を複数の仮想マシンに分散させることで高可用性を提供します。Load balancing provides a higher level of availability by spreading incoming requests across multiple virtual machines. このチュートリアルでは、トラフィックを分散し高可用性を提供する、Azure Load Balancer のさまざまなコンポーネントについて説明します。In this tutorial, you learn about the different components of the Azure load balancer that distribute traffic and provide high availability. 学習内容は次のとおりです。You learn how to:

  • Azure Load Balancer を作成するCreate an Azure load balancer
  • ロード バランサーの正常性プローブの作成Create a load balancer health probe
  • ロード バランサーのトラフィック ルールを作成するCreate load balancer traffic rules
  • カスタム スクリプト拡張機能を使用して基本的な IIS サイトを作成するUse the Custom Script Extension to create a basic IIS site
  • 仮想マシンを作成してロード バランサーにアタッチするCreate virtual machines and attach to a load balancer
  • 動作中のロード バランサーを表示するView a load balancer in action
  • ロード バランサーに VM を追加または削除するAdd and remove VMs from a load balancer

Azure Cloud Shell を起動するLaunch Azure Cloud Shell

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。It has common Azure tools preinstalled and configured to use with your account. [コピー] をクリックしてコードをコピーし、Cloud Shell に貼り付けて Enter キーを押すだけで、コードを実行することができます。Just click the Copy to copy the code, paste it into the Cloud Shell, and then press enter to run it. Cloud Shell は、次のようにいくつかの方法で起動することができます。There are a few ways to launch the Cloud Shell:

コード ブロックの右上隅にある [使ってみる] をクリックします。Click Try It in the upper right corner of a code block. この記事の Cloud Shell
ブラウザーで Cloud Shell を開きます。Open Cloud Shell in your browser. https://shell.azure.com/powershell
Azure Portal の右上のメニューの [Cloud Shell] ボタンをクリックします。Click the Cloud Shell button on the menu in the upper right of the Azure portal. ポータルの Cloud ShellCloud Shell in the portal

PowerShell をインストールしてローカルで使用する場合、このチュートリアルでは Azure PowerShell モジュール バージョン 5.7.0 以降が必要になります。If you choose to install and use the PowerShell locally, this tutorial requires the Azure PowerShell module version 5.7.0 or later. バージョンを確認するには、Get-Module -ListAvailable AzureRM を実行します。Run Get-Module -ListAvailable AzureRM to find the version. アップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。If you need to upgrade, see Install Azure PowerShell module. PowerShell をローカルで実行している場合、Connect-AzureRmAccount を実行して Azure との接続を作成することも必要です。If you are running PowerShell locally, you also need to run Connect-AzureRmAccount to create a connection with Azure.

Azure Load Balancer の概要Azure load balancer overview

Azure Load Balancer は、着信トラフィックを正常な VM に分散することで高可用性を実現する第 4 層 (TCP、UDP) のロード バランサーです。An Azure load balancer is a Layer-4 (TCP, UDP) load balancer that provides high availability by distributing incoming traffic among healthy VMs. ロード バランサーの正常性プローブは、各 VM の特定のポートを監視し、稼働している VM にのみトラフィックを分散します。A load balancer health probe monitors a given port on each VM and only distributes traffic to an operational VM.

1 つまたは複数のパブリック IP アドレスが含まれるフロントエンド IP 構成を定義します。You define a front-end IP configuration that contains one or more public IP addresses. このフロントエンド IP 構成によって、ロード バランサーとアプリケーションにインターネット経由でアクセスできるようになります。This front-end IP configuration allows your load balancer and applications to be accessible over the Internet.

仮想マシンは、仮想ネットワーク インターフェイス カード (NIC) を使用してロード バランサーに接続されます。Virtual machines connect to a load balancer using their virtual network interface card (NIC). トラフィックを VM に分散するには、バックエンド アドレス プールに、ロード バランサーに接続される仮想 NIC の IP アドレスを含めます。To distribute traffic to the VMs, a back-end address pool contains the IP addresses of the virtual (NICs) connected to the load balancer.

トラフィックのフローを制御するには、VM にマップする特定のポートとプロトコルについて、ロード バランサー規則を定義します。To control the flow of traffic, you define load balancer rules for specific ports and protocols that map to your VMs.

Azure Load Balancer を作成するCreate Azure load balancer

このセクションでは、ロード バランサーの各コンポーネントを作成および設定する方法について説明します。This section details how you can create and configure each component of the load balancer. ロード バランサーを作成する前に、New-AzureRmResourceGroup を使用してリソース グループを作成します。Before you can create your load balancer, create a resource group with New-AzureRmResourceGroup. 次の例では、myResourceGroupLoadBalancer という名前のリソース グループを場所 EastUS に作成します。The following example creates a resource group named myResourceGroupLoadBalancer in the EastUS location:

New-AzureRmResourceGroup `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS"

パブリック IP アドレスの作成Create a public IP address

インターネット上のアプリにアクセスするには、ロード バランサーのパブリック IP アドレスが必要です。To access your app on the Internet, you need a public IP address for the load balancer. New-AzureRmPublicIpAddress を使用してパブリック IP アドレスを作成します。Create a public IP address with New-AzureRmPublicIpAddress. 次の例では、myPublicIP という名前のパブリック IP アドレスを myResourceGroupLoadBalancer リソース グループに作成します。The following example creates a public IP address named myPublicIP in the myResourceGroupLoadBalancer resource group:

$publicIP = New-AzureRmPublicIpAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -AllocationMethod "Static" `
  -Name "myPublicIP"

ロード バランサーの作成Create a load balancer

New-AzureRmLoadBalancerFrontendIpConfig を使用して、フロントエンド IP プールを作成します。Create a frontend IP pool with New-AzureRmLoadBalancerFrontendIpConfig. 次の例では、myFrontEndPool という名前のフロントエンド IP プールを作成し、myPublicIP アドレスをアタッチします。The following example creates a frontend IP pool named myFrontEndPool and attaches the myPublicIP address:

$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig `
  -Name "myFrontEndPool" `
  -PublicIpAddress $publicIP

New-AzureRmLoadBalancerBackendAddressPoolConfig を使用して、バックエンド アドレス プールを作成します。Create a backend address pool with New-AzureRmLoadBalancerBackendAddressPoolConfig. 残りの手順では、VM をこのバックエンド プールにアタッチします。The VMs attach to this backend pool in the remaining steps. 次の例では、myBackEndPool という名前のバックエンド アドレス プールを作成します。The following example creates a backend address pool named myBackEndPool:

$backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name "myBackEndPool"

次に、New-AzureRmLoadBalancer を使用して、ロード バランサーを作成します。Now, create the load balancer with New-AzureRmLoadBalancer. 次の例では、前の手順で作成したフロントエンドとバックエンドの IP プールを使用して myLoadBalancer という名前のロード バランサーを作成します。The following example creates a load balancer named myLoadBalancer using the frontend and backend IP pools created in the preceding steps:

$lb = New-AzureRmLoadBalancer `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myLoadBalancer" `
  -Location "EastUS" `
  -FrontendIpConfiguration $frontendIP `
  -BackendAddressPool $backendPool

正常性プローブの作成Create a health probe

ロード バランサーでアプリの状態を監視するには、正常性プローブを使用します。To allow the load balancer to monitor the status of your app, you use a health probe. 正常性プローブは、ロード バランサーのローテーションに含める VM を、正常性チェックへの応答に基づいて動的に追加したり削除したりする働きをします。The health probe dynamically adds or removes VMs from the load balancer rotation based on their response to health checks. 既定では、15 秒間隔のチェックが 2 回連続でエラーになった VM はロード バランサーのローテーションから外されます。By default, a VM is removed from the load balancer distribution after two consecutive failures at 15-second intervals. 正常性プローブは、プロトコルに基づいて作成するか、またはアプリの特定の正常性チェック ページに基づいて作成します。You create a health probe based on a protocol or a specific health check page for your app.

次の例では、TCP プローブを作成します。The following example creates a TCP probe. よりきめ細やかな正常性チェックを行う場合は、カスタムの HTTP プローブを作成することもできます。You can also create custom HTTP probes for more fine grained health checks. カスタム HTTP プローブを使用する場合は、healthcheck.aspx などの正常性チェック ページを作成する必要があります。When using a custom HTTP probe, you must create the health check page, such as healthcheck.aspx. 対象となるホストをロード バランサーのローテーションに維持するには、プローブが HTTP 200 OK 応答を返す必要があります。The probe must return an HTTP 200 OK response for the load balancer to keep the host in rotation.

TCP 正常性プローブを作成するには、Add-AzureRmLoadBalancerProbeConfig を使用します。To create a TCP health probe, you use Add-AzureRmLoadBalancerProbeConfig. 次の例では、TCP ポート 80 で各 VM を監視する myHealthProbe という名前の正常性プローブを作成します。The following example creates a health probe named myHealthProbe that monitors each VM on TCP port 80:

Add-AzureRmLoadBalancerProbeConfig `
  -Name "myHealthProbe" `
  -LoadBalancer $lb `
  -Protocol tcp `
  -Port 80 `
  -IntervalInSeconds 15 `
  -ProbeCount 2

正常性プローブを適用するには、Set-AzureRmLoadBalancer を使用して、ロード バランサーを更新します。To apply the health probe, update the load balancer with Set-AzureRmLoadBalancer:

Set-AzureRmLoadBalancer -LoadBalancer $lb

ロード バランサー規則の作成Create a load balancer rule

ロード バランサー規則の目的は、一連の VM に対するトラフィックの分散方法を定義することです。A load balancer rule is used to define how traffic is distributed to the VMs. 着信トラフィック用のフロントエンド IP 構成と、トラフィックを受信するためのバックエンド IP プールを、必要な発信元ポートと宛先ポートと共に定義します。You define the front-end IP configuration for the incoming traffic and the back-end IP pool to receive the traffic, along with the required source and destination port. 正常な VM のみでトラフィックを受信するには、使用する正常性プローブの定義も行います。To make sure only healthy VMs receive traffic, you also define the health probe to use.

Add-AzureRmLoadBalancerRuleConfig を使用して、ロード バランサー規則を作成します。Create a load balancer rule with Add-AzureRmLoadBalancerRuleConfig. 次の例では、myLoadBalancerRule という名前のロード バランサー規則を作成し、TCP ポート 80 でトラフィックを負荷分散します。The following example creates a load balancer rule named myLoadBalancerRule and balances traffic on TCP port 80:

$probe = Get-AzureRmLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe"

Add-AzureRmLoadBalancerRuleConfig `
  -Name "myLoadBalancerRule" `
  -LoadBalancer $lb `
  -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
  -BackendAddressPool $lb.BackendAddressPools[0] `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80 `
  -Probe $probe

Set-AzureRmLoadBalancer を使用して、ロード バランサーを更新します。Update the load balancer with Set-AzureRmLoadBalancer:

Set-AzureRmLoadBalancer -LoadBalancer $lb

仮想ネットワークを構成するConfigure virtual network

一部の VM をデプロイしてバランサーをテストする前に、関連する仮想ネットワーク リソースを作成します。Before you deploy some VMs and can test your balancer, create the supporting virtual network resources. 仮想ネットワークの詳細については、Azure 仮想ネットワークの管理に関するチュートリアルを参照してください。For more information about virtual networks, see the Manage Azure Virtual Networks tutorial.

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

New-AzureRmVirtualNetwork を使用して仮想ネットワークを作成します。Create a virtual network with New-AzureRmVirtualNetwork. 次の例では、mySubnet と共に myVnet という名前の仮想ネットワークを作成します。The following example creates a virtual network named myVnet with mySubnet:

# Create subnet config
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
  -Name "mySubnet" `
  -AddressPrefix 192.168.1.0/24

# Create the virtual network
$vnet = New-AzureRmVirtualNetwork `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -Name "myVnet" `
  -AddressPrefix 192.168.0.0/16 `
  -Subnet $subnetConfig

仮想 NIC は、New-AzureRmNetworkInterface を使用して作成します。Virtual NICs are created with New-AzureRmNetworkInterface. 以下の例では、3 つの仮想 NIC を作成します The following example creates three virtual NICs. (以降の手順では、アプリ用に作成する VM ごとに仮想 NIC を 1 つ)。(One virtual NIC for each VM you create for your app in the following steps). いつでも追加の仮想 NIC と VM を作成してロード バランサーに追加することができます。You can create additional virtual NICs and VMs at any time and add them to the load balancer:

for ($i=1; $i -le 3; $i++)
{
   New-AzureRmNetworkInterface `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -Name myVM$i `
     -Location "EastUS" `
     -Subnet $vnet.Subnets[0] `
     -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}

仮想マシンを作成するCreate virtual machines

アプリの高可用性を高めるには、可用性セットに VM を配置します。To improve the high availability of your app, place your VMs in an availability set.

可用性セットを作成するには、New-AzureRmAvailabilitySet を使用します。Create an availability set with New-AzureRmAvailabilitySet. 次の例では、myAvailabilitySet という名前の可用性セットを作成します。The following example creates an availability set named myAvailabilitySet:

$availabilitySet = New-AzureRmAvailabilitySet `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myAvailabilitySet" `
  -Location "EastUS" `
  -Sku aligned `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2

次のように、Get-Credential を使用して VM の管理者のユーザー名とパスワードを設定します。Set an administrator username and password for the VMs with Get-Credential:

$cred = Get-Credential

New-AzureRmVM を使用して VM を作成できるようになりました。Now you can create the VMs with New-AzureRmVM. 次の例では、3 つの VM と必要な仮想ネットワーク コンポーネントがまだ存在しない場合にそれらを作成します。The following example creates three VMs and the required virtual network components if they do not already exist:

for ($i=1; $i -le 3; $i++)
{
    New-AzureRmVm `
        -ResourceGroupName "myResourceGroupLoadBalancer" `
        -Name "myVM$i" `
        -Location "East US" `
        -VirtualNetworkName "myVnet" `
        -SubnetName "mySubnet" `
        -SecurityGroupName "myNetworkSecurityGroup" `
        -OpenPorts 80 `
        -AvailabilitySetName "myAvailabilitySet" `
        -Credential $cred `
        -AsJob
}

-AsJob パラメーターにより、バックグラウンド タスクとして VM が作成されるため、PowerShell プロンプトが表示されます。The -AsJob parameter creates the VM as a background task, so the PowerShell prompts return to you. Job コマンドレットを使用して、バックグラウンド ジョブの詳細を表示できます。You can view details of background jobs with the Job cmdlet. 3 台の VM をすべて作成して構成するには、数分かかります。It takes a few minutes to create and configure all three VMs.

カスタム スクリプト拡張機能を使用して IIS をインストールするInstall IIS with Custom Script Extension

Windows 仮想マシンをカスタマイズする方法に関する先行のチュートリアルで、Windows のカスタム スクリプト拡張機能を使用して VM のカスタマイズを自動化する方法が説明されています。In a previous tutorial on How to customize a Windows virtual machine, you learned how to automate VM customization with the Custom Script Extension for Windows. 同じアプローチを使用して、VM に IIS をインストールして構成することができます。You can use the same approach to install and configure IIS on your VMs.

Set-AzureRmVMExtension を使用して、カスタム スクリプト拡張機能をインストールします。Use Set-AzureRmVMExtension to install the Custom Script Extension. この拡張機能によって powershell Add-WindowsFeature Web-Server が実行され、IIS Web サーバーがインストールされます。次に、VM のホスト名を表示するように Default.htm ページが更新されます。The extension runs powershell Add-WindowsFeature Web-Server to install the IIS webserver and then updates the Default.htm page to show the hostname of the VM:

for ($i=1; $i -le 3; $i++)
{
   Set-AzureRmVMExtension `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -ExtensionName "IIS" `
     -VMName myVM$i `
     -Publisher Microsoft.Compute `
     -ExtensionType CustomScriptExtension `
     -TypeHandlerVersion 1.8 `
     -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
     -Location EastUS
}

ロード バランサーをテストするTest load balancer

ロード バランサーのパブリック IP アドレスを取得するには、Get-AzureRmPublicIPAddress を使用します。Obtain the public IP address of your load balancer with Get-AzureRmPublicIPAddress. 次の例では、先ほど作成した myPublicIP の IP アドレスを取得しています。The following example obtains the IP address for myPublicIP created earlier:

Get-AzureRmPublicIPAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myPublicIP" | select IpAddress

このパブリック IP アドレスを Web ブラウザーに入力できます。You can then enter the public IP address in to a web browser. 次の例のように、Web サイトが表示され、ロード バランサーによって負荷分散されたトラフィックの宛先となった VM のホスト名が表示されます。The website is displayed, including the hostname of the VM that the load balancer distributed traffic to as in the following example:

実行中の IIS Web サイト

アプリを実行している 3 つの VM すべての間で、ロード バランサーがトラフィックを負荷分散していることを確認するには、Web ブラウザーを強制的に最新の情報に更新します。To see the load balancer distribute traffic across all three VMs running your app, you can force-refresh your web browser.

仮想マシンの追加と削除Add and remove VMs

アプリを実行している VM には、OS の更新プログラムをインストールするなどメンテナンスが必要になることもあります。You may need to perform maintenance on the VMs running your app, such as installing OS updates. また、アプリのトラフィックが増大すれば、それに対処するために、新たに VM を追加しなければなりません。To deal with increased traffic to your app, you may need to add additional VMs. このセクションでは、ロード バランサーから VM を除外したりロード バランサーに対して VM を追加したりする方法について説明します。This section shows you how to remove or add a VM from the load balancer.

ロード バランサーから VM を除外するRemove a VM from the load balancer

Get-AzureRmNetworkInterface を使用してネットワーク インターフェイス カードを取得した後、仮想 NIC の LoadBalancerBackendAddressPools プロパティを $null に設定します。Get the network interface card with Get-AzureRmNetworkInterface, then set the LoadBalancerBackendAddressPools property of the virtual NIC to $null. 最後に、仮想 NIC を更新します。Finally, update the virtual NIC.:

$nic = Get-AzureRmNetworkInterface `
    -ResourceGroupName "myResourceGroupLoadBalancer" `
    -Name "myVM2"
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzureRmNetworkInterface -NetworkInterface $nic

アプリを実行している残りの 2 つの VM の間で、ロード バランサーがトラフィックを負荷分散していることを確認するには、Web ブラウザーを強制的に最新の情報に更新します。To see the load balancer distribute traffic across the remaining two VMs running your app you can force-refresh your web browser. これで VM に対して、OS 更新プログラムのインストールや VM の再起動などのメンテナンスを行うことができます。You can now perform maintenance on the VM, such as installing OS updates or performing a VM reboot.

ロード バランサーに VM を追加するAdd a VM to the load balancer

VM のメンテナンスを実施した後や、処理能力の引き上げが必要となった場合は、Get-AzureRMLoadBalancer から仮想 NIC の LoadBalancerBackendAddressPools プロパティを BackendAddressPool に設定します。After performing VM maintenance, or if you need to expand capacity, set the LoadBalancerBackendAddressPools property of the virtual NIC to the BackendAddressPool from Get-AzureRMLoadBalancer:

ロード バランサーを取得します。Get the load balancer:

$lb = Get-AzureRMLoadBalancer `
    -ResourceGroupName myResourceGroupLoadBalancer `
    -Name myLoadBalancer 
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzureRmNetworkInterface -NetworkInterface $nic

次の手順Next steps

このチュートリアルでは、ロード バランサーを作成し、それに VM をアタッチしました。In this tutorial, you created a load balancer and attached VMs to it. 以下の方法について学習しました。You learned how to:

  • Azure Load Balancer を作成するCreate an Azure load balancer
  • ロード バランサーの正常性プローブの作成Create a load balancer health probe
  • ロード バランサーのトラフィック ルールを作成するCreate load balancer traffic rules
  • カスタム スクリプト拡張機能を使用して基本的な IIS サイトを作成するUse the Custom Script Extension to create a basic IIS site
  • 仮想マシンを作成してロード バランサーにアタッチするCreate virtual machines and attach to a load balancer
  • 動作中のロード バランサーを表示するView a load balancer in action
  • ロード バランサーに VM を追加または削除するAdd and remove VMs from a load balancer

次のチュートリアルに進み、VM ネットワークの管理方法を学習してください。Advance to the next tutorial to learn how to manage VM networking.