初めてのAutomationアカウント(VMを起動するRunbookを作って動かしてみた)

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

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

Azure Automation とは

 詳細はマイクロソフト公式サイトに記載の通りですが、Automationアカウントを利用する事でAzure仮想マシン等を準備する事なくPowerShellを実行すると言った事が出来ます。
 実行処理内容はRunbookに記載しますが、PowerShellやPython等を使う事が出来ます。
 スケジュール設定やAzure Monitorでアラート発生時にWebhookを使って呼び出すなどにより自動的に処理が出来たりします。
 自分でRunbookを作成しなくても更新プログラムの管理等の機能やテンプレートが用意されており、仮想マシンへの自動パッチ充て等にも利用する事も出来ます。

 今回は初めてRunbookを使ってみるという想定で、Automationアカウントの作成、マネージドIDの設定、仮想マシンを起動するRunbookの作成までを実施してみました。

 ※AutomationアカウントではVM の開始/停止ソリューションが用意されていますが、今回は自分で作成する事を目的にしていますのでRunbookを自分で作成しています。
 ※2021年12月に記事を大幅に刷新しました。

スポンサーリンク

Azure PortalでAutomationアカウントを作成、設定

 Azure AutomationアカウントでRunbookを作成して何か処理をさせる為に必要となる作業はざっくり言うと3つ作業に分類されます。

      • リソースとしてAutomationアカウント作成
      • 認証を行うマネージドID作成して操作を行う為の権限(Auzreロール)を割り当て
      • 実際に処理を行うRunbookを作成

 ※設定方法は色々ありますが、今回は一番基本的な方法で実施しています。

Automationアカウントを作成する

 Azure Portalを使ってAutomationアカウントを作成します。マイクロソフト公式サイトを参考に進めます。

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

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

※今回Automationアカウント名はtest-automation-accountにしています。

詳細設定画面でマネージドIDの設定を行います。
デフォルトではシステム割り当てが選択されています。

今回はデフォルト通りのシステム割り当てを選択して進めます。

確認画面が表示されますので、内容を確認して問題が無ければ作成をクリックします。

これでAutomationアカウントの作成は完了です。

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

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

マネージドIDの種類

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

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

 ※マネージドIDについてはMS Learnにも説明があります。混乱しがちなサービスプリンシパルとの違いと言った事の説明もあります。

マネージドIDを確認する

 Automationアカウントの作成時にシステム割り当てを選択すると、自動でシステム割り当てマネージドIDが作成されます。
 今回は作成されたマネージドIDを確認しロールの割り当てを行います。

 ※後からシステム割り当てマネージドIDを有効にする方法はマイクロソフト公式サイトに記載がございます。

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

AutomationアカウントでIDを選択するとマネージドIDの設定が確認出来ます。

状態がオンになっており、システム割り当てマネージドIDが使える事が分かります。

Azureロールの割り当てを選択し、システム割り当てマネージドIDへの権限割り当てを行っていきます。

ロール割り当ての追加を選択します。

ロールの割り当てはスコープ、サブスクリプション、役割の選択を行います。
スコープはサブスクリプション、リソースグループ、Key Vault、ストレージ、SQLから選択可能です。
今回は仮想マシンの起動停止を行うという事でリソースグループに対して仮想マシン共同作成者を割り当てています。

PowerShellを利用して割り当てる方法もあります。マイクロソフト公式サイトを参照ください。

今回システムマネージドID割り当てを行ったリソースグループでアクセス制御(IAM)を確認してみると仮想マシン共同作成者が割り当てされている事が分かります。

※今回仮想マシン共同作成者を割り当ていますが、実際の利用にあたっては最低限の権限での割り当てを行うようにします。

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

 RunbookにはPowerShellだけではなくPython等いくつかの種類があります。

Azure Automation の Runbook の種類

 今回は初めて使う事を前提にしているので基本となるPowerShellを選択しています。

Runbookのリソース作成する

最初にRunbookのリソースを作成します。

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

Runbookの作成画面が表示されます。名前を入力し、Runbookの種類を選択します。

今回はRunbook名をVM-Startとしています。

Runbookの種類にはPowerShellの他に、Python、PowerShellワークフロー、グラフィカルPowerShell、グラフィカルPowerShellワークフローがあります。それぞれの説明についてはマイクロソフト公式サイトを参照ください。

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

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

仮想マシンを起動するRunbook

Runbookのリソースを作成すると編集画面が表示されます。処理を行う為のPowerShellを記載します。

今回作成したRunbookはマネージドIDを利用した認証部分と実際に処理を規定する部分で構成されます。

    • マネージドIDを利用した認証部分
    • 実際の処理部分
      • 今回は仮想マシンを起動するPowerShellを記載しています。

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

$ResourceGroupName =“リソースグループ名"
$VirtualMachineName =“仮想マシン名"

Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachineName

Runbookを作成したらテストウィンドウを使ってテストを行います。

※テストウィンドウを選択すると自動保存されますが、保存は定期的に実施しましょう。

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

※テストとはありますが、チェックをするだけではなく実際に処理が実行されます。注意しましょう。

テストが正常終了すると完了と表示されます。
Operation実行結果にもSucceededと表示されます。
仮想マシンの状態が実行中になっている事が確認出来ます。

Runbookでパラメータを使ってみた

先ほどのRunbookは仮想マシン名を固定にしていましたが、パラメータとして指定する事も可能です。

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

サイトを参考にしながら設定してみました。

仮想マシンを起動するRunbook(パラメータを使う)
再度Runbookの編集画面を表示し、処理を行う為のPowerShellを記載します。

パラメータ部分マネージドIDを利用した認証部分と実際に処理を規定する部分で構成されます。
先ほどとの違いはリソースグループ、仮想マシンをパラメータに指定しています。なおパラメータのTypeはStringにしています。

    • パラメータ部分
    •  マネージドIDを利用した認証部分
    • 実際の処理部分
      • 今回は仮想マシンを起動するPowerShellを記載しています。

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

$ResourceGroupName =“リソースグループ名"
$VirtualMachineName =“仮想マシン名"

Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachineName

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

テスト画面が表示されます。
先ほどとは違いパラメータが表示されます。
対象となる仮想マシン(リソースグループも)がパラメータになっている事が分かります。
パラメータを入力後に開始をクリックするとテストが開始します。

テストが正常終了すると完了と表示されます。
Operation実行結果にもSucceededと表示されます。

Runbookを実際に使う為には公開が必要

Runbookを保存するだけでは開始(実行)が出来ません。Runbookを利用する為には公開が必要になります。

Runbookを公開
Runbookの編集画面に公開と言う項目がありますので選択します。

Runbookの発行確認が表示されます。はいを選択します。

これでRunbookが利用可能になりました。

Runbookで開始が選択できるようになっています。

まとめ

 今回はAutomationアカウントやRunbookを理解する為に1個づつ作成して仮想マシンを起動までやってみました。
 実際にはギャラリーから作成済みのRunbookのインポートする事が出来たりしてもっとお手軽に利用する事が可能です。
 Automationアカウントを使うと、非常に簡単に設定、利用できて自動化するのに便利な機能かと思いました。

 マイクロソフト公式サイトでもチュートリアルが公開されていますのでこちらを試してみても良いかと思います。

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

Runbookの実行時間帯制限についてはこちら。