初めてのAzure Automation(Runbook使って仮想マシンを起動する方法)

2019-09-07Automationアカウント,Azure,Runbook,Virtual Machine

初めてAzure Automationを利用する方向けに、Runbookを使って処理自動化するまでの手順を紹介しています。
AutomationアカウントやRunbookのリソース作成、マネージドIDの設定、Runbookの作成、テスト、公開までの一連の手順を流れに沿って紹介しています。

RunbookはPowerShellを使った仮想マシン(Azure VM)の起動を例に紹介しています。
Runbookでパラメーターを使用する場合についても記載しています。

スポンサーリンク

Automationアカウントの概要、リソース作成手順、権限付与設定

Azure Automationアカウントとは

Azure Automationはクラウドやオンプレミス環境にわたる自動化タスクを実行するAzure上で提供されているサービスです。
Azure AutomationアカウントはAzure Automationサービスを利用するためのAzure上のリソースです。

Azure Automation とは

Runbookを利用したプロセスの自動化や構成管理、更新管理などの機能が提供されています。
構成管理では、Desired State Configuration (DSC)を使用したWindowsサーバの構成管理や、変更管理などの機能が提供されています。
Azure上の仮想マシンだけではなく、非Azure上の仮想マシンやオンプレ上のサーバなども管理できます。

※Azure Automation Update Managementは廃止が予定されています。

Runbookとは

Runbookは実行処理内容を記載したスクリプトです。
Azure Automationでプロセス自動化を機能として提供されています。
PowerShellやPythonなどを使用して自動化されたワークフローを記述します。

Azure Automation の Runbook の種類

Automationアカウントに、Runbookを作成して利用します。
1つのAutomationアカウントに対して、複数のRunbookを作成できます。

Runbookはスケジュール設定やWebhookを使って呼び出す事が出来ます。
Azure Monitorのアラート通知時にWebhookを使って呼び出す事で、障害時の対応処理の自動化と言った事にも活用できます。

Automationアカウントを作成

Azure Portalを使ってAutomationアカウントを作成します。
Automationアカウント名は"aa-test-01″にしています。
スタンドアロン Azure Automation アカウントを作成するを参考に進めます。

Automationアカウント作成
Automationアカウントのメニューで作成を選択します。 Azure Automationアカウントのメニュー画面で作成を選択

Automationアカウントの作成画面が表示されます。
リソースグループ、地域を選択します。
Automationアカウント名を入力したら次へ進めます。

Azure Automationアカウントの作成で基本タブを表示しインスタンスの詳細を設定

詳細設定画面です。
マネージドIDの設定を行います。
初期状態では"システム割り当て"が選択されています。
そのままシステム割り当てを選択して次に進みます。

Azure Automationアカウントの作成で詳細設定タブを表示しマネージドIDを設定

ネットワーク設定画面です。
パブリックアクセスと、プライベートアクセスから選択します。
プライベートアクセスの場合は、プライベートエンドポイントを利用します。
今回はパブリックアクセスで進めます。

 

Azure Automationアカウントの作成でネットワークタブを表示し接続の構成を設定
Azure Automationアカウントの作成でネットワークタブを表示し接続の構成でプライベートアクセスを選択した場合

確認画面です。
内容を確認して問題が無ければ作成を選択します。
Automationアカウントの作成は完了です。

Azure Automationアカウントの作成の確認および作成画面

AutomationアカウントにおけるマネージドIDとは?

一言で言ってしまうとRunbookでリソースを操作する為の権限を得るものになるかと思います。
Azure AutomationアカウントでRunbook実行する際に、操作するリソースに対して認証が行われます。
その一つの方法としてマネージドIDを利用する方法があります。

マネージドIDにはシステム割り当てマネージド ID ユーザー割り当てマネージド IDの2種類があります。

マネージドIDの種類
マネージドID(Azure Automation アカウントの認証の概要)

システム割り当ての場合は、Automationアカウントリソースに対して権限付与を行います。
ユーザー割り当ての場合、マネージドID自体のリソースを作成しそれに権限付与を行います。
権限付与したユーザー割り当てマネージドIDをAutomationアカウントのリソースに割り当てします。
複数のAutomationアカウントに同じユーザー割り当てマネージドIDを共有して割り当てる事ができます。

