Shallow Diveというか適当にみてみました。
詳しくはしばやん雑記をどうぞ。
作り方
Azure PowerShellから New-AzureApplicationGateway を実行します。
New-AzureApplicationGateway -Name BuchiAppGW -VnetName "Group 4thSubRG TESTVNET" -Subnets @("SUBNET1") -GatewaySize Small
インスタンスサイズはSmall/Medium/Largeから今のところ選択できます。また必ずVNETとそのSubnetを指定する必要があります。
※Subnetは複数指定できるようになっていますが、現状複数指定するとエラーになります。
> New-AzureApplicationGateway -Name BuchiAppGW -VnetName "Group 4thSubRG TESTVNET" -Subnets @("SUBNET1","SUBNET2","SUBNET3","SUBNET4") New-AzureApplicationGateway : BadRequest: Only one subnet can be provided in the subnet list At line:1 char:1 + New-AzureApplicationGateway -Name BuchiAppGW -VnetName "Group 4thSubRG TESTVNET" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [New-AzureApplicationGateway], CloudException + FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceManagement.Network.ApplicationGateway.NewApplic ationGatewayCommand
作成後、振り先など設定を記述したXMLを作って Set-AzureApplicationGatewayConfigを実行します。
Set-AzureApplicationGatewayConfig -Name BuchiAppGW -ConfigFile test.xml Name HTTP Status Code Operation ID Error ---- ---------------- ------------ ----- Successful OK 0797a28a-16fa-b6d1-9f68-50dc96f26a99
XMLはこんな感じです。(コピペ)
<?xml version="1.0" encoding="utf-8"?> <ApplicationGatewayConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure"> <FrontendPorts> <FrontendPort> <Name>FrontendPort1</Name> <Port>80</Port> </FrontendPort> </FrontendPorts> <BackendAddressPools> <BackendAddressPool> <Name>BackendPool1</Name> <IPAddresses> <IPAddress>10.0.0.1</IPAddress> <IPAddress>10.0.0.2</IPAddress> </IPAddresses> </BackendAddressPool> </BackendAddressPools> <BackendHttpSettingsList> <BackendHttpSettings> <Name>BackendSetting1</Name> <Port>80</Port> <Protocol>Http</Protocol> <CookieBasedAffinity>Enabled</CookieBasedAffinity> </BackendHttpSettings> </BackendHttpSettingsList> <HttpListeners> <HttpListener> <Name>HTTPListener1</Name> <FrontendPort>FrontendPort1</FrontendPort> <Protocol>Http</Protocol> </HttpListener> </HttpListeners> <HttpLoadBalancingRules> <HttpLoadBalancingRule> <Name>HttpLBRule1</Name> <Type>basic</Type> <BackendHttpSettings>BackendSetting1</BackendHttpSettings> <Listener>HTTPListener1</Listener> <BackendAddressPool>BackendPool1</BackendAddressPool> </HttpLoadBalancingRule> </HttpLoadBalancingRules> </ApplicationGatewayConfiguration>
FrontendPort … Application Gatewayの外側のポートの定義です。このポートにきた通信をBackendPoolに流します
BackendAddressPool … 振り先のIPアドレス定義です。同じVNETのSubnetかパブリックのIPアドレスやVIPを指定します
BackendHttpSettingsList … 振り先の設定(ポート、プロトコル、CookieベースのAffinityのOn/Off)
HttpListener … 外側の設定。protocolはケースセンシティブでhttpかhttpsです。
HttpLoadBalancingRule … ARR的な挙動を決めます。定義したフロントエンドやバックエンドの定義を指定します。またTypeは負荷分散の方法を指定しますが現状「basic」(ラウンドロビン)のみのようです。
状態などはGet-AzureApplicationGatewayで参照できます。
>Get-AzureApplicationGateway -Name BuchiAppGW Name : BuchiAppGW Description : VnetName : Group 4thSubRG TESTVNET Subnets : {SUBNET1} InstanceCount : 2 GatewaySize : Small State : Stopped VirtualIPs : {} DnsName :
後は Start-ApplicationGateway で起動します。
Start-AzureApplicationGateway -Name BuchiAppGW Name HTTP Status Code Operation ID Error ---- ---------------- ------------ ----- Successful OK 9018a5e7-78b0-b7b1-bb2b-f6558a646e6f
※ 今のところ結構時間(15分とか?)かかります。
起動後はStateがRunningになりグローバルのIPアドレスやDNS名が振られます。
Get-AzureApplicationGateway Name : BuchiAppGW Description : VnetName : Group 4thSubRG TESTVNET Subnets : {SUBNET1} InstanceCount : 2 GatewaySize : Small State : Running VirtualIPs : {104.214.139.177} DnsName : appgw-e35180f9-c14b-4d5c-9292-37498a21b3c0.cloudapp.net
ちなみにVNET側の一覧には表示されません。
また同じVNETからpingは通るしRDPも開いてる様子ですが当然ID/Passわからないので接続できません。
あとはVIPやDNS名を指定してDNSに登録したりすればOKですね。
止め方
Stop-AzureApplicationGatewayを使用します。止めるとVIPやDNS名が解放されます。完全に削除するにはRemove-AzureApplicationGatewayを使用します。
注意点
- 現状、参加させることができるSubnetは1つ
- 仮想ネットワークはv1(Azureポータルなどから作れる仮想ネットワークv2は不可)
- ARMでも管理できません
- 使われているのはARR2.5なのでWebSocket不可
SSL接続用の証明書
Add-AzureApplicationGatewaySslCertificate を使ってPFXファイルをアップロードします。簡単ですね。