NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

負荷分散機能「Azure Traffic Manager」の設定とPowerShellコマンドまとめ

こんにちは。最近は絶賛早起き中の本夛です。

業務の一環で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を利用する場合、別々のリージョンに配置する必要がありますので、ご注意ください。

f:id:nextscape_blog:20210910151852j:plain

【構成図1】Traffic ManagerとApp Service x2 で構成

 

f:id:nextscape_blog:20210910151917j:plain

【Traffic Managerプロファイル1】Traffic Managerのエンドポイントの設定。優先度10のendpoint001が最優先となる。

 

f:id:nextscape_blog:20210910152253j:plain

【DNS1】DNSの名前解決の結果。優先度10のendpoint001のレコードが返される。

 

f:id:nextscape_blog:20210910152310j:plain

【結果1】ブラウザの表示結果。App1 が表示される。







(2)Traffic ManagerのエンドポイントにコマンドからApp Serviceを追加する



負荷分散先を動的に切り替えるために、PowerShellを使用して【構成図2】の構成を組んでみます。

f:id:nextscape_blog:20210910152330j:plain

【構成図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は最優先で表示されるはずです。

f:id:nextscape_blog:20210910152400j:plain

【Traffic Managerプロファイル2】Traffic Managerのエンドポイントの設定。優先度5のendpoint003が最優先となる。



コマンドプロンプトで名前解決をしてみましょう。【DNS2】のとおり、TMを名前解決をするとエイリアスはApp3を返してくれるようになり、優先度5が有効になったことが確認できました。

f:id:nextscape_blog:20210910152429j:plain

【DNS2】DNSの名前解決の結果。優先度5のendpoint003のエイリアスが返される。



次はブラウザで確認してみましょう。【結果2】のとおり、ブラウザではApp3にアクセスされていることが確認できました。

f:id:nextscape_blog:20210910152449j:plain

【結果2】ブラウザの表示結果。App3 が表示される。






(3)Traffic Managerのエンドポイントにコマンドから外部エンドポイントを追加する



次は外部エンドポイントとして、www.nextscape.net(以後、Site)を表示させる【構成図3】の構成を組んでみます。

f:id:nextscape_blog:20210910152508j:plain

【構成図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は最優先で表示されるはずです。

f:id:nextscape_blog:20210910152530j:plain

【Traffic Managerプロファイル3】Traffic Managerのエンドポイントの設定。優先度1のendpoint004が最優先となる。



コマンドプロンプトで名前解決をしてみましょう。【DNS3】のとおり、TMを名前解決をするとエイリアスはApp4を返してくれるようになり、優先度1が有効になったことが確認できました。

f:id:nextscape_blog:20210910152553j:plain

【DNS3】DNSの名前解決の結果。優先度1のendpoint004のエイリアスが返される。



次はブラウザで確認してみましょう。【結果3】のとおり、ブラウザではNextscapeのホームページにアクセスされていることが確認できました。

f:id:nextscape_blog:20210910152617j:plain

【結果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は便利な機能ですので、ぜひ活用してみてください。