Azure Automationで平日のみジョブ実行させるスケジュール作成

 

Azure Automationのスケジュール設定を試してみました。

今回はRunbookを朝8時に実行する事を想定してスケジュール作成してみました。

    • スケジュール設定内容
      • 毎日実行する
      • 平日のみ実行する
      • 平日のみ実行する(祝日も考慮してスケジュール作成する)

作成したスケジュールをRunbookと関連付けする事で平日のみAzure VMを自動起動停止させるという事が可能になります。

スケジュールの作成はAzure Portalを利用して実施しています。

1.Azure Automation アカウントのRunbookを毎日朝8時に実行する

今回の設定順序はこちらの通りになります。

      • スケジュールを作成する
      • スケジュールをRunbookにリンクする

まず最初に、毎朝8時に実行するスケジュールを作成します。

Automation アカウントの共有リソースにスケジュールというメニューがあります。こちらを選択すると下記画面が表示されます。スケジュールの追加を選択します。

新しいスケジュールの作成画面が表示されます。以下の内容で設定し作成を選択します。

      • 名前:毎日朝8時に実行(任意設定)
      • 開始時:10月6日 8:00(開始日を10月6日からと想定)
      • タイムゾーン:Japan
      • 繰り返し:定期的
      • 間隔:1日
      • 有効期限の設定:いいえ 

これでスケジュールの作成は終了です。次にスケジュールをRunbookにリンクします。

定期実行するRunbookを選択すると下記画面が表示されますので、スケジュールへのリンクを選択します。

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

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

 

スケジュールのところに選択したスケジュールが表示される事を確認したらOKを選択します。

これでRunbookへのスケジュール関連付けが完了です。Runbookがスケジュール実行されます。

Azure AutomationアカウントでRunbookでのAzure VM再起動(実行時間制限)についてこちらで記載しております。 

Azure Automation Runbookで実行時間制限

—–

2.Azure Automationアカウントで平日朝8時に実行するスケジュールを作成

先ほどと同様に、Automation アカウント メニューのスケジュールで、スケジュールの追加を選択します。

新しいスケジュールの作成画面で以下のように設定します。

      • 名前:平日朝8時に実行(任意設定)
      • 開始時:10月6日 8:00(開始日を10月6日からと想定)
      • タイムゾーン:Japan
      • 繰り返し:定期的
      • 間隔:1週
      • 設定曜日:月曜日、火曜日、水曜日、木曜日、金曜日
      • 有効期限の設定:いいえ

間隔を週間とする事で曜日指定が出来るようになりますので、実行する曜日を選択します。これで特定曜日に実行が可能になります。

3.Azure Automationで月間スケジュールを作成(平日(祝日除く)の朝8時に実行)

祝日も考慮して、平日のみ実行のスケジュール作成する場合は月間スケジュールを作成します。

新しいスケジュールの作成画面で以下のように設定します。

      • 名前:2020年11月の平日朝8時に実行(任意設定)
      • 開始時:11月1日 8:00
      • タイムゾーン:Japan
      • 繰り返し:定期的
      • 間隔:1月
      • 毎月の特定曜日:月の日付
      • 月の指定した日に実行:カレンダーで実行日を指定(平日を指定(祝日除く))
      • 有効期限の設定:はい (11月30日23:59)

間隔を月とする事で月で実行日指定が出来るようになります。有効期間を1月分(11月1日~11月30日)実行とする事で、11月の平日のみ実行といった設定が出来ます。

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 Automationで平日のみ実行するスケジュール作成

.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起動停止のソリューションが存在します。