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ファイルをアップロードします。簡単ですね。