PowerShellのRunbookで実行時間帯を制限する方法

2019-11-19Automation account,Azure,PowerShell/Azure CLI,Runbook

PowerShellのRunbookで、実行時間を制限する方法です。

仮想マシン(Azure VM)の起動処理を例に、特定の時間帯には実行されないように制限してみました。
PowerShell内で実行時間を制御することで実現しています。

Runbookは、スケジュール設定やWebhookを使用して呼び出し、実行させることができます。
Azureの障害などの影響で、Runbookが予期しない時間帯に実行される可能性があります。
Runbookが意図しない時間帯に開始された場合でも、PowerShell内で実行時間を制限しておくことは、効果的な対策の一つとなります。

Automationアカウント作成から、Runbookを使った仮想マシンの起動停止方法については、こちらで紹介しています。

※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※本記事のRunbookはPowerShellで作成しています。

スポンサーリンク

PowerShellのRunbook内で実行時間帯を制限

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

if文でRunbookが実行された時間帯を条件判断

実行時間帯の条件判断は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を起動しましたよ”とメッセージが表示されました。

※仮想マシンも、実行中になります。

最後に

PowerShellのRunbookPowerShellで、実行時間を制限する方法を確認しました。
不用意な時間帯にRunbookが実行されても、処理自体が行われないようにするために、時間を判断するif文を追加しています。
運用時の安全性が向上するため、とても有益だと感じました。

引き続き、いろいろ試してみたいと思います。

スポンサーリンク