part-4-getting-started-with-azure-automation-testing-draft-runbooks

Azure Automation パート4:サンプルの Runbook のテスト

Azure Automation パート4:サンプルの Runbook のテスト

このブログでは、サンプルの自動化プロジェクトを準備し、前回 (パート3) のブログで作成した3種類のアセットを使用して Runbook をテストする方法を示します。

  • ReportRecipients という名前の変数アセット
  • ServiceAccount という名前の資格情報アセット
  • EveryMondayAtSix という名前のスケジュールアセット

このシリーズのパート1、パート2、パート3は、それぞれ以下からアクセスできます。

Azure Automation パート1:イントロダクション

Azure Automation パート2:Runbook の作成

Azure Automation パート3:アセットの管理

まだ公開されていない Runbook はドラフトと見なされます。Runbook を公開する前に、それが意図した通り正しく機能するかをテストして確認しておく必要があります。

サンプルのドラフト Runbook の準備

テスト用のドラフト Runbook の準備をします。前のブログ(パート3)で述べたように、サンプルの Runbook は、以下のアクションを実行する自動化プロジェクトです。

  • 毎週月曜日の午前6時に実行
  • Login to Azure にログイン
  • 仮想マシンとその電源状態のリストを取得
  • 指定された受信者アドレスにレポートをメールで送信

Runbook には、Azure に接続して、情報をクエリするコードが含まれるので、まず、Az.Accounts モジュールと Az.Compute モジュールを Automation アカウントにインストールする必要があります。

ローカルマシンにモジュールをインストールする場合、通常 Install-Module コマンドレットを使用して、PSGallery からインストールしますが、Azure Automation でのモジュールのインストールは通常の方法とはかなり異なります。PowerShell を使用してインストールを行うこともできますが、特にインストールするモジュールが PSGallery にある場合は、Azure Portal のモジュールギャラリーを使用する方がはるかに簡単です。

Azure Automation アカウントへのモジュールのインストール

自動化アカウント Azure-AA に必要な Az モジュールをインストールするためのステップを以下に示します。

  1. Azure Automation アカウントに移動します。ここでは、アカウント名は Azure-AA です。
  2. 左ペインの [Shared Resources] セクションで、[Modules gallery] をクリックします。
  3. 次に、「検索」ボックスに Az.Accounts と入力し、Enterキーを押します。結果のリストが表示されます。
  4. 表示された Az.Accounts をチェックして、クリックします。runbooks1

[Modules gallery で ‘Az.Accounts’ を検索]

  1. モジュールをインポートするページに代わるので、[Import] をクリックします。
  2. インポートが終了したら、[OK] をクリックします。runbooks2

[Az.Accounts モジュールのインポート]

Az.Compute モジュールについても同様にしてインポートします。

必要なモジュールのインポートが完了したら、Azure Automation アカウントに戻り、[Shared Resources] セクションで [Modules] をクリックします。モジュールが一覧表示され、ステータスが Available になっているのが確認できます。runbooks3

[Az.Accounts と Az.Compute モジュールがインストールされました]

Runbook コードの作成

必要なモジュールをインストールすれば、Runbook コードの作成を開始できます。この例では、PowerShell ISE を使用してコードを作成し、Azure にインポートします。

PowerShell ISE を開き、下のコードをコピーして、C: の下に .ps1 の拡張子を付けて保存します。(ここの例では、AzVmReport.ps1 という名前にしてあります。)

# Import the modules
Write-Verbose "Import required modules"
Import-Module Az.Accounts
Import-Module Az.Compute

# Store the ServiceAccount asset value to a variable
Write-Verbose "Retrieving the ServiceAccount credential"
$ServiceAccount = Get-AutomationPSCredential -Name 'ServiceAccount'

# Store the ReportRecipients asset value to a variable
Write-Verbose "Retrieving the ReportRecipients variable"
$ReportRecipients = Get-AutomationVariable -Name 'ReportRecipients'

# Connect to Azure
Write-Verbose "Connecting to Azure"
Connect-AzAccount -Credential $ServiceAccount

# Get the status of all Virtual Machines present in Azure and store in a variable.
Write-Verbose "Getting All VM power status"
$VMStatus = Get-AzVM -Status | Select-Object ResourceGroupName, Name, PowerState

# Build the email parameters
$mailProperties = @{
    #Assuming that the email address is same as the UPN.
    #Otherwise, change this value to the correct address.
    From = ($ServiceAccount.UserName)

    # Use the ReportRecipients value
    To = $ReportRecipients

    Subject = 'Azure VM Powered State Report'

    # Convert the $VMStatus values to HTML and use it as the body of the email.
    Body = (($VMStatus | ConvertTo-HTML) -join "`n")

    # Set format as HTML
    BodyAsHTML = $true

    # Using the Office 365 SMTP Relay
    SMTPServer = 'smtp.office365.com'

    # Office 365 SMTP listens to port 587
    Port = 587

    # Office 365 SMTP requires SSL
    UseSSL = $true

    # Use the ServiceAccount
    Credential = $ServiceAccount

}

# Send the report
Write-Verbose "Sending email report"
Send-MailMessage @mailProperties -Verbose

コードの保存で、インポートの準備が整いました。次のセクションで、Azure Portal と PowerShell を使ってコードをインポートする方法を示します。

Azure Portal を使ったコードのインポート

コードを新しい Runbook にインポートするには、次のような手順で行います。

  1. Azure Automation アカウントに移動します。
  2. 左ペインの [Process Automation] セクションで、[Runbooks] をクリックします。
  3. 中央ペインで [Import a runbook] をクリックします。
  4. 右ペインの [Import a runbook] フォームで、C: の下に .ps1 の拡張子を付けて保存したスクリプト(AzVmReport.ps1)を指定します。名前と Runbook タイプの値は自動的に入力されます。
  5. [Create] ボタンをクリックします。runbooks4

[ポータルを使った Runbook コードのインポート]

完了すると、新しい Runbook が Runbooks リストに表示されます。runbooks5

[Runbook コードがインポートされました]

コードを変更したい場合は、Runbook 名をクリックして [Edit] ボタンをクリックします。次のような Runbook エディターが表示されます。runbooks6

[Runbook コード・エディタ]

PowerShell を使ったコードのインポート

PowerShell を使って Runbook にコードをインポートするには、次のようにします。

  1. PowerShell を使用して Azure に接続します(まだ接続されていない場合)。
  2. 次のコマンドをコピーして、PowerShell コンソールに貼り付けます。
Import-AzAutomationRunbook `
    -Path C:\Scripts\AzVmReport.ps1 `
    -AutomationAccountName Azure-AA `
    -ResourceGroup Azure-AA-RG `
    -Type PowerShell

上記のコードは、コード C:\Scripts\AzVmReport.ps1 を、リソースグループ Azure-AA-RG に属する、Azure Automation アカウント名 Azure-AA の中の PowerShell タイプの Runbook にインポートします。

コードのインポートが完了すると、次のような出力が表示されます。

runbooks7

[PowerShell を使った Runbook コードのインポート]

インポートした Runbook のコードを変更したい場合は、いったんコードを編集してから、以下のように、同じコマンドに、-Force パラメータを追加して実行すれば再インポートできます。

runbooks8

[PowerShell を使った場合の Runbook コードの更新]

サンプルのドラフト Runbook のテスト

コードが正しくインポートできれば、このサンプルのドラフト Runbook をテストすることができますが、その前に、Azure Automation と PowerShell のコードのテストの違いについて少し説明したいと思います。

PowerShell には、スクリプトをテストできるツールがあります。そのようなツールには、Pester や PSScriptAnalyzer があり、通常のコマンドレットを実行するのと同じように PowerShell から実行できます。

一方、Azure Automation のテストは、ポータルの専用のテストペインを使用しないと実行できません。外部テストツールの使用は適用できず、コードを実行して結果が期待どおりかどうかを確認する以外にできることはあまりありません。

Runbook をテストするには、テストしたい Runbook に移動し、[Edit] をクリックします。runbooks9

[エディタを開くためには ‘Edit’ をクリック]

次に [Test pane] ボタンをクリックします。runbooks10

[テストペインを開くためには ‘Test pane’ をクリック]

テストペインで [Start] ボタンをクリックして、Runbook のテストを開始します。テストが完了すると、ステータスが表示されます。runbooks11

[Runbook のテストが終了しました]

上のスクリーンショットでわかるように、有用な情報はほとんどありません。これは、Runbook のスクリプトをテストしたときコンソールに表示するべきコードがなかったためです。自分で Runbook を作成しようとする場合、コードに詳細なログを追加するなどといったこと考慮することをお勧めします。

以下は、Runbook によって生成され、電子メールで送信されるHTMLレポートの例です。

runbooks12

[Runbook によって生成されたサンプルのメールレポート]

まとめ

このブログでは、コードを Runbook にインポートする方法と、コードを変更する方法、そしてドラフトをテストする方法を説明しました。

次のブログでは、ドラフト Runbook を公開し、公開された Runbook を実行する方法を説明します。ログの確認方法も見ていきます。どうぞよろしくお願いします。

 

Comments
Comments are disabled in preview mode.
Loading animation