Azure Traffic Manager で PowerShell から外部エンドポイントおよび加重ラウンド ロビンを使用可能に
このポストは、6 月 26 日に投稿した Azure Traffic Manager External Endpoints and Weighted Round Robin via PowerShell の翻訳です。
マイクロソフトは TechEd North America (英語) において、Azure Traffic Manager が外部から Azure に向けたエンドポイントをサポートしたことを発表しました。また、この他に、ラウンド ロビン方式の負荷分散を行う際に加重を考慮する機能が追加されました。この 2 つの機能を使用すると、ハイブリッド環境でオンプレミスとクラウドの間でトラフィックを分散する場合など、これまでより広い範囲のシナリオに対応できるようになります。
現在、これらの機能は、Traffic Manager をサポートするように新たに拡張された PowerShell コマンドレットから使用できます。
概要
Traffic Manager は、同一データ センターで実行されているか、世界各地のデータ センターで実行されているかを問わず、複数のサービスからの受信トラフィックの負荷分散を行う機能です。Traffic Manager を使用すると、エンド ユーザーを最寄りのデプロイメントにルーティングすることでアプリケーションのパフォーマンスを向上させたり、サービスを監視し障害発生時に自動的にフェールオーバーを行うことで高い可用性を得ることができます。
Traffic Manager は、最近まで Azure Cloud Services (IaaS と PaaS の両方) および Azure Web Sites のみでサポートされていました。しかし、今回新たに、外部から Azure に向けたエンドポイントでも Traffic Manager がサポートされるようになりました。また、ラウンド ロビン方式の負荷分散で加重が考慮されるようになり、各エンドポイント間での負荷分散をより細かく制御できるようになりました。
これらの機能強化により、従来よりも幅広いアプリケーションで Traffic Manager のメリットを活用できるようになり、さまざまなシナリオに対応可能になります。
たとえば、外部エンドポイントがサポートされたことで、Traffic Manager を利用すれば、Azure を使用して既存のオンプレミスまたは外部でホストされているデプロイメントを拡張することができます。これにより、パフォーマンスが向上される地理的な場所の増加、アクティブ/アクティブまたはフェールオーバーによる冗長性の向上、「クラウド バースト」と呼ばれる需要急増への対処での能力向上または継続的な能力向上が期待されます。また、外部エンドポイントのサポートにより、従来は不可能だった、Traffic Manager のプロファイルを異なる Azure サブスクリプションにまたがるサービスで使用できるようになります。
加重ラウンド ロビン機能では、デプロイメント間の負荷分散を細かく設定して使用率を最大化したり、異なるデプロイメントに少量のトラフィックを流して「A/B テスト」スキームを実施したりすることが可能です。この機能を外部エンドポイントと併用すると、最初はすべてのトラフィックをオンプレミスのアプリケーションで処理し、ダイヤルを回すように徐々にトラフィックをクラウドベースのバージョンに移行することで、オンプレミスのアプリケーションをスムーズにクラウドに移行することができます。
これらの機能は、現時点では REST API および新たに導入された Traffic Manager 用 PowerShell コマンドレット (英語) から使用できます。Azure 管理ポータルからは使用できません。ここからは、新しく Traffic Manager をサポートした PowerShell でこれらの機能を使用する方法を説明します。
はじめに
Azure PowerShell の使用を開始する方法については、「Azure PowerShell のインストールと構成 (英語)」を参照してください。また、バージョン 0.8.3 またはそれ以降のバージョンをご使用ください。
既存のプロファイルおよびエンドポイントの表示
Get-AzureTrafficManagerProfile コマンドレットで Profile オブジェクトの配列を取得し、表示することができます。
PS C:\> $profiles = Get-AzureTrafficManagerProfile
PS C:\> $profiles | Format-Table
Name DomainName Status
---- ---------- ------
MyProfile myprofile.trafficmanage... Enabled
websites websites.trafficmanager... Enabled
この他に、-Name パラメーターを指定することにより、特定の Profile オブジェクトのみを取得することもできます。各 Profile オブジェクトにはプロファイル名、Traffic Manager のドメイン、TTL、およびエンドポイントの監視設定のフィールドがあります。
PS C:\> $profile = Get-AzureTrafficManagerProfile -Name "MyProfile"
PS C:\> $profile | Format-List
TimeToLiveInSeconds : 30
MonitorRelativePath : /
MonitorPort : 80
MonitorProtocol : Http
LoadBalancingMethod : RoundRobin
Endpoints : {tm-demo-us.cloudapp.net, www.microsoft.com}
MonitorStatus : CheckingEndpoints
Name : MyProfile
DomainName : myprofile.trafficmanager.net
Status : Enabled
他に、エンドポイントの配列も取得できます。これには、エンドポイントのドメイン名、場所、種類、ステータス、監視ステータス、加重が含まれています。
PS C:\> $profile.Endpoints | Format -
DomainName Location Type Status MonitorStatus Weight
---------- -------- ---- ------ ------------- ------
tm-demo-us... CloudService Enabled Online 1
www.micros... Any Enabled Online 1
プロファイルの作成とエンドポイントの追加
通常は、Traffic Manager のプロファイルは Profile オブジェクトで表されます。この Profile をオフラインで構成するには、コマンドレットを使用して、構成が終了したら Set-AzureTrafficManagerProfile コマンドレットで Azure に読み込みます (実際に呼び出すことができる Azure 管理 API コマンドレットは New-AzureTrafficManagerProfile と Set-AzureTrafficManagerProfile のみです)。
次の例では、Traffic Manager のプロファイルを新規作成し、2 つのエンドポイントを追加して、その後 Azure に送信しています。
PS C:\> $profile = New-AzureTrafficManagerProfile -Name "MyProfile" -DomainName "myprofile.trafficmanager.net" -LoadBalancingMethod "RoundRobin" -Ttl 30 -MonitorProtocol "Http" -MonitorPort 80 -MonitorRelativePath "/"
PS C:\> $profile = Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $profile -DomainName "myapp-eu.cloudapp.net" -Status "Enabled" -Type "CloudService"
PS C:\> $profile = Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $profile -DomainName "myapp-us.cloudapp.net" -Status "Enabled" -Type "CloudService"
PS C:\> Set-AzureTrafficManagerProfile –TrafficManagerProfile $profile
これらのコマンドは、(この記事でこれ以降に紹介するサンプルと同様に)「パイプ処理」が可能です。
PS C:\> New-AzureTrafficManagerProfile -Name "MyProfile" -DomainName "myprofile.trafficmanager.net" -LoadBalancingMethod "RoundRobin" -Ttl 30 -MonitorProtocol "Http" -MonitorPort 80 -MonitorRelativePath "/" | Add-AzureTrafficManagerEndpoint -DomainName "myapp-eu.cloudapp.net" -Status "Enabled" -Type "CloudService" | Add-AzureTrafficManagerEndpoint -DomainName "myapp-us.cloudapp.net" -Status "Enabled" -Type "CloudService" | Set-AzureTrafficManagerProfile
外部エンドポイント
Add-AzureTrafficManagerEndpoint コマンドレットを使用すると、外部エンドポイント (Azure の外部に存在するエンドポイント) を追加できます。このコマンドでは、DomainName パラメーターでエンドポイントのドメイン名を指定し、Type を “Any” に指定します。
PS C:\> Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $profile -DomainName "www.microsoft.com" -Status "Enabled" -Type "Any" | Set-AzureTrafficManagerProfile
外部エンドポイントとパフォーマンス方式の負荷分散を同時に使用する場合は、Location パラメーターを追加する必要があります。このパラメーターは外部エンドポイントの場所を Azure に通知するもので、Traffic Manager がトラフィックを地理的に適切にルーティングする際に役立ちます。
PS C:\> Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $profile -DomainName "www.microsoft.com" -Status "Enabled" -Type "Any" -Location "North Europe" | Set-AzureTrafficManagerProfile
Location パラメーターには世界中に存在する Azure データ センターの場所を指定できます。この場所は、Get-AzureLocation コマンドレットを使用すると確認できます。
PS C:\> $loc = Get-AzureLocation
PS C:\> $loc.Name | Format-List
East Asia
Southeast Asia
North Europe
West Europe
East US
West US
Japan East
Japan West
Brazil South
North Central US
South Central US
負荷分散方式をラウンド ロビンなどに変更し、その後パフォーマンスに変更した場合、Traffic Manager は以前に設定したエンドポイントの場所を記憶 (負荷分散方式に応じて無視) しているため、再度設定する必要はありません。
エンドポイントの加重
加重は、Traffic Manager のポリシーでラウンド ロビン負荷分散方式を使用している場合にのみ適用されます。加重はすべての種類のエンドポイントで使用できます。トラフィックは、その時点で有効で正常なエンドポイントすべてに対して、加重に比例して分散されます。
下記の例に示すように、加重は Weight パラメーターを使用して 1 ~ 1,000 の間で指定できます。このパラメーターはオプションで、既定ではすべてのエンドポイントの加重が 1 に設定されます。
PS C:\> Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $profile -DomainName "tm-demo-us.cloudapp.net" -Status "Enabled" -Type "CloudService" -Weight 70 | Set-AzureTrafficManagerProfile
加重も、エンドポイントの場所と同様に、負荷分散方式が変更されても (パフォーマンスに変更され、その後ラウンド ロビンに戻された場合など) 記憶されています (ただし、負荷分散方式に応じて無視されます)。
Traffic Manager は DNS レベルで動作します。また、DNS は DNS クライアントと、企業や ISP が実行するローカルの DNS リゾルバーからキャッシュされるように設計されています。加重を考慮したトラフィック分散は、多数のクライアントが存在する一般的なインターネットに接続されたアプリケーションで最も効果的に動作します。この場合、DNS キャッシュはトラフィックの分散には影響しません。ただし、クライアント数が少ない場合、または、すべてのクライアントが少数のローカル DNS サーバーを使用している場合、キャッシュによりトラフィック分散が影響を受ける場合があります。このようなときには、アプリケーション レベルの HTTP 302 リダイレクトを使用するなど、トラフィックを接続単位で分散したほうが良い結果が得られます。
その他の一般的な使用方法
Traffic Manager のプロファイルの一般的な使用方法には、他に次のようなものがあります。
エンドポイントの有効化と無効化
エンドポイントを無効化し、負荷分散のローテーションから除外することができます。無効化したエンドポイントには Traffic Manager では料金は発生しませんが、プロファイルは維持されるため、再度有効化するのは簡単です。
PS C:\> $profile = Get-AzureTrafficManagerProfile -Name "MyProfile"
PS C:\> $profile.Endpoints[0].Status = "Disabled"
PS C:\> Set-AzureTrafficManagerProfile –TrafficManagerProfile $profile
エンドポイントの並べ替え
フェールオーバー負荷分散方式を使用している場合、フェールオーバー シーケンスはエンドポイントの順序により決定されます。次の例では、エンドポイントの組み合わせのシーケンスを指定し直しています。
PS C:\> $profile = Get-AzureTrafficManagerProfile -Name "MyProfile"
PS C:\> $profile.Endpoints[0],$profile.Endpoints[1] = $profile.Endpoints[1],$profile.Endpoints[0]
PS C:\> Set-AzureTrafficManagerProfile –TrafficManagerProfile $profile
エンドポイントの削除
Remove-AzureTrafficManagerEndpoint コマンドレットを使用すると、エンドポイントを削除できます。
PS C:\> $profile = Get-AzureTrafficManagerProfile -Name "MyProfile"
PS C:\> Remove-AzureTrafficManagerEndpoint -TrafficManagerProfile $profile -DomainName www.microsoft.com
PS C:\> Set-AzureTrafficManagerProfile –TrafficManagerProfile $profile
エンドポイントの監視設定の更新
この例では、監視パスを変更して専用の監視ページを指定しています。
PS C:\> $profile = Get-AzureTrafficManagerProfile -Name "MyProfile"
PS C:\> $profile.MonitorRelativePath = "/monitor.aspx"
PS C:\> Set-AzureTrafficManagerProfile –TrafficManagerProfile $profile
プロファイルの無効化
Traffic Manager のプロファイルは、すべて無効化することができます。これにより、すべてのエンドポイントへのすべてのトラフィックが停止され、同時に該当するプロファイルの使用料金も発生しなくなります。無効化は、次の専用のコマンドレットにより実行します。
PS C:\> Disable-AzureTrafficManagerProfile -Name "MyProfile"
PS C:\> Enable-AzureTrafficManagerProfile -Name "MyProfile"
プロファイルの削除
最後に、Traffic Manager のプロファイルをすべて削除する方法を紹介します (Force フラグにより、すべての確認メッセージがオーバーライドされます)。
PS C:\> Remove-AzureTrafficManagerProfile -Name "MyProfile" -Force
よく寄せられる質問
Azure 管理ポータルで外部エンドポイントや加重を使用することはできますか。
これらの機能は、現時点では REST API および PowerShell コマンドレットでのみ構成可能です。Azure 管理ポータルからは使用できません。
ただし、外部エンドポイントや加重を使用したプロファイルのステータスは、引き続き Azure 管理ポータルで表示できます。また、エンドポイントの有効化または無効化や監視設定の構成など、プロファイルのその他の設定を管理することもできます。
Azure のエンドポイント (Cloud Services および Web Sites) と外部エンドポイントを同じ Traffic Manager のプロファイルに混在させることはできますか。
はい。プロファイル内で異なる種類のエンドポイントを組み合わせるうえで、特に制限はありません。
外部エンドポイントおよび加重の導入による料金モデルの変更はありますか。
外部エンドポイントの料金は、Azure ベースのエンドポイントよりも高くなります。加重については無料でご利用いただけます。詳細については、料金のページをご覧ください。
Azure Traffic Manager は Azure SDK または Xplat-CLI でサポートされていますか。
Traffic Manager 管理ライブラリは、.NET SDK (英語) に含まれていますが、現時点では Java SDK、Node.js SDK、および Xplat-CLI ではサポートされていません。
Azure サービスを外部エンドポイントとしてセットアップすることはできますか。
はい。外部エンドポイントを使用して他の Azure サービスを参照できます (ただし Web Sites を除く)。この場合、他の Azure ベースのエンドポイントと同じ料金が適用されます。ただし、Cloud Services や Web Sites と異なり、基盤となるサービスを無効化しても、それに対応する Traffic Manager のエンドポイントに対しては、Traffic Manager で明示的に無効化または削除しない限り、引き続き料金が発生します。
Azure Traffic Manager に関する詳細情報はどこで入手できますか。
Azure ポータルから、Traffic Manager サービスおよびそのシナリオの概要 (英語) を参照できます。料金や SLA の詳細も確認できます。
MSDN には、Traffic Manager の負荷分散方式やエンドポイントの監視、構成などの説明を含む詳細な概要が用意されています。
DNS や Traffic Manager に関する Azure の不明点がありましたら、Azure の有償サポート プランの他に、MSDN フォーラムもご利用いただけます。また、フィードバック用サイト (英語) では、新機能のご要望の投稿や、既にお寄せいただいているご要望への投票をお待ちしております。