Azure VMの状態をチェックし、停止していたら起動させるAutomationスクリプト


誤ってAzure VMを停止した場合でも、常に起動状態にしておくためのAutomationスクリプトを作りました。
Azure Automationで15分置きに対象VMの状態チェックを行い、停止していれば起動させるというシンプルなものです。

Azure Automationアカウント作成

  • Azureポータルより[+リソースの作成]を選択します。

  • 検索バーに[Automation]と入力してEnter

  • [作成]を選択します。

  • Automationアカウント名やリージョンを選択します。

  • Azure実行アカウントは[はい]を選択しておきます。これによりAzureリソース操作コマンド実行時に楽になりますが、証明書期限に注意が必要になります。後ほど書きます。

  • Automationアカウントが作成され、概要画面が表示されればOKです。

Runbook作成

  • Automation画面の左バーより[Runbook]を選択します。

  • [+ Runbookの作成]を選択します。

  • Runbook名や説明を入力します。Runbookの種類は[PowerShell]とします。

  • PowerShellスクリプトの入力画面が表示されます。

  • ここに以下スクリプトを貼り付けます。

Param(
    [string]$VMName,
    [string]$ResourceGroupName
)

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

$VMState = Get-AzureRmVM -Name $VMName -ResourceGroupName $ResourceGroupName -Status
$VMPowerState = $VMState.Statuses[1].DisplayStatus

if (($VMPowerState -eq "VM deallocated") -or ($VMPowerState -eq "VM stopped"))
{
    Write-Output "$VMName Status is $VMPowerState ."
    Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VMName
} else {
    Write-Output "$VMName Status is $VMPowerState ."
}
  • [保存]します。

  • 一度動作確認しておきましょう。別途停止状態のVMを準備しておきます。

  • [テストウィンドウ]を選択します。

  • このスクリプトでは対象VMのリソースグループとVM名をパラメータとして渡します。パラメータ入力して、[開始]を選択してください。

  • 「[VM Name] Status is [VM Status].」というメッセージが表示されていればOKです。

  • 実際に停止中だったVMが起動されているはずです。起動状態でもテストしてみて問題ないか確認しておきます。

  • 元の画面に戻ってRunbookを[公開]します。

スケジュール作成

  • 今回は15分置きに実行することにします。Automationスケジュールは最短1時間単位での実行となるため、15分ずらして4つスケジューラーを作成していきます。
  • Runbookが選択されたポータル画面で[スケジュール]を選択します。

  • [+ スケジュールの追加]を選択します。

  • [スケジュール]を選択します。

  • 新しいスケジュールを作成します。

  • 以下のように指定します。ポイントは00分に実行されるということです。これによってこのスケジュールは、1:00 2:00 3:00と毎時00分に実行してくれるものになります。

  • 次に[パラメータと実行設定]を選択します。

  • ここではテストのときに指定した対象VM情報を入力します。

  • 毎時00分に実行されるスケジュールが作成されました。

  • 同じ手順で15分、30分、45分に実行されるスケジュールも作っていきます。

実行確認

  • あとは時間がきたら問題なく動作するか確認すれば完了です。

Automation実行アカウント証明書期限切れチェック

参考にさせて頂いた記事

AzureVMの電源状態一覧とそれをPowerShellスクリプトで取得する方法