こんにちは。最近は絶賛早起き中の本夛です。
業務の一環でAzureのTraffic Managerを利用する機会がありました。無事に稼働はしているのですが、構築中に疑問に思ったことや、社内からの質問もありましたので、忘れないうちに調べたことについてレポートします。
背景
今回、調査することになったキッカケは「とあるリージョンで障害が発生したら、URLを変更せずに別のリージョンに切り替えたい。」というスタッフのとあるつぶやきからでした。
この要件であれば、Traffic Managerの仕組みで十分に賄えます。しかも、偶然にもTraffic Managerを触っていたこともあり、いろいろと試そうと思っていたところでしたので、PowerShellで組んでみたら面白そう!と興味本位で調べてみることにしました。
今回確認すること(目次)
今回、次の3点を確認していきます。
- Traffic Managerの挙動
- PowerShellによるTraffic Managerの設定
- App Serviceのプラン
(1)Traffic Managerの環境を準備する
まずは環境の準備を行います。Traffic Manager と App Service を利用して【構成図1】の構成を構築しました。それぞれ次の通りです。
- Traffic Manager
- tmtest000.trafficmanager.net(以後、TM)
- App Service
- tmtest001.azurewebsites.net(以後、App1)
- tmtest002.azurewebsites.net(以後、App2)
- tmtest003.azurewebsites.net(以後、App3)
その他に、TMのプロファイルからエンドポイントにApp1とApp2の追加を行いました。動作は至って簡単です。TMにブラウザでアクセスをした時に、App1で障害が発生していた場合、App2を表示するという単純なものとなります。
なお、Traffic ManagerでApp Serviceを利用する場合、別々のリージョンに配置する必要がありますので、ご注意ください。
【構成図1】Traffic ManagerとApp Service x2 で構成
【Traffic Managerプロファイル1】Traffic Managerのエンドポイントの設定。優先度10のendpoint001が最優先となる。
【DNS1】DNSの名前解決の結果。優先度10のendpoint001のレコードが返される。
【結果1】ブラウザの表示結果。App1 が表示される。
(2)Traffic ManagerのエンドポイントにコマンドからApp Serviceを追加する
負荷分散先を動的に切り替えるために、PowerShellを使用して【構成図2】の構成を組んでみます。
【構成図2】TMにApp3のエンドポイントを追加して、TMの表示はApp3が表示されるようにする。
今回は、Aure Traffic Manager Cmdlets の [New-AzureRmTrafficManagerEndpoint] を使用しました。コマンドは次の通りです。MSDNはこちらです。
New-AzureRmTrafficManagerEndpoint -Name endpoint003 -ProfileName tmtest000 -ResourceGroupName tmtest-rg -Type AzureEndpoints -EndpointStatus Enabled -TargetResourceId "/subscriptions/489f7059-aef9-4eb7-8662-8f2b6a16c220/resourceGroups/tmtest-RG/providers/Microsoft.Web/sites/tmtest003" -Priority 5
コマンド実行後、AzureポータルのTraffic Managerのプロファイルの画面では、【Traffic Managerプロファイル2】のとおり、endpoint003として値が追加されました。優先度は5となるため、TMは最優先で表示されるはずです。
【Traffic Managerプロファイル2】Traffic Managerのエンドポイントの設定。優先度5のendpoint003が最優先となる。
コマンドプロンプトで名前解決をしてみましょう。【DNS2】のとおり、TMを名前解決をするとエイリアスはApp3を返してくれるようになり、優先度5が有効になったことが確認できました。
【DNS2】DNSの名前解決の結果。優先度5のendpoint003のエイリアスが返される。
次はブラウザで確認してみましょう。【結果2】のとおり、ブラウザではApp3にアクセスされていることが確認できました。
【結果2】ブラウザの表示結果。App3 が表示される。
(3)Traffic Managerのエンドポイントにコマンドから外部エンドポイントを追加する
次は外部エンドポイントとして、www.nextscape.net(以後、Site)を表示させる【構成図3】の構成を組んでみます。
【構成図3】TMにSiteのエンドポイントを追加して、TMの表示はSiteが表示されるようにする。
こちらも【構成図2】と同じコマンドを使用しますが、引数のTypeがExternalEndpointsに変更されています。変更点は赤文字にしてあります。
New-AzureRmTrafficManagerEndpoint -Name endpoint004 -ProfileName tmtest000 -ResourceGroupName tmtest-rg -Type ExternalEndpoints -EndpointStatus Enabled -Target "www.nextscape.net" -Priority 1
コマンド実行後、AzureポータルのTraffic Managerのプロファイルの画面では、【Traffic Managerプロファイル3】のとおり、endpoint004として値が追加されました。優先度は1となるため、TMは最優先で表示されるはずです。
【Traffic Managerプロファイル3】Traffic Managerのエンドポイントの設定。優先度1のendpoint004が最優先となる。
コマンドプロンプトで名前解決をしてみましょう。【DNS3】のとおり、TMを名前解決をするとエイリアスはApp4を返してくれるようになり、優先度1が有効になったことが確認できました。
【DNS3】DNSの名前解決の結果。優先度1のendpoint004のエイリアスが返される。
次はブラウザで確認してみましょう。【結果3】のとおり、ブラウザではNextscapeのホームページにアクセスされていることが確認できました。
【結果3】ブラウザの表示結果。Nextscapeのホームページ が表示される。
(4)Traffic Managerのエンドポイントを削除する
Traffic Managerプロファイルにあるエンドポイントはポータル画面からもPowerShellからも削除可能です。実際にPowerShellで利用したコマンドを掲載しておきます。MSDNはこちらです。
Remove-AzureRmTrafficManagerEndpoint -Name "endpoint003" -ProfileName tmtest000 -ResourceGroupName tmtest-rg -Type AzureEndpoints -Force Remove-AzureRmTrafficManagerEndpoint -Name "endpoint004" -ProfileName tmtest000 -ResourceGroupName tmtest-rg -Type ExternalEndpoints -Force
引数の-Forceは確認のアラートなしでコマンドを実行することができます。スクリプトとして埋め込むようであれば、必須の機能になりそうです。
注意点:App Serviceのプラン
ここでひとつ補足します。
今回は、Traffic Managerを利用してSorryページを表示させることをやりたかったため、App Serviceのプランは無料版を設定していましたが、ルーティングが正常に行えませんでした。
いろいろと試しても解消されなかったため、Microsoftに問い合わせてみました。すると衝撃の回答がありました。
『App ServiceのプランはSTANDARD以上を選択する必要があります。無料版やSHARED、BASICでは、Traffic Managerは動作しません。』
な、な、なんと!本当に!!!と思いつつも、App ServiceのプランをSTANDARDに変更してみたところ、何事もなかったかのようにルーティングも正常に動作したのです。なんとも呆気なく解決してしまいました。
結論
今回、紆余曲折ありながらもエンドポイントの追加・削除はポータル画面からだけではなく、PowerShellからも操作可能であることが確認できました。PowerShellのコマンドを準備しておくことで、他でも使いまわしができますし、どんな設定を行ったのか振り返ることもできそうです。
TrafficManagerは便利な機能ですので、ぜひ活用してみてください。