ども、かっぱです。
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
内部ロードバランサを構成する
構成
クラウドサービス内に仮想マシンを構築
- 仮想マシンに必要な情報を定義
$_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"
- 仮想マシン vm03 を作成
$_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
- 仮想マシン vm04 を作成
$_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)
交互にアクセスしているわけでは無いが、分散アクセスはされているように見える。
以上
メモでした。