システム割り当てマネージドID使ってリソースの操作権限を付与

Automationアカウントの作成時にシステム割り当てを選択した場合、リソース作成と同時にシステム割り当てマネージドIDが作成されます。
システム割り当てマネージドIDを使ってAutomationアカウントで仮想マシンの操作権限を付与します。
マネージドIDの設定はAutomationアカウントのアカウント設定のIDで行います。

※Runbookにではなく、Automationアカウントに対して割り当てます。
※PowerShellを利用して割り当てる方法もあります。マネージド ID にアクセス許可を割り当てるを参照ください。
※仮想マシンの共同作成者の権限を割り当てています。

マネージドIDへのロール割り当て

AutomationアカウントでIDのリソースメニューを選択します。
システム割り当て済みのタブを選択します。
Azureロールの割り当てを選択します。

Azure AutomationアカウントでIDの設定を表示し、システム割り当て済みでアクセス許可設定をする
ロール割り当ての追加を選択します。
ロールの割り当てはスコープ、サブスクリプション、役割の選択を行います。
スコープはサブスクリプション、リソースグループ、Key Vault、ストレージ、SQLから選択可能です。

仮想マシンの起動の操作に必要な権限として、リソースグループに対して仮想マシン共同作成者を割り当てています。

※リソースグループは仮想マシンのリソースグループを指定します。

Azure Automationアカウントのシステム割り当て済みアクセス許可設定でAzureロールの割り当て設定をする
システム割り当て済みアクセス許可設定でAzureロールの割り当てスコープ設定対象一覧
 
リソースグループ対して仮想マシン共同作成者の役割が割り当てされています。 システム割り当て済みアクセス許可設定で仮想マシン共同作成者の権限を割り当てた場合の画面

※権限付与は必要最低限の権限で割り当てを行うようにします。

—広告—

仮想マシンを起動するRunbookの作成、テスト、公開

RunbookにはPowerShell、Pythonなどいくつかの種類があります。

Azure Automation の Runbook の種類

今回はPowerShellを使ってRunbookを作成しています。

Runbookのリソースを作成

Runbookのリソースを作成します。
Runbook名は"vm-start-01″としています。
Runbookの種類にはPowerShell、ランタイムバージョンには7.2を指定しています。

Runbookのリソース作成
AutomationアカウントでRunbookの作成を選択します。 AutomationアカウントでRunbookを作成する

Runbookの作成画面が表示されます。
Runbook名を設定します。
Runbookの種類、ランタイムバージョンを選択します。

 

Runbookの作成の基本タブでRunbookの種類やランタイムバージョンを設定をする
Runbookの種類で選択できる項目一覧
PowerShellで選択できるランタイムバージョン一覧
Runbookの作成確認画面です。
内容を確認してRunbookのリソースを作成します。

作成が完了するとRunbookの一覧画面に表示されます。
この時点では作成状態は新規になっています。

Runbookの作成確認画面
AutomationアカウントでRunbookの一覧画面

仮想マシンを起動するRunbookを作成する

仮想マシンを起動するRunbookを作成します。

仮想マシンを起動するRunbook

Runbookのリソースを作成します。
“VS Codeで編集"か"ポータルで編集"から選択します。
処理を行うPowerShellを記載します。

※今回は"ポータルで編集"を選択しています。

 

Runbookの編集を開始(ポータルで編集を選択)
PowerShell Runbookの編集画面

作成したRunbookはシステム割り当てマネージドIDを利用した認証と処理(仮想マシンの起動)を規定する内容で構成されます。

Runbookに記載したPowerShellです。

#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

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

Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachineName

Runbookを作成したらテストウィンドウを使ってテストします。
保存、テストウィンドウの順で選択します。

※テストウィンドウを選択すると自動保存されます。

Runbookの編集内容を保存して、テストウィンドウを表示する

テスト画面が表示されます。
開始を選択します。
テストが開始します。

