【MFA無効版】Azure Automationを使って複数テナントの複数サブスクリプションに存在する複数のApplicationGatewayを自動起動・停止する方法

今回はAzure Automationを使ってAzure ApplicationGatewayを自動起動・停止する方法を共有します。

 

コスト削減の為、複数テナントの複数サブスクリプションに存在する複数のApplicationGatewayを手動で停止することは大変で、かつ忘れてしまう可能性がありますので、Automationを使って自動起動・停止した方が良いかと思います。

 

では早速ですが、説明を始めます。

 

▼流れ

①ストレージアカウントのコンテナーにCSVファイルを保存
②CSVファイルには、対象ApplicationGatewayの以下情報を事前に書く必要がある
・サブスクリプション名
・リソースグループ名
・ApplicationGateway名
・StartTime
・StopTime
③Automationで起動用と停止用のRunBookを作成
④スクリプトを作成
⑤スケジュールを設定
※ApplicationGatewayによって起動と停止時間がバラバラであれば毎日1~3時間毎にスケジュールを設定することをお勧めします。
⑥最後の確認

 

▼前提条件

 

①Azure Entra IDに存在するユーザーのMFAは無効であること

②複数のテナントにおいて、Microsoft Entra ID(旧Azure AD)にユーザーとして存在し、ApplicationGatewayを起動・停止する権限があること
③使用するAutomationアカウントに資格情報を登録
1.Automationアカウントから「資格情報」を選択

 

2.必要な情報を入力後、「作成」を選択 

※ユーザー名とパスワードはAzure EntraIDに存在する情報となります。

 

3.登録されていることを確認

※複数テナントがある場合、この処理は複数回必要です。

 

▼設定手順

①ストレージアカウントのコンテナーにCSVファイルを保存

 

②CSVファイルには、対象ApplicationGatewayの以下情報を事前に書く必要がある

 

③Automationで起動用と停止用のRunBookを作成

④スクリプトを書く

 

【起動用スクリプト】

 

# AzureADのアカウントIDで別サブスクリプションへの認証、テナントが複数ある場合、全部記載必要
$usercred = Get-AutomationPSCredential -Name “資格情報名
Connect-AzAccount -Credential $usercred -Tenant “テナントID

 

# ストレージアカウントとCSVファイルの情報
$storageAccountName = “ストレージアカウント名
$storageAccountKey = “アクセスキー
$containerName = “コンテナー名
$csvFileName = “CSVファイル名

 

# ストレージアカウントからCSVファイルを読み取る
$context = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$blob = Get-AzureStorageBlob -Container $containerName -Blob $csvFileName -Context $context
$csvContent = $blob.ICloudBlob.DownloadText()

 

# CSVファイルの内容を解析する
$ImportCsvs = ConvertFrom-Csv -InputObject $csvContent

 

# 配列に入れる
$appgwnamelist = @()
$appgwrglist = @()
$appgwsublist = @()
$appgwstarttimelist = @()

 

foreach ($ImportCsv in $ImportCsvs){
$appgwnamelist += $ImportCsv.ApplicationGatewayname
$appgwrglist += $ImportCsv.Resourcegroup
$appgwsublist += $ImportCsv.SubscriptionID
$appgwstarttimelist += $ImportCsv.StartTime
}

 

for ($i=0; $i -lt $appgwnamelist.Count ; $i++){
# AppGW取得
$AppGw = Get-AzApplicationGateway -Name $appgwnamelist[$i] -ResourceGroupName $appgwrglist[$i]

 

# 現在の日時を日本時間で取得
$currentDateTime = (Get-Date).ToUniversalTime().AddHours(9).ToString(“HH:mm:ss”)

 

# StartTimeをDateTime型に変換
$startTime = [DateTime]::ParseExact($appgwstarttimelist[$i], “HH:mm:ss”, $null)

 

# 現在の日時とStartTimeの差を計算
$diff = $startTime – [DateTime]::ParseExact($currentDateTime, “HH:mm:ss”, $null)

 

# 差が5分以内であれば、一致とみなす
if ($diff.TotalMinutes -le 5) {
Start-AzApplicationGateway -ApplicationGateway $AppGw
}
}

 

【停止用スクリプト】

 

# AzureADのアカウントIDで別サブスクリプションへの認証、テナントが複数ある場合、全部記載必要
$usercred = Get-AutomationPSCredential -Name “資格情報名
Connect-AzAccount -Credential $usercred -Tenant “テナントID

 

# ストレージアカウントとCSVファイルの情報
$storageAccountName = “ストレージアカウント名
$storageAccountKey = “アクセスキー
$containerName = “コンテナー名
$csvFileName = “CSVファイル名

 

# ストレージアカウントからCSVファイルを読み取る
$context = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$blob = Get-AzureStorageBlob -Container $containerName -Blob $csvFileName -Context $context
$csvContent = $blob.ICloudBlob.DownloadText()

 

# CSVファイルの内容を解析する
$ImportCsvs = ConvertFrom-Csv -InputObject $csvContent

 

# 配列に入れる
$appgwnamelist = @()
$appgwrglist = @()
$appgwsublist = @()
$appgwstoptimelist = @()

 

foreach ($ImportCsv in $ImportCsvs){
$appgwnamelist += $ImportCsv.ApplicationGatewayname
$appgwrglist += $ImportCsv.Resourcegroup
$appgwsublist += $ImportCsv.SubscriptionID
$appgwstoptimelist += $ImportCsv.StopTime
}

 

for ($i=0; $i -lt $appgwnamelist.Count ; $i++){
# AppGW取得
$AppGw = Get-AzApplicationGateway -Name $appgwnamelist[$i] -ResourceGroupName $appgwrglist[$i]

 

# 現在の日時を日本時間で取得
$currentDateTime = (Get-Date).ToUniversalTime().AddHours(9).ToString(“HH:mm:ss”)

 

# StopTimeをDateTime型に変換
$stopTime = [DateTime]::ParseExact($appgwstoptimelist[$i], “HH:mm:ss”, $null)

 

# 現在の日時とStopTimeの差を計算
$diff = $stopTime – [DateTime]::ParseExact($currentDateTime, “HH:mm:ss”, $null)

 

# 差が5分以内であれば、一致とみなす
if ($diff.TotalMinutes -le 5) {
Stop-AzApplicationGateway -ApplicationGateway $AppGw
}
}

 

⑤スケジュールを設定

CSVファイルのStartTimeとStopTimeに合わせてスケジュールを設定するか、1~3時間ごとに1回スクリプトを実行するように設定

 

⑥最後の確認

「動作状態」が「実行中」、もしくは「停止済み」になっていることを確認

いいね (この記事が参考になった人の数:1)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルクロステクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください