ども、かっぱです。
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
Web サーバーや簡単なアプリケーションに負荷分散セット経由でアクセスする
構成
クラウドサービス内に仮想マシンを構築
- 仮想マシンに必要な情報を定義
$_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 = "FrontEnd" $_ReservedIP = New-AzureReservedIP –ReservedIPName "OrenoReservedIP" –Label "OrenoReservedIP" –Location "Japan West"
- 仮想マシン vm01 を作成
$_vmName = "vm01" $_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"
- 仮想マシン vm01 のエンドポイント VIP とポート番号を確認
Get-AzureVM -ServiceName $_cloudService -Name $_vmName | Get-AzureEndpoint | Select Name,Port,Vip
- 仮想マシン vm02 を作成
$_vmName = "vm02" $_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"
- 仮想マシン vm02 のエンドポイント VIP とポート番号を確認
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/common.rb --node-json node.json --log-level=debug itamae ssh -h ${VIP} -p ${VM01_SSH_PORT} --user=oreadmin --ask_password --sudo roles/common.rb --node-json node.json --log-level=debug
インターネット向けの外部ロードバランサを設定
- memo
- クラウドサービスにはデフォルトでインターネット向けの外部ロードバランサが提供されている - 外部ロードバランサを利用する為には負荷分散セットを設定する必要がある
- 外部からポート 8000 番でアクセスさせるエンドポイントと負荷分散セットを作成
Get-AzureVM -ServiceName $_cloudService -Name "vm01" ` | Add-AzureEndpoint -Name "Http8000-vm01" -Protocol "tcp" -PublicPort 8000 -LocalPort 80 -LBSetName "OrenoLB" -ProbePort 80 -ProbeProtocol "tcp" ` | Update-AzureVM Get-AzureVM -ServiceName $_cloudService -Name "vm02" ` | Add-AzureEndpoint -Name "Http8000-vm02" -Protocol "tcp" -PublicPort 8000 -LocalPort 80 -LBSetName "OrenoLB" -ProbePort 80 -ProbeProtocol "tcp" ` | Update-AzureVM
- 外部からポート 8001 番でアクセスさせるエンドポイントと負荷分散セットをアクセスコントロール付きで作成
# # xxx.xxx.xxx.xxx/32 からのアクセスを許可する # $_acl = New-AzureAclConfig Set-AzureAclConfig -AddRule Permit -RemoteSubnet "xxx.xxx.xxx.xxx/32" -Order 1000 -ACL $_acl -Description "Http8081-Allow"
以下のように出力される。
RuleId : 0 Order : 1000 Action : Permit RemoteSubnet : xxx.xxx.xxx.xxx/32 Description : Http8081-Allow
アクセスコントロールを付与してエンドポイントと負荷分散セットを作成。
Get-AzureVM -ServiceName $_cloudService -Name "vm01" ` | Add-AzureEndpoint -Name "Http8081-vm01" -Protocol "tcp" -PublicPort 8081 -LocalPort 19190 -LBSetName "OrenoLB-8081" -ProbePort 19190 -ProbeProtocol "http" -ProbePath '/api/endpoint/healthcheck' -ACL $_acl ` | Update-AzureVM Get-AzureVM -ServiceName $_cloudService -Name "vm02" ` | Add-AzureEndpoint -Name "Http8081-vm02" -Protocol "tcp" -PublicPort 8081 -LocalPort 19190 -LBSetName "OrenoLB-8081" -ProbePort 19190 -ProbeProtocol "http" -ProbePath '/api/endpoint/healthcheck' -ACL $_acl ` | Update-AzureVM
動作確認
- アクセスコントロールで許可されている拠点より
% curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8000 HTTP/1.1 200 OK Server: nginx/1.10.0 (Ubuntu) Date: Sat, 10 Sep 2016 23:54:00 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sat, 10 Sep 2016 22:09:07 GMT Connection: keep-alive ETag: "57d48483-264" Accept-Ranges: bytes % curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8081/api/endpoint/healthcheck HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 2 Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Authorization, Content-Type Access-Control-Expose-Headers: Authorization Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS Access-Control-Allow-Credentials: true Access-Control-Max-Age: 1728000 Server: Werkzeug/0.11.11 Python/2.7.12 Date: Sat, 10 Sep 2016 23:55:14 GMT
- アクセスコントロールで許可されていない拠点より
$ curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8000 HTTP/1.1 200 OK Server: nginx/1.10.0 (Ubuntu) Date: Sat, 10 Sep 2016 23:59:06 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sat, 10 Sep 2016 22:18:23 GMT Connection: keep-alive ETag: "57d486af-264" Accept-Ranges: bytes # # アクセスコントロールが効いていることが判る # $ curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8081/api/endpoint/healthcheck curl: (28) Connection timed out after 10007 milliseconds
以上
エンドポイント、負荷分散セット...混乱している。