AzureLoadBarancerを使ってバックエンドのIISサーバへ負荷分散させる高可用な構成を作るよ。
チュートリアルを整理しつつやってみました。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/tutorial-load-balancer
以下のようなよくありがちな負荷分散構成を作るよ。

# Azure Load Brancerの作成
PS C:\WINDOWS\system32> New-AzureRmResourceGroup `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Location "EastUS"
ResourceGroupName : myResourceGroupLoadBalancer
Location : eastus
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/0a9f989b-cb7c-406d-a47d-48c673cc752f/resourceGroups/myResourceGroupLoadBalancer
# パブリックIPの作成
PS C:\WINDOWS\system32> $publicIP = New-AzureRmPublicIpAddress `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Location "EastUS" `
>> -AllocationMethod "Static" `
>> -Name "myPublicIP"
# ロードバランサ―の作成
PS C:\WINDOWS\system32> $frontendIP = New-AzureRmLoadBalancerFrontendIpConfig `
>> -Name "myFrontEndPool" `
>> -PublicIpAddress $publicIP
PS C:\WINDOWS\system32> $backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name "myBackEndPool"
PS C:\WINDOWS\system32> $lb = New-AzureRmLoadBalancer `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Name "myLoadBalancer" `
>> -Location "EastUS" `
>> -FrontendIpConfiguration $frontendIP `
>> -BackendAddressPool $backendPool
# 正常性プローブの作成
# アプリの状態を監視することができる
# 80番ポートへアクセスし、200OKであることを15秒間隔でチェックし、2回失敗するとバランシング対象から除外される
PS C:\WINDOWS\system32> Add-AzureRmLoadBalancerProbeConfig `
>> -Name "myHealthProbe" `
>> -LoadBalancer $lb `
>> -Protocol tcp `
>> -Port 80 `
>> -IntervalInSeconds 15 `
>> -ProbeCount 2
ResourceGroupName Name Location Sku Name ProvisioningState
----------------- ---- -------- -------- -----------------
myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded
# 正常性プローブの適用
PS C:\WINDOWS\system32> Set-AzureRmLoadBalancer -LoadBalancer $lb
ResourceGroupName Name Location Sku Name ProvisioningState
----------------- ---- -------- -------- -----------------
myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded
# ロードバランサ―規則の作成
# フロントエンドIPやVMが構成されるバックエンドIP、ポート、使用する正常性プローブの定義を行う
PS C:\WINDOWS\system32> $probe = Get-AzureRmLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe"
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> Add-AzureRmLoadBalancerRuleConfig `
>> -Name "myLoadBalancerRule" `
>> -LoadBalancer $lb `
>> -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
>> -BackendAddressPool $lb.BackendAddressPools[0] `
>> -Protocol Tcp `
>> -FrontendPort 80 `
>> -BackendPort 80 `
>> -Probe $probe
ResourceGroupName Name Location Sku Name ProvisioningState
----------------- ---- -------- -------- -----------------
myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded
# ロードバランサ―定義の更新
PS C:\WINDOWS\system32> Set-AzureRmLoadBalancer -LoadBalancer $lb
ResourceGroupName Name Location Sku Name ProvisioningState
----------------- ---- -------- -------- -----------------
myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded
# 仮想ネットワークの作成
# Create subnet config
PS C:\WINDOWS\system32> $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
>> -Name "mySubnet" `
>> -AddressPrefix 192.168.1.0/24
# Create the virtual network
PS C:\WINDOWS\system32> $vnet = New-AzureRmVirtualNetwork `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Location "EastUS" `
>> -Name "myVnet" `
>> -AddressPrefix 192.168.0.0/16 `
>> -Subnet $subnetConfig
警告: Breaking changes in the cmdlet 'New-AzureRmVirtualNetwork' :
警告: - "The output type 'Microsoft.Azure.Commands.Network.Models.PSVirtualNetwork' is changing"
- The following properties in the output type are being deprecated :
'EnableVmProtection'
# 仮想NICの作成
PS C:\WINDOWS\system32> for ($i=1; $i -le 3; $i++)
>> {
>> New-AzureRmNetworkInterface `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Name myVM$i `
>> -Location "EastUS" `
>> -Subnet $vnet.Subnets[0] `
>> -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
>> }
ResourceGroupName Name Location MacAddress Primary EnableAcceleratedNetworking EnableIPForwarding Provisioni
ngState
----------------- ---- -------- ---------- ------- --------------------------- ------------------ ----------
myResourceGroupLoadBalancer myVM1 eastus False False Succeeded
myResourceGroupLoadBalancer myVM2 eastus False False Succeeded
myResourceGroupLoadBalancer myVM3 eastus False False Succeeded
# 仮想マシンの作成
# 可用性セットにVMを配置する
PS C:\WINDOWS\system32> $availabilitySet = New-AzureRmAvailabilitySet `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Name "myAvailabilitySet" `
>> -Location "EastUS" `
>> -Sku aligned `
>> -PlatformFaultDomainCount 2 `
>> -PlatformUpdateDomainCount 2
# 管理者の資格情報を設定
PS C:\WINDOWS\system32> $cred = Get-Credential
コマンド パイプライン位置 1 のコマンドレット Get-Credential
次のパラメーターに値を指定してください:
Credential
# VMの作成
PS C:\WINDOWS\system32> 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
>> }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
6 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
7 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
8 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
PS C:\WINDOWS\system32> Get-AzureRmVM
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone
----------------- ---- -------- ------ ------ --- ----------------- ----
MYRESOURCEGROUPLOADBALANCER myVM1 eastus Standard_DS1_v2 Windows myVM1 Succeeded
MYRESOURCEGROUPLOADBALANCER myVM2 eastus Standard_DS1_v2 Windows myVM2 Succeeded
MYRESOURCEGROUPLOADBALANCER myVM3 eastus Standard_DS1_v2 Windows myVM3 Succeeded
# VMへのIISのインストール
PS C:\WINDOWS\system32> 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
>> }
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
True OK OK
True OK OK
# パブリックIPアドレスの確認
PS C:\WINDOWS\system32> Get-AzureRmPublicIPAddress `
>> -ResourceGroupName "myResourceGroupLoadBalancer" `
>> -Name "myPublicIP" | select IpAddress
IpAddress
---------
104.45.155.158
数回アクセスしてみると、各VMへバランシングされていることがわかるね。



このチュートリアルとても分かりやすい(^^)
