Runbook(PowerShell)の実行時間を制限してみた

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

 Azure AutomationアカウントはPowerShell等を利用して運用業務を自動化するサービスになります。

Azure Automation とは

 Azure Automationアカウントではプロセスを実行できるRunbookが使えます。

Azure Automation での Runbook の実行

 Runbookを使うとPowerShellを使ったスクリプト等を実行する事が出来ます。
 Runbookはスケジュール設定やWebhookで呼び出す事により実行させることが出来ます。
 スケジュール実行させた場合に、Azure障害の影響でスケジュール遅延しRunbookが予期せぬ時間帯に実行されるケースがあります。
 予期せぬ時間帯にRunbookが実行されてもRunbook内に設定した処理が実行されないようにしておくことが1つの対策となります。

 Runbook(PowerShell)内で特定の時間帯にAzure VM(仮想マシン)起動処理が実行されないようにしてみました。

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

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

スポンサーリンク

Runbook内で実行時間を制限

 前回記事で作成したAzure VM(仮想マシン)のRunbookを流用しRunbook内で処理が実行されないように制限してみました。
 Runbookがいつの時間帯に実行されても9時から18時の間はAzure VM(仮想マシン)を起動しない設定としています。

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

 今回実施した内容はこちらの通りになります。

      • Get-Dateで時刻を取得したものにAddHours(9)として9時間プラスして、$JSTとして日本時間を定義。
      • if文の中で9時より前か18時以降の場合にtrueとなるよう指定する。

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

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

  前回記事で設定したようにRunbookのシステム割り当てマネージドIDでAzure VM(仮想マシン)の起動停止権限を割り当てた環境で実施します。

仮想マシン起動するRunbook

Runbookの作成を行うと編集画面が表示されます。
Azure VM(仮想マシン)を起動するPowershellを記載します。
PowerShellには実行時間制限部分を追加しています。

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

  •  認証部分
    • システム割り当てマネージドIDで認証
  • 変数部分
    • 起動する仮想マシンを指定
  • 時間指定部分
    • 実行する(実行しない)時間帯を指定
  • 処理部分
    • Azure VM(仮想マシン)を起動する処理
# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# 再起動するVM名
$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を実行してAzure VM(仮想マシン)の起動確認

 Runbookを実行してみてAzure VM(仮想マシン)が起動するかどうか確認してみます。

Runbook実行結果
実行時間関わらずRunbookは完了になります。
9時から17時の間の場合は、起動してはいけない時間帯ですと表示されAzure VM(仮想マシン)の起動は行われません。
時間指定部分を変更してAzure VM(仮想マシン)が起動されるか確認してみます。
17時以前もしくは18時以降なら処理が実行されるようにしてみました。
再度実行してみると”VMを起動しましたよ”とメッセージが表示されました。
Azure VM(仮想マシン)を確認してみると実行中になっている事も確認出来ました。

最後に

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