読者です 読者をやめる 読者になる 読者になる

ようへいの日々精進XP

よかろうもん

PowerShell で操作する Azure メモ(5)

ども、かっぱです。

tl;dr

引続き、PowerShell で Azure を操作するメモ。

操作する環境は以下の通り。

PS C:\Users\Administrator\Downloads> [System.Environment]::OSVersion

                          Platform ServicePack                        Version                            VersionString
                          -------- -----------                        -------                            -------------
                           Win32NT                                    6.3.9600.0                         Microsoft Windows NT 6.3.9600.0

PS C:\Users\Administrator\Downloads> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

内部ロードバランサを構成する

構成

f:id:inokara:20160911234015p:plain

クラウドサービス内に仮想マシンを構築

$_locationName  = "Japan West"
$_cloudService  = "oreno-cloudservice01"
$_vmType        = "Small"
$_imageName     = @(Get-AzureVMImage | ? {$_.OS -eq "Linux" -and $_.ImageFamily -eq "Ubuntu Server 16.04 LTS"} ` | Sort-Object PublishedDate –Descending | Select-Object -First 1 ).ImageName
$_adminUser     = "oreadmin"
$_adminPassword = "YourPassword!01"
$_vnetName      = @(Get-AzureVNetSite -VNetName "Group oreno-cloudservice01 TestVNet01").Name
$_subNet        = "BackEnd"
$_vmName        = "vm03"
$_vmConfig = `
New-AzureVMConfig -Name $_vmName -InstanceSize $_vmType -ImageName $_imageName `
| Add-AzureProvisioningConfig -Linux -LinuxUser $_adminUser –Password $_adminPassword `
| Set-AzureVMBGInfoExtension `
| Set-AzureSubnet -SubnetNames $_subNet `
| New-AzureVM -ServiceName $_cloudService  -VNetName $_vnetName -Location $_locationName -WaitForBoot -ReservedIPName "OrenoReservedIP"
  • 仮想マシン vm03 のエンドポイント VIP とポート番号を確認
$_vmName        = "vm03"
Get-AzureVM -ServiceName $_cloudService -Name $_vmName  | Get-AzureEndpoint | Select Name,Port,Vip
$_vmName        = "vm04"
$_vmConfig = `
New-AzureVMConfig -Name $_vmName -InstanceSize $_vmType -ImageName $_imageName `
| Add-AzureProvisioningConfig -Linux -LinuxUser $_adminUser –Password $_adminPassword `
| Set-AzureVMBGInfoExtension `
| Set-AzureSubnet -SubnetNames $_subNet `
| New-AzureVM -ServiceName $_cloudService  -VNetName $_vnetName -Location $_locationName -WaitForBoot -ReservedIPName "OrenoReservedIP"
  • 仮想マシン vm04 のエンドポイント VIP とポート番号を確認
$_vmName        = "vm04"
Get-AzureVM -ServiceName $_cloudService -Name $_vmName  | Get-AzureEndpoint | Select Name,Port,Vip

仮想マシンに雑なアプリケーションをデプロイ

itamae ssh -h ${VIP} -p ${VM01_SSH_PORT} --user=oreadmin --ask_password --sudo roles/frontend.rb --node-json node.json --log-level=debug
itamae ssh -h ${VIP} -p ${VM01_SSH_PORT} --user=oreadmin --ask_password --sudo roles/frontend.rb --node-json node.json --log-level=debug

アプリケーションは仮想マシンのホスト名を JSON で返すだけのアプリケーション。

内部ロードバランサをクラウドサービス内に作成

  • 内部ロードバランサをクラウドサービス内に作成
Add-AzureInternalLoadBalancer -InternalLoadBalancerName "OrenoInternalLB" -ServiceName $_cloudService -SubnetName $_subNet -StaticVNetIPAddress "192.168.2.100"
  • 作成した内部ロードバランサを利用してエンドポイントと負荷分散セットを作成
Get-AzureVM -ServiceName $_cloudService -Name "vm03" `
| Add-AzureEndpoint -Name "Tcp19190-vm01" -Protocol "tcp" -PublicPort 80 -LocalPort 19190 -LBSetName "OrenoInternalLB" -ProbePort 19190 -ProbeProtocol "http" -ProbePath '/api/endpoint/healthcheck' –InternalLoadBalancerName "OrenoInternalLB" `
| Update-AzureVM


Get-AzureVM -ServiceName $_cloudService -Name "vm04" `
| Add-AzureEndpoint -Name "Tcp19190-vm02" -Protocol "tcp" -PublicPort 80 -LocalPort 19190 -LBSetName "OrenoInternalLB" -ProbePort 19190 -ProbeProtocol "http" -ProbePath '/api/endpoint/healthcheck' –InternalLoadBalancerName "OrenoInternalLB" `
| Update-AzureVM

動作確認

  • run
while true; do curl ${InternalLB IP Address}/api/endpoint/hostname -w "\n"; done
  • output
(snip)

{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm03"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}
{"hostname": "vm04"}

(snip)

交互にアクセスしているわけでは無いが、分散アクセスはされているように見える。

以上

メモでした。