Azure Automationで作成済みの仮想マシンを自動起動するまで

この記事ではAzure Portal上でAutomation のRunbookを作成し、 Runbookのスケジュール機能で指定の日時で作成済みの仮想マシンまたはApp Serviceに対して自動起動を行うところまでを記載します。 今回Runbookに記載するスクリプトPowerShellを使用しています。

背景

仕事で動かしている開発環境の仮想マシンとApp Serviceのサーバーの起動/停止を自動化できると無駄な稼働を減らして節約できると思ったため。 もしそのようにしてほしいと依頼されたらすぐにできるように調べてみました。

大まかな手順や前提

  • 任意の仮想マシンを用意する(ここは割愛)
  • Automationアカウントを作成する
  • Automationに必要なアクセス許可を割り当てる
  • Automationに必要なモジュール(Azモジュール)を更新する(必要であれば)
  • Runbookを作成する
  • Runbookにコードを追加する
  • コードの動作確認
  • スケジュール機能の設定

以下のMicrosoft Learnを参考にしています。 learn.microsoft.com learn.microsoft.com 両方で試したのですが、今回はワークフローでの方法を記載します。 では、詳しく記載していきます。

Automationを作成する

Portal上でAutomationアカウントを作成します。 こちらのアイコンをクリックします。

Automationアカウントの作成ページで新規アカウントを作成します。 詳細設定タブではデフォルトでマネージドIDのシステム割り当てにチェックが入っているため、一旦何もしないで問題ありません。 ※マネージドIDはアクセス許可を割り当てる際に利用します。

Automationに必要なアクセス許可を割り当てる

アクセス許可を割り当てるには * Azure portal上で設定 * ローカルのPowerShellからコマンドで設定 の2つの方法がありますが、この記事ではPortal上で設定します。 PowerShellで設定するにはAzモジュールのインストールが必要となります。

Azure Poral上で以下の画面を表示し、Azure ロールの割り当てを選択します。

任意のロールを割り当てます。 画像の上二つはチュートリアルを見ながら設定しましたが、App Serviceへのアクセス権も付与したかったので リソースグループに対して共同作成者ロールも割り当てています。

Automationに必要なモジュールを更新する(必要であれば)

この手順はLearnにはないものの、やっておかないとPowerShellがエラーになってしまいました。 Automaitonアカウントのモジュール画面から以下のモジュールを更新します。 * Az.Accountsのバージョンを最新のものにする

Runbookを作成する

AutomaitonアカウントのRunbookを選択し、Runbookを作成します。 作成画面ではPowerShellワークフローを選択します。

Runbookにコードを追加する

作成したRunbookにPowerShellコードを追加します。 チュートリアルを見るといろいろあるのですが、ここでは実際に動作したコードを載せます。

workflow <WorkflowName>
{
            Param(
            [string]$resourceGroup,
            [string]$VMName
        )
    
    InlineScript{

        Import-Module Az
        
        # Ensures you do not inherit an AzContext in your runbook
        Disable-AzContextAutosave -Scope Process

        # Connect to Azure with system-assigned managed identity
        Connect-AzAccount -Identity

        # Usingスコープ修飾子を使用して外部変数を参照
        $resourceGroup = $Using:resourceGroup
        $VMName = $Using:VMName
        
        # set and store context
        $AzureContext = Set-AzContext –SubscriptionId "<SubscriptionID>"
        Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    }
}

コードの

Start-AzVM

Start-AzWebApp

にするとApp Serviceの起動を行うことができます。

コードの動作確認

動作確認もPortal上で行います。 Runbookの編集画面からテストウィンドウを開き、引数に任意のリソースグループ名と仮想マシン名を入力します。 テストを実行し問題なければ以下のような表示がされます。

スケジュール機能の設定

最後に、作成したスクリプトをスケジュール機能で自動起動する方法を紹介します。 スケジュールからスケジュールの追加を選択します。

以下の画面からスケジュールとパラメータの設定を行います。

スケジュールは定期的な予定を作成することもできます。

パラメータではコードのテストの際に指定した値を保存します。

スケジュールで実行が正常に終了した場合、Runbookの概要ページで以下のように結果が残ります。

以上がAzure Automaitonで作成済みの仮想マシン自動起動するまでの手順です。 自動終了はスクリプトのStart-AzVMコマンドを書き換えるだけで動くと思いますので割愛します。 読んでいただきありがとうございました。