※テストではPowerShellの内容が実際に処理が実行されるので、注意が必要です。

Runbookのテストを開始する
テストが正常終了すると完了と表示されます。
StatusにもSucceededと表示されます。
Runbookのテストが正常に完了した事を確認

Runbookにより仮想マシンが起動された事が確認できます。

※イベント開始者はAutomationアカウントのリソース名になります。

Runbookで起動した仮想マシンの状態を確認
仮想マシンのアクティビティログでRunbookによる起動を確認

Azure PowerShellを利用した仮想マシンの操作方法についてはこちらで紹介しています。

パラメーターを使ったPowerShell Runbookを作成

Runbookは仮想マシン名を固定にしていました。
パラメーターとして仮想マシン名やリソースグループを指定する事も可能です。

PowerShell Runbook の入力パラメーターを構成する

仮想マシンを起動するRunbook(パラメーターを使う)
Runbookの編集画面を表示します。
PowerShellで処理を内容を記載します。
PowerShell Runbookでパラメータを使用した場合

作成したRunbookは、パラメーター、システム割り当てマネージドIDを利用した認証、処理(仮想マシンの起動)を規定する内容で構成されます。
前のRunbookとの違いはリソースグループ、仮想マシンをパラメーターに指定しています。パラメータは必須としています。

Runbookに記載したPowerShellです。

Param
(
 [Parameter (Mandatory= $true)]
 [String] $ResourceGroupName,

 [Parameter (Mandatory= $true)]
 [String] $VirtualMachineName
)

#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

#仮想マシンを起動するPowerShell
Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachineName

※複数パラメータがある場合は",(カンマ)"でパラメータ間を区切る必要があります。忘れるとエラーになります。

テスト画面を表示します。
前のRunbookには無かった、パラメータ入力が表示されます。
起動対象の仮想マシン名、リソースグループをパラメータとして指定します。
パラメータを入力後に開始をクリックするとテストが開始します。

パラメータを指定してRunbookのテストを開始
テストが正常終了すると完了と表示されます。
StatusにもSucceededと表示されます。
パラメータを指定したRunbookのテストが正常に完了した場合

Runbookを利用開始する場合は公開が必要

Runbookを保存するだけでは、Webhook等で外部から呼び出したり実行させることが出来ません。
Runbookを公開する必要があります。

※公開したバージョンのRunbookが実行されます。Runbookを更新した場合は再公開する必要があります。

Runbookを公開

Runbookのメニューに"公開"があります。
選択するとRunbookの発行確認画面が表示されます。
“はい"を選択します。
これでRunbookが利用可能になります。
Runbookの作成状態も発行済みに変わります。
Runbookも開始できるようになります。

PowerShell Runbookを公開する
PowerShell Runbookを発行する
PowerShell Runbook発行後の画面 
発行済みRunbookを一覧表示で確認する
公開したRunbookの開始(パラメータを指定する場合)

Runbookのスケジュール設定

Runbookのスケジュール設定手順についてはこちらで紹介しています。
スケジュールで設定できる内容から平日のみ実行する場合のスケジュール設定例などを紹介しています。

まとめ

Runbookを使った処理の自動化を行うまでの一連の手順を確認してみました。
Automationアカウント作成、Runbookのリソース作成、マネージドIDを利用した権限付与、を理解する為に1個づつ作成して仮想マシンを起動までやってみました。

ギャラリーから作成済みのRunbookのインポートできたり、実際にはもっとお手軽に処理を自動化できます。
非常に簡単に設定、利用できて自動化するのに便利な機能かと思いました。

マイクロソフト公式サイトでもチュートリアルが公開されています。

チュートリアル: マネージド ID を使用して Automation PowerShell Runbook を作成する

Logic AppsのワークフローからRunbookを呼び出して実行させることができます。
手順についてはこちらで紹介しています。

Runbook内の処理で実行時間帯を制限する事もできます。
PowerShell内で実行時間の制限する方法についてはこちらで紹介しています。

Logic Appsを利用しても、仮想マシンの起動停止をスケジュール化する事ができます。
設定手順についてはこちらで紹介しています。

スポンサーリンク