Azure Automationアカウントの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が実行されても処理が実行されないように設定しておくことが1つの対策となります。

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

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

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

スポンサーリンク

Runbook内で実行時間を制限

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

実行時間制限をif文で条件判断させる

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

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

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

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

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

仮想マシン起動するRunbook

Runbookの作成を行うと編集画面が表示されますので、PowerShellを記載します。

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

  •  認証部分
    • システム割り当てマネージドIDで認証
  • 変数部分
    • 起動する仮想マシンを指定
  • 時間指定部分
    • 実行する(実行しない)時間帯を指定
  • 処理部分
    • 仮想マシンを起動する処理
# 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を実行して仮想マシンが起動するかを確認

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

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

最後に

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