PowerShellとAzure Automationで始めるRunbookの作成と管理

Runbookは、Azure Automationでタスクを自動化するために使用されるスクリプトまたはワークフローのことを指します。

Runbookを利用すると、サーバーやアプリケーションのメンテナンス、インフラ管理、リソースのプロビジョニング、バックアップなどの繰り返し行われる操作を自動化できます。

Azure AutomationのRunbookは、スケジュールやトリガーにより自動的に実行できるため、運用負荷を軽減し、ヒューマンエラーを減らす効果があります。

以下、Runbookの特徴、種類、仕組み、用途について詳しく見ていきましょう。


Runbookの特徴

  • 自動化:Runbookは、時間指定でのスケジュールやイベントのトリガーにより自動で実行できるため、夜間や週末のシステム保守作業にも適しています。
  • 複雑なワークフロー:複数のステップを組み合わせた複雑なワークフローを自動化できます。
  • 監視とログ:Runbookの実行状況はAzureポータルで監視でき、ログが保存されるため、エラーログを確認してトラブルシューティングに役立てることもできます。
  • PowerShellとPython対応:Azure AutomationのRunbookはPowerShellやPythonで記述できるため、幅広いシステムやサービスに対応します。

Runbookの種類

Azure Automationでは、目的や用途に応じて4種類のRunbookが提供されています。

PowerShell Runbook

PowerShell Runbookは、通常のPowerShellスクリプトを使用して作成します。

シンプルなコマンド実行から複雑なスクリプトまで幅広く対応でき、WindowsやAzure環境での操作に適しています。

Python Runbook

Python RunbookはPythonスクリプトを使用するRunbookです。Linux系サーバーやアプリケーションの操作に適しており、データ処理や機械学習、サーバー管理などの自動化にもよく使われます。

Graphical Runbook

グラフィカルRunbookは、ドラッグ&ドロップで作成するビジュアル形式のRunbookです。

特にプログラミングスキルが必要なく、直感的にワークフローを組むことができます。

シンプルなプロセスを視覚的に設定する際に便利です。

PowerShell Workflow Runbook

PowerShell Workflow Runbookは、PowerShell Workflowスクリプトを使用するRunbookで、複雑なタスクの並列処理や長時間実行タスクに適しています。

複数の操作を並行して実行し、高度なエラーハンドリングを行う場合に使用されます。


Runbookの仕組み

Runbookは、Azure Automationアカウント内に保存され、実行される際には以下の流れで進行します:

  1. 実行開始:手動で開始するか、スケジュールやトリガーに基づいてRunbookが開始されます。
  2. ジョブの作成:Runbookが実行されると、1回の実行ごとにジョブが生成され、ジョブの状態が監視されます。
  3. ジョブの実行:Azure Automationがスクリプト内のコマンドを順次実行し、結果を返します。実行時間が長い場合も、ジョブの状態や進捗がリアルタイムで把握できます。
  4. ログの保存:実行結果は「出力」「エラーログ」として記録され、監視やトラブルシューティングに活用できます。

Runbookの用途

Runbookの代表的な用途には以下のようなものがあります。

リソースの自動プロビジョニング

新しい仮想マシン(VM)やストレージアカウントなどのリソースを自動で作成するRunbookです。

プロビジョニングプロセスを標準化することで、設定ミスや手動作業による時間の浪費を防ぎます。

定期メンテナンス作業

定期的なパッチ適用、サービスの再起動、不要ファイルの削除など、リソースのメンテナンス作業を自動化します。

スケジュールを設定すれば、業務時間外に自動実行されるため、運用負荷が軽減されます。

アラートとトラブルシューティング

監視システムと連携し、特定のアラート発生時にRunbookをトリガーすることで、トラブルシューティングを自動化できます。

例えば、CPU使用率が高い場合にサーバーを自動再起動するRunbookを設定し、障害対応を迅速に行えます。

システムバックアップとリストア

Azureのストレージやデータベースを定期的にバックアップするRunbookです。

バックアップジョブを自動化することで、データ保護のルールを徹底し、万が一の障害に備えます。


Azure Automationの準備

Azure AutomationでRunbookを作成するには、以下の準備が必要です:

  1. Azureサブスクリプションの用意:Azure Automationは有料サービスのため、Azureサブスクリプションが必要です。
  2. Automationアカウントの作成:Azureポータルで「Automationアカウント」を作成します。

Automationアカウントの作成手順

  1. Azureポータルにアクセスし、検索バーに「Automation」と入力して「Automationアカウント」を選択します。
  2. 「作成」をクリックし、必要な情報を入力します(リソースグループや名前など)。
  3. 「確認および作成」をクリックし、アカウントを作成します。

Runbookの作成手順

Automationアカウントが準備できたら、実際にRunbookを作成します。

PowerShell Runbookの作成

  1. Azureポータルの「Automationアカウント」画面で「Runbook」を選択し、「+ 作成」をクリックします。
  2. 「Runbookの作成」画面が表示されたら、以下の項目を入力します:
    • 名前:Runbookの名前を入力(例:MyFirstRunbook)
    • Runbookの種類:PowerShellを選択
    • 説明:任意でRunbookの説明を記入
  3. 「作成」をクリックすると、Runbookエディターが開きます。

スクリプトの記述

Runbook内で実行するスクリプトをPowerShellで記述します。

以下のようなシンプルな例を試してみましょう:

Write-Output "Hello, Azure Automation!"

このスクリプトは、「Hello, Azure Automation!」という文字列を出力します。

Runbookの公開と実行

  1. 作成したRunbookは初期状態で「下書き」の状態です。「発行」ボタンをクリックし、Runbookを公開します。
  2. 「開始」ボタンをクリックすると、Runbookが実行されます。実行結果を「出力」タブで確認することができます。

Runbookの管理

Runbookは作成だけでなく、管理も重要です。

ここでは、Runbookのスケジュール設定とモジュール管理について説明します。

スケジュールの設定

  1. AzureポータルのRunbook画面で、「リンクされたリソース」→「スケジュール」を選択し、「+ 新しいスケジュール」をクリックします。
  2. スケジュール名、実行頻度、開始時間などを設定し、「OK」をクリックします。
  3. 設定したスケジュールにRunbookをリンクすると、指定した時間に自動で実行されます。

モジュールの管理

Runbookで使用するPowerShellモジュールをAutomationアカウントにインポートすることも可能です。

Azure PowerShellなど、追加のモジュールが必要な場合は以下の手順でインポートします:

  1. Automationアカウントの「モジュールギャラリー」に移動します。
  2. 必要なモジュールを検索し、「インポート」をクリックします。
  3. インポートが完了すると、Runbook内でそのモジュールを使用できるようになります。

Runbookのベストプラクティス

効果的なRunbookを作成・運用するためのベストプラクティスには、以下の点があります。

エラーハンドリングを実装する

Runbook内で発生し得るエラーを想定し、Try-Catch構文やエラー時の通知を組み込んでおくことで、スムーズなトラブルシューティングが可能になります。

try {
    # 実行する処理
    Stop-AzVM -ResourceGroupName $resourceGroupName -Name $vmName -Force
} catch {
    Write-Error "エラーが発生しました: $_"
}

モジュールの依存関係を確認する

Azure AutomationでRunbookを使用する際には、必要なPowerShellモジュールやPythonライブラリを事前にインポートしておく必要があります。

依存関係のあるモジュールが不足しているとエラーが発生するため、モジュール管理に注意します。

ログと監視の設定

Runbookが正常に実行されるかどうかを確認するため、適切なロギングと監視を設定しておくことが重要です。

エラーや警告が発生した際にアラートが届くようにすると、問題の早期発見・解決につながります。


演習:自動化されたバックアップRunbookの作成

演習内容:仮想マシン(VM)のスナップショットを取得し、バックアップを行うRunbookを作成してみましょう。

ステップ1:必要なモジュールのインポート

Az.ComputeモジュールをAzure Automationアカウントにインポートしておきます。

ステップ2:Runbookの作成

新規Runbookを作成し、次のスクリプトを入力します。

# Azureにログイン
Connect-AzAccount

# バックアップを行う仮想マシンの情報
$vmName = "VM-Test"
$resourceGroupName = "<リソースグループ名>"

# スナップショットの作成
$timestamp = Get-Date -Format "yyyyMMddHHmm"
$snapshotName = "$vmName-Snapshot-$timestamp"

# スナップショット構成
$snapshotConfig = New-AzSnapshotConfig -SourceUri "/subscriptions/<サブスクリプションID>/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachines/$vmName" -Location "East US" -CreateOption Copy

# スナップショットの作成
New-AzSnapshot -Snapshot $snapshotConfig -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
Write-Output "スナップショット $snapshotName が作成されました。"

ステップ3:Runbookの実行

Runbookを公開し、実行します。

バックアップのスナップショットが正常に作成されるかを確認しましょう。


このように、Runbookを使用することで、バックアップやプロビジョニングのような頻繁に実行するタスクを容易に自動化できるため、運用の効率化と安定性向上に役立てることが可能です。