Azure Automation Runbookで実行時間制限

 

Azure Automationに、RunbookというPowerShell、PowerShell ワークフローをスケジュールに合わせて実行する事が出来る機能があります。

このRunbookを使うと、Azure VMの再起動をスケジュール実行させるなどが簡単に設定できます。

しかし、Runbookスケジュール実行させる場合、Runbookの障害で実行時間が遅延し予期せぬ時間帯に実行されるケースがあります。
予期せぬ時間帯にRunbookが実行される事象を防ぐためには、Rubbook内で実行時間を制限することが1つの対策となります。

今回は下記サイトを参考にAzure VMの起動Runbookで時間制限を試してみました。またその前段としてRunbookのスケジュール設定も併せて試してみました。

https://docs.microsoft.com/ja-jp/azure/automation/automation-runbook-execution

Automationアカウント作成やAzure VMの起動停止についてはこちらの記事に記載しております。

Automationアカウント初期作成時のモジュール

Power ShellでAzure VM起動/停止と一緒にディスクタイプを変更する

----

1 .Azure PortalでAutomationアカウントのRunbookスケジュール設定をしてみる

Runbookのスケジュール設定は以下の2つの手順になります。

      • Automationアカウントでのスケジュール作成
      • Runbookへのスケジュール割り当て

まず最初にスケジュール作成を行います。

スケジュールのメニューを選択すると下記画面が表示されますので、スケジュールの追加を選択します。

新しいスケジュールのポップアップが表示されますので、設定を行います。保存すればスケジュール作成は完了です。

次に、Runbookへのスケジュール割り当てを行います。

スケジュールの割り当てを行うRunbookを選択すると下記画面が表示されますので、スケジュールへのリンクをクリックします。

Runbookのスケジュール作成画面が表示されますので、スケジュールを選択します。

作成したスケジュールを選択すれば、スケジュール設定は完了です。

.Azure VM起動 Runbookの実行時間を制限する

今回は1つの例としてサーバ再起動のRunbookを作成してみました。9時から18時の間はRunbookが実行されないような設定にしています。

AddHours(9)で日本時間に合わせて、9時間追加してます。
$JST.Hour -lt 9で9時より前(8時59分以前)、$JST.Hour -gt 18で18時より後(18時01分以降)を指定しています。
8時59分時以前もしくは、18時01分以降なら実行という設定、つまり9時から18時の間は実行されないという設定が実現できます。

#Runbookサーバ再起動

Import-Module Az.Compute

#再起動対象の仮想マシンが属する、リソースグループ名
$rgName =“リソースグループ名”

#再起動する仮想マシン名
$vmName =“仮想マシン名”

# 認証

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# 時間指定
  $JST = (Get-Date).AddHours(9)
        if(($JST.Hour -lt 9) -or ($JST.Hour -gt 18)){
         Write-Output(“Proceed”)

# 実行する処理
        ReStart-AzVM -ResourceGroupName $rgName -Name $vmName

    }
    else
    {
        Write-Output(“Don’t proceed”)
    }

※なお、AutomationアカウントのソリューションにVM起動停止のソリューションが存在します。