Runbook(PowerShell)の実行時間を制限

2019-11-19Automationアカウント,Azure,PowerShell/Azure CLI,Runbook

Runbook(PowerShell)の実行時間制限方法のご紹介です。
仮想マシン(Azure VM)の起動処理を例に特定の時間帯に実行されないように制限してみました。
PowerShell内で実行時間を制限する事で実現しています。

Runbookはスケジュール設定やWebhookで呼び出し実行させることが出来ます。
Azure障害の影響などの理由で、Runbookが予期せぬ時間帯に実行される可能性があります。
Runbook自体が実行してほしくない時間帯に開始した場合でも、PowerShell内で時間制限しておくことが1つの対策となります。

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

※2021年12月に記事を更新しました。

スポンサーリンク

Runbookで実行時間を制限

Runbookがいつの時間帯に実行されても9時から18時の間は仮想マシンを起動しない設定としています。

実行時間制限はif文で条件判断

PowerShell内で実行時間帯を条件判断させています。

      • 日本時間として$JSTとして変数設定
      • Get-Dateで取得した時刻に9時間追加して日本時間とする
      • 時刻の追加はAddHours(9)とする
      • if文の中で9時以前(lt)か18時以降(gt)の場合にtrueとなるよう指定
      • trueの場合にのみ処理を実行

Runbook自体を実行されないようにするのではなく、Runbookがいつ実行されても良いように設定しています。

9時から18時の間は仮想マシンを起動しないように設定

Runbook(PowerShell)は以下の内容で構成しています。

  • 認証部分
    • システム割り当てマネージドIDで認証
  • 変数部分
    • 起動する仮想マシンやリソースグループを指定
  • 時間指定部分
    • 実行しない時間帯を指定
  • 処理部分
    • 仮想マシンを起動
仮想マシンを起動するRunbook

#Runbookで利用する認証設定
Disable-AzContextAutosave -Scope Process
$AzureContext = (Connect-AzAccount -Identity).context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

#起動する仮想マシン名
$ResourceGroupName =“リソースグループ名"
$VirtualMachineName =“仮想マシン名"

#時間範囲の指定
  $JST = (Get-Date).AddHours(9)
        if(($JST.Hour -lt 9) -or ($JST.Hour -gt 18)){

#時間範囲内だった場合は仮想マシンを起動
        Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachineName
        Write-Output(“VMを起動しましたよ")
    }
    else
    {
        Write-Output(“起動してはいけない時間帯です")
    }
 

Runbookを実行して確認

Runbookを実行して仮想マシンが起動するかどうか確認します。
Runbook自体は実行時間帯関わらず完了となります。

Runbook実行結果
9時から17時の間の場合は、起動してはいけない時間帯ですと表示され仮想マシンの起動は行われません。

範囲内の時間帯にRunbookを実行します。
”VMを起動しましたよ”とメッセージが表示されました。

※仮想マシンも実行中になっていました。

最後に

時間を判断するif文を追加するだけで、不用意な時間帯にRunbookが実行されても処理自体が行われないようにできました。
ひと手間を加えるだけで運用時の安全性が上がるので結構良いかなと思いました。

スポンサーリンク