Application Gatewayを試しました


2015年6月25日付けでMicrosoft Azureに追加された「Application Gateway」について試してみたのでレポートします。(以下、AGと略します。厳しいニオイを撃退してくれそう）

今回はある程度Azureのことが解っていないと厳しいサービスなので、要所要所説明を割愛してありますご了承下さい。なお、この内容は2015年6月26日現在の機能に基づき調査しました。たぶん、更新されると思うので、そのあたりご注意を。

## AGの特徴

- L7のロードバランスができる
- SSLの処理をサーバ側でやらなくて良い
- 課金はAGが作られてから消されるまでの時間
- 現在のところPowerShell経由かREST直叩きという男前仕様

## AG作成の手順

以下の参照ドキュメントの通りに進めますので、一通り熟読が必要です。

https://azure.microsoft.com/ja-jp/documentation/articles/application-gateway-create-gateway/

[追記: 6/26 18:30]
なお、上記のドキュメントに書かれているコマンドをその通り実行しても、同じ出力が得られません。実行時に-verbose付けると出力されるとのことなので、ご注意ください。

### 準備：事前にサーバ群は作成しておくこと

バランスさせたいサーバは同一仮想ネットワークに配置します。なお、AGはSubnetは跨げるので、別Subnetに所属させてOKです。（**つまり、Cloud Serviceを超えてのバランスが可能**）

今回の検証では、2台のサーバを米国東に作りました。

Subnetは

- Subnet-1 172.17.0.0/24
- Subnet-2 172.18.0.0/24

で切り、各Subnetに1台ずつ別のCloud ServiceUbuntu14.04を立ち上げてます。

### １、cmdletより作成

参照ドキュメントにあるコマンドをたたきます。

 例：　```New-AzureApplicationGateway -Name AppGwTest -VnetName testvnet1 -Subnets @("Subnet-1")```

**注意点**

- VnetNameは完全ネットワーク名
旧ポータルの場合は表示されている名前になり、プレビューポータルの場合はプロパティにある完全の名前を使う
Get-AzureVnetSiteで設定をひっぱり、Nameを確認するのがベスト
- 名前に半角SPを含んでいる場合は””で囲う
- Subnetsは１つのみ対応。上記のように@(" ")で囲うこと。
（文法的には配列なので、将来どうなるか解らないです）

### ２、作成完了後、ConfigのためのXMLを作成する

参照ドキュメントにあるXMLをまるっとコピーしてファイルに貼り付け、適時変更します。

**注意点**

- 現在のところRound Robinのみ対応
- 完全なRound Robinにさせたい場合はXMLのCookieBasedAffinityをDisabledにすること
なお、連続でリロードすると偏ります。気持ち待ってからリロードするとRoundをRobinしている感が味わえます。

### ３、Set-AzureApplicationGatewayConfigでXMLを送り込み、Start-AzureApplicationGatewayでGatewayを起動

参照ドキュメントのとおりに実施

**注意点**

- Gatewayは作成された時点から課金となり、Start/Stopは関係ないです。
- Start以降、開始まで15-20分掛かるので、気長に待ちます。
作成完了する固まっていたとStartコマンドがふわっとSuccessと表示されます

### ４、作成完了後に確認する

Get-AzureApplicationGateway なまえ にて、振られたIPなどが確認できます。

**注意点**

- 作成完了後の設定変更はSet-AzureApplicationGatewayで行え、すぐに設定が変更されます。


## 備考

- 作成はPowerShellからのみ。今のところ一覧表示画面が無いので、存在やステータスはコマンドからのみ。
- 各コマンドの実行後の表示はほぼドキュメントとだいぶ違いますが、不安になってはいけません。
- 仮想ネットワークv1にのみ対応、仮想ネットワークv2(つまりARM経由で作成されたネットワーク)については名前を指定しても見つからないとエラーになります。

## 関連リンク

こちらも是非ご確認を。

しばやん雑記「Azure Application Gateway が公開されたので試してみた 」
http://blog.shibayan.jp/entry/20150625/1435214906

ブチザッキ「Azure Application Gateway」
https://buchizo.wordpress.com/2015/06/26/azure-application-gateway/

## 参考：流したXMLはこちら

```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>172.17.0.4</IPAddress>
                <IPAddress>172.18.0.4</IPAddress>
            </IPAddresses>
        </BackendAddressPool>
    </BackendAddressPools>
    <BackendHttpSettingsList>
        <BackendHttpSettings>
            <Name>BackendSetting1</Name>
            <Port>80</Port>
            <Protocol>Http</Protocol>
            <CookieBasedAffinity>Disabled</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>

```