【Azure】Front Doorのトラフィック切り替えをPowerShellで自動化するTech TIPS

アクセス分散にAzure Front Doorを使っていると、メンテナンス期間に入る配信元を停止(無効化)してトラフィックを切り替えたい場合がある。これをPowerShellスクリプトで実装すると、トラフィックの制御を自動化しやすくなる。

» 2024年08月07日 05時00分 公開
[島田広道デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

Front Doorのトラフィック切り替えをPowerShellで自動化

対象:Azure Front Door Standard/Premium、PowerShell


 Azureの「Front Door」を利用している場合、普段は設定済みのルーティング方法で自動的にアクセスを分散しているはずだ。

 しかし、これを変更したい場合があるだろう。例えば、幾つかの配信元(オリジンサーバ)のうち、1つがメンテナンス期間に入るような場合、その前にその配信元へのトラフィックを止めておき、メンテナンスが終わって回復したら元に戻したい、という状況だ。

 こうした処理をせずとも、正常性プローブによって、応答が止まった配信元へのトラフィックは自動的に停止する。とはいえ、メンテナンス中に配信元のサーバが断続的に途絶と回復を繰り返すことも考えられるので、メンテナンス中は全面的に止めておいた方が安定するだろう。

 配信元の無効化/有効化はもちろんAzureポータルで可能だ。ただ、予定されたメンテナンスなど、そのトリガーが把握できているなら自動化して省力化を図りたいところだろう。

 そこで本Tech TIPSでは、Azure PowerShellを使ってFront Doorのトラフィック分散を制御する方法を紹介する。トラフィック制御をPowerShellスクリプトに実装してAzure AutomationのRunbookに登録すれば、希望のタイミングで自動実行できるようになる。

 対象のFront DoorのSKUはStandardまたはPremiumとする。EdgioなどのCDNやFront Doorクラシックについては対象外としている。

 Automationへの登録などについては、Tech TIPS「【Azure】権限に注意! AutomationでApp Serviceの定期的な再起動を自動化する(PowerShell編)」「【Azure】AutomationアカウントでVMの起動/停止を定期的に繰り返すスケジュールを組む(ARMテンプレート編)」を参照していただきたい。

 Traffic Managerについては、Tech TIPS「【Azure】Traffic Managerのトラフィック切り替えをPowerShellで自動化する」を参照していただきたい。

■執筆時の各種ツール/APIのバージョン


Front Doorの配信元一覧を取得する

 ここでは、デフォルトのサブスクリプションにある全てのFront Doorプロファイルから、全ての配信元を収集してみる。

# Front Doorプロファイルの一覧を取得
$FDProfiles = Get-AzFrontDoorCdnProfile
$FDProfiles | Format-Table -Property Name, ResourceGroupName, SkuName

# Front Doorの配信元グループの一覧を取得
$FDOriginGroups = @()
$FDProfiles | ForEach-Object {
  # 配信元グループの一覧を取得
  $FDOriginGroup = Get-AzFrontDoorCdnOriginGroup `
    -ProfileName $_.Name `
    -ResourceGroupName $_.ResourceGroupName

  # 配信元グループの特定に必要な要素を格納
  $FDOriginGroups += [PSCustomObject]@{
    Name = $FDOriginGroup.Name # 配信元グループ名
    ResourceGroupName = $FDOriginGroup.ResourceGroupName # ↑のリソースグループ名
    ProfileName = $_.Name # プロファイル名
    # Get-AzFrontDoorCdnOriginGroupでは正しく格納されないため、
    # ここで改めて代入
  }
}
$FDOriginGroups | Format-Table

# Front Doorの配信元の一覧を取得
$FDOrigins = $FDOriginGroups | ForEach-Object {
  Get-AzFrontDoorCdnOrigin `
    -OriginGroupName $_.Name `
    -ResourceGroupName $_.ResourceGroupName `
    -ProfileName $_.ProfileName
}
$FDOrigins | Format-Table

【PowerShell】Front Doorの配信元一覧を取得する
※Microsoftのリファレンス: Get-AzFrontDoorCdnProfileGet-AzFrontDoorCdnOriginGroupGet-AzFrontDoorCdnOrigin

 「Get-AzFrontDoorCdnProfile」コマンドレットで取得できるFront Doorプロファイルのオブジェクトには、配信元グループの一覧は格納されていない。同様に「Get-AzFrontDoorCdnOriginGroup」コマンドレットで取得できる配信元グループのオブジェクトにも、配信元の一覧は含まれない。

 そのため、それぞれ親リソース名と自身のリソース名、そのリソースグループ名を指定して、Front Doorプロファイルから配信元グループ、配信元という順番で一覧を取得していく必要がある。

 注意が必要なのは、Get-AzFrontDoorCdnOriginGroupコマンドレットで得られる配信元グループのオブジェクトの「ProfileName」にプロファイル名が格納されないことだ。そのため、上記リストでは、新たにPSCustomObjectのオブジェクトを用意して、配信元グループ名やリソースグループ名に加えて正しいプロファイル名を設定している。

対象のFront Door配信元を見つける

 次に、取得した配信元一覧から対象の配信元を見つける。以下では、配信元としてApp ServiceによるWebサイトを想定している。

# 配信元のApp Serviceの名前
$webAppName = "<App Service名>"

# ↑のデフォルトのFQDN
$webAppDefaultFQDN = $webAppName + ".azurewebsites.net"

# カスタムホスト名=ホストヘッダーの内容
$webAppCustomFQDN = "<カスタムFQDN>"

# FQDNから配信元を探す
$targetFDOrigin = $FDOrigins | Where-Object { `
  # ホスト名およびホストヘッダーの内容がそれぞれの想定値と一致
  $_.HostName -eq $webAppDefaultFQDN -and $_.OriginHostHeader -eq $webAppCustomFQDN
}
$targetFDOrigin | Format-List

【PowerShell】対象のFront Door配信元を見つける
※Microsoftのリファレンス: Where-Object(オブジェクトのプロパティに基づくフィルタリング)

 各配信元のオブジェクトからは、さまざまなプロパティを取得できる。

 例えば配信元がApp Serviceの場合、「HostName」プロパティにはApp ServiceのデフォルトのFQDN「<App Service名>.azurewebsites.net」が格納されており、OriginHostHeader」プロパティには配信元に送信されるホストヘッダーの内容が記されている。上記リストでは、これらのプロパティから配信元を特定している。

 また「EnabledState」プロパティが「Enabled」なら配信元へのトラフィックは有効で、「Disabled」なら無効だと判定できる。さらに「Weight」プロパティからは重みが、「Priority」からは優先順位がそれぞれ取得できる。

Front Door配信元の最新の状態を取得する

 配信元を特定できたら、そのオブジェクトを再取得して、最新の状態に更新しよう。

 上記リストのようにして、既に配信元のオブジェクトが取得済みの場合、以下のようにそれをGet-AzFrontDoorCdnOriginコマンドレットへパイプラインで渡すと、簡単に最新の状態を取得(更新)できる。

$targetFDOrigin = $targetFDOrigin | Get-AzFrontDoorCdnOrigin

【PowerShell】Front Door配信元の最新の状態を取得する(その1)
※Microsoftのリファレンス: Get-AzFrontDoorCdnOrigin配信元のオブジェクトのプロパティやメソッド

 一方、配信元のオブジェクトが未取得の場合は、以下のようにFront Doorの配信元の名前、リソースグループ名、配信元グループ名、プロファイル名の4つ全てを、Get-AzFrontDoorCdnOriginコマンドレットのパラメーターに指定しなければならない。

$FDOriginName = "<配信元の名前>" 
$FDOriginRG = "<↑のリソースグループ名>"
$FDOriginGroupName = "<配信元グループ名>"
$FDProfileName = "<Front Doorプロファイル名>"

$targetFDOrigin = Get-AzFrontDoorCdnOrigin `
  -OriginName $FDOriginName `
  -ResourceGroupName $FDOriginRG `
  -OriginGroupName $FDOriginGroupName `
  -ProfileName $FDProfileName `

【PowerShell】Front Door配信元の最新の状態を取得する(その2)
※Microsoftのリファレンス:Get-AzFrontDoorCdnOrigin

Front Door配信元を無効化する

 最新の配信元のオブジェクトを取得したら、以下のように「Update-AzFrontDoorCdnOrigin」コマンドレットにパイプラインで渡しつつ、「-EnabledState Disabled」オプションを指定すると、その配信元を無効化できる。

$targetFDOrigin = $targetFDOrigin | Update-AzFrontDoorCdnOrigin -EnabledState Disabled # 無効化
$targetFDOrigin.EnabledState # 「Disabled」すなわち無効のはず

【PowerShell】Front Door配信元を無効化する
※Microsoftのリファレンス: Update-AzFrontDoorCdnOrigin

 Update-AzFrontDoorCdnOriginコマンドレットは、更新した配信元の最新のオブジェクトを返す。そのためその戻り値から、正しくプロパティ(ここではEnabledState)が変更できたかどうかが確認できる。

Front Door配信元を有効化する

 無効化した配信元を有効化するには、Update-AzFrontDoorCdnOriginコマンドレットに「-EnabledState Enabled」オプションを指定して実行する。

$targetFDOrigin = $targetFDOrigin | Update-AzFrontDoorCdnOrigin -EnabledState Enabled # 有効化
$targetFDOrigin.EnabledState # 「Enabled」すなわち有効のはず

【PowerShell】Front Door配信元を有効化する
※Microsoftのリファレンス: Update-AzFrontDoorCdnOrigin

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。