Azure Automation の詳細: Runbook の作成
このポストは、7 月 3 日に投稿した Azure Automation in Depth: Runbook Authoring の翻訳です。
はじめに
Microsoft Azure の新しい Automation サービス (英語) がリリースされました。これにより、開発者や運用管理者は複数のシステムやプロセスにまたがる反復的で時間のかかるタスクを自動化して、Azure の運用をさらに効率化できるようになりました。Azure Automation が提供するこの価値は、Runbook と呼ばれる概念に支えられています。Runbook は IT およびビジネス プロセスを自動化するロジックを格納した PowerShell ワークフローです。
Runbook の活用は、最初は大変ですが、少しトレーニングを積めば簡単にマスターできます。この記事では、Runbook の効率的な作成と使用に役立つ Azure Automation の機能をいくつか詳しく見ていき、次に、Runbook をマスターするために役立つベスト プラクティスやヒントをご紹介します。Automation や Automation Runbook のことをよくご存知でない方は、//build の Azure Automation のプレゼンテーション (英語) や Runbook の概念 (英語) に関する記事をご覧いただき、概要を把握してからこの記事を読み進めていただくことをおすすめします。
Runbook のライフサイクル
Azure Automation が提供する Runbook の作成機能と編集機能について説明する前に、本番環境で未完成の Runbook をだれかに誤って実行されてしまうことがないように、まず Runbook の管理方法について説明したいと思います。Azure Automation の Runbook には「発行 (Published)」と「ドラフト (Draft)」という概念があります。Runbook を新規作成/インポートする場合、または既存の本番用 Runbook を改良する場合は、Runbook の「ドラフト」を使用します。Runbook のドラフトは、だれかが (または自分がうっかりして) 本番のリソースを実行してしまうことを心配することなく、好きなだけ作業できます。保存を繰り返したり、ブラウザーを終了したり、後でまた作業を再開しても問題ありません。Runbook のドラフトの準備ができたら、発行します。ポータル、コマンドレット (英語)、または別の Runbook から開始すると、この発行されたバージョンの Runbook が実行されます。
1 つ注意すべき点として、過去に発行されたバージョンがある Runbook のドラフトを発行した場合も、既に実行されている Runbook ジョブでは過去に発行されたバージョンがそのまま使用されます。そのジョブを一時停止して再開した場合も同様です。現在実行中の既存のジョブで障害が発生するのを防ぐために、新たに発行された Runbook を使用するのは、そのドラフトが発行された後に開始された新しいジョブに限られます。Azure Automation は過去に発行された Runbook をバックエンドで保存し続けますが、Runbook を過去に発行された古いバージョンに戻す手段は現時点では提供していません。古いバージョンの Runbook がどうしても必要な場合は、それを使用した古いジョブを Azure ポータルで検索します。そのジョブの [History] タブをクリックし、[View Source] をクリックすると、そのジョブで実行された Runbook のバージョンのソースが表示されます。
下のスクリーンショットには、Runbook の 3 つの状態 ([New]、[In edit]、[Published]) が表示されています。[New] は、Runbook のドラフトのみ存在し、本番用の Runbook が存在しないことを示しています (この Runbook は最近作成したばかりか、インポートしたばかりと考えられます)。[Published] は、本番用の Runbook のみ存在し、現在作業中のドラフトは存在しないことを示しています。[In edit] は、本番用の Runbook と、現在作成中のドラフトが存在することを示しています。スクリーンショットで選択されている Runbook は [New] で、実行可能な発行済みのバージョンが存在しないため [START] ボタンは無効になっています。[Published] または [In edit] の Runbook は、作成者が正しく機能することを確認した発行済みのバージョンがあるので開始することができます。
Runbook をドリルダウンして [AUTHOR] タブを選択すると、Runbook の発行済みバージョンとドラフトを確認できますが、編集および発行できるのはドラフトのみです (下のスクリーンショットを参照)。この Runbook を AUTHOR ページの [TEST] ボタン以外 (例: [START] ボタン、スケジュール設定、コマンドレット、または別の Runbook でのインライン呼び出し) で開始すると、発行済みの Runbook が実行されます。
Runbook のドラフトで子 Runbook を使用する場合、AUTHOR ページの [TEST] ボタンを使用してこの親 Runbook のドラフトを実行しても、子 Runbook の発行済みバージョンが実行されます。このため、親子の Runbook のセットを更新し、そのそれぞれに変更を加えなければならない場合は、子 Runbook の更新、テスト、発行を最初に行い、親 Runbook をテストする際に最新の子 Runbook が使用されるようにすることがベスト プラクティスとなります。また、この子 Runbook のドラフトを発行すると、Runbook が呼び出されるたびにこの新たに発行されたバージョンが実行されてしまうので、子 Runbook を後方互換にして、子 Runbook を呼び出す発行済みの Runbook で障害が発生しないようにしてください。
同時編集
ここで、「でも、作業中のドラフト版の Runbook を他のユーザーが編集しようとしたらどうなるんだろう」という疑問が出てくるかもしれません。もちろんその問題も解決済みです。複数のユーザーで Azure サブスクリプションや Azure Automation アカウントを共有している場合を想定して、他のだれかが作業している Runbook の編集を禁止するのではなく、Runbook を編集時は [In edit] とはっきり表示するようにしました (この記事の最初のスクリーンショットがその例です)。ベスト プラクティスとしては、[In edit] と表示されている場合、その Runbook のドラフトを作成したのが自分でなければ作業するのを控えるようにします。Runbook が [Published] になる、つまりドラフトがなくなり、この Runbook の新しいバージョンを作成できるようになるまで待つか、または Runbook のドラフトの所有者に頼んでドラフトに必要な更新を行ってもらうか、自分で更新できるようにドラフトを破棄してもらいます。
Runbook 作成機能
では、Runbook の作成ページを開いて、Runbook の作成を簡単にする便利な機能について見ていきましょう。
上の画像を見るとわかるように、AUTHOR ページの [DRAFT] タブは 4 つのセクションに分かれています。
- EDITOR PANE: PowerShell ワークフローを使用して Runbook をテキストで作成するための領域です。
- OUTPUT PANE: Runbook のドラフトの直近のテスト ジョブのステータスと出力が表示されます。
- コマンド バー: Runbook の作成を支援するコマンドが表示されます。
- Runbook 一覧: ご使用の Automation アカウントのすべての Runbook が表示されます。異なる Runbook の AUTHOR ページにすばやく移動できます。
AUTHOR ページのコマンド バーを使うと、次のタスクを実行できます。
- MANAGE: Runbook でアセットが必要になった場合に、作成環境でそのままモジュールをインポートしたり、設定を作成したりすることができます。
- INSERT: アクティビティや Runbook、設定を Runbook の定義に挿入できます。このタスクについては後述します。
- SAVE: Runbook のドラフトを保存します。前回の作業場所から作業を再開できます。
- DISCARD DRAFT: この Runbook を更新する必要がなくなった場合にドラフトを削除して、他のユーザーがこの Runbook のドラフトを独自に作成できるようにします。ドラフトの作成者に限らず、この Automation アカウントが含まれる Azure サブスクリプションを利用可能なユーザーであればだれでも Runbook のドラフトを破棄できます。ただし、この記事の「同時編集」セクションで説明したベスト プラクティスに従い、自分が作成者ではない Runbook のドラフトは削除しないようにしてください。
- TEST: テストとして、この Runbook のドラフトを本番どおりに実行します。Runbook のドラフトが実行され、OUTPUT PANE に出力が表示されます。このテストは仮想的なものではなく、実際のリソースに対して実際の処理が行われます。このため、Runbook のテストは本番用以外のリソースに対して実行してください。テストについてはまた後ほど取り上げます。
- PUBLISH: Runbook が完成し正しく機能することを承認し、現在のドラフトをこの Runbook の最新版として発行します。
Runbook エディター
AUTHOR ページでは、EDITOR PANE で作業する時間が最も多くなります。EDITOR PANE には Visual Studio Online の「Monaco」コントロールを利用した強力な作成ツールが備わっています。このエディターを使用すると、PowerShell ISE と同じようにブラウザーで Runbook を作成できます。エディターには、PowerShell 構文の色分け表示、自動インデント、閉じ括弧の自動補完、参照の強調表示、オートコンプリート、開発用キーボード ショートカット、機能が制限された IntelliSense が用意されています。
次に、EDITOR PANE ですぐに使えるヒントをご紹介します。
- 入力し始めると、オートコンプリートが動作します。Tab キーを押すとオートコンプリートの候補が表示されるので、右方向キーを押して候補の選択を決定するか、Ctrl キーを押しながら Space キーを押してオートコンプリートの候補をすべて表示し、スクロールして候補を選択します。
- コードの単語をクリックすると、Runbook 内のその単語がすべて見やすく強調表示されます。
- 一般的な開発環境と同じキーボード ショートカットを使用できます。たとえば次のものです。
- 検索 (Find)/置換 (Replace): Ctrl + F
- すべて選択 (Select All): Ctrl + A
- 切り取り (Cut): Ctrl + X
- コピー (Copy): Ctrl + C
- 貼り付け (Paste): Ctrl + V
- 元に戻す (Undo): Ctrl + Z
- やり直し (Redo): Ctrl + Y
- 現在入力中の単語のオートコンプリートの候補一覧を表示: Ctrl + Space
- Ctrl キーを押しながら F キーを押して [Find] メニューを開き、[Find] テキストボックスの左にある灰色の領域をクリックすると [Replace] メニューが表示されます。Enter キーを押すと次の単語に移動します。ESC キーを押すと [Find] メニューが閉じます。
ここで 1 つ注意すべき点として、オートコンプリートの候補を表示する IntelliSense は、PowerShell 全般ではなくエディター内の内容しか認識していません。そのため、オートコンプリートの候補として表示されるのは、この Runbook で既出のコードに限られます。たとえば、前出のスクリーンショットを見ると、オートコンプリートのドロップダウン メニューには Runbook で既に使用している単語が候補として表示されています。PowerShell の「Write-Progress」コマンドレットも候補としてこのドロップダウンに表示されてもおかしくないはずですが、この Runbook では使用されていなかったため候補として表示されません。今後のリリースで IntelliSense の精度を改善していく予定です。
OUTPUT PANE
OUTPUT PANE も、よく使用する機能です。Runbook の作成では、コマンド バーの [TEST] ボタンを使用して Runbook のドラフトの内容のテストを行うのが一般的です。OUTPUT PANE には Runbook のドラフトの直近のテストのステータスと出力が表示されます。OUTPUT PANE は Runbook エディターと同じページに表示されるので、テストを実行しながら Runbook の作成を続けることができます。テストが完了したら、出力を確認して Runbook のドラフトを適宜修正します。ページを切り替える必要はありません。OUTPUT PANE は上部の青いバーをクリックすると拡大/縮小できるので、不要なときは縮小しておくと Runbook を作成するためのスペースが広くなります。
OUTPUT PANE は PowerShell コンソールの外観にできるだけ似せており、上のスクリーンショットを見るとわかるように、PowerShell コンソールと同様、Runbook のストリーム出力はストリームごとに色分けして表示されます。また、Runbook は必要に応じて停止または一時停止できます。一時停止した Runbook や、例外の発生により一時停止した Runbook は再開することができます。EDITOR PANE と同様に、OUTPUT PANE をクリックして Ctrl キーを押しながら F キーを押すと、[Find] メニューが表示され、Runbook 出力をすばやく検索できます。
Runbook ドラフトのテストやトラブルシューティングといった OUTPUT PANE の高度な使用方法については、ブログで近く取り上げます。それまで待てない方は、Service Management Automation の Runbook のテストおよびトラブルシューティングに関する記事 (英語) をお読みください。Service Management Automation はローカルにインストール可能な Azure Automation と同等の機能です。Service Management Automation と Azure Automation は基本的に同じサービスで、提供の方法が異なるだけで中身はほぼ同じです。
Runbook、アクティビティ、設定の検索と挿入
もう 1 つの便利な機能として、[INSERT] オプションを紹介します。下のスクリーンショットに示すように、Runbook、アクティビティ (Activity)、設定 (Setting) を挿入することができます。
先に進む前に、ここで、アセット、設定、アクティビティ、コマンドレット、統合モジュール、PowerShell モジュールなどの用語について説明しておきましょう。似たような用語ばかりなので混乱してしまわないよう、よくご確認ください。
- アセット – 単一または複数の Runbook が依存する要素です。要素には、統合モジュール、資格情報、スケジュール、接続、証明書、変数があります。各アセットの詳細については、近く公開予定の Ravi 氏のブログ記事を参照してください。
- 設定 – Runbook 内で単一または複数のアクティビティによって使用される単一または複数の情報が格納されたアセットです。アセットのうち、資格情報、接続、証明書、変数は設定になります。統合モジュールとスケジュールは設定ではありません。
- PowerShell ワークフローのアクティビティ - PowerShell の専門家にとって「アクティビティ」は PowerShell ワークフローのアクティビティを意味します。PowerShell ワークフローのアクティビティは PowerShell コマンドレットとは異なります。コマンドレットは Runbook 内の関数やインライン スクリプトから呼び出すことができますが、PowerShell ワークフローのアクティビティは呼び出すことはできません。Azure Automation で使用するもののほとんどはコマンドレットまたはコマンドレットと PowerShell ワークフローのアクティビティの両方として実装されているため、区別する必要はありません。ただし、Runbook 開発の肝である RunbookConstructs 統合モジュールのすべてのアクティビティは、PowerShell ワークフローのアクティビティとしてのみ実装されるので、Runbook 内でインライン スクリプトまたは関数として使用することはできません。PowerShell ワークフローのアクティビティの詳細については、Don Jones 氏によるこちらの記事を参照してください。これらの Automation で提供されている PowerShell ワークフローのアクティビティは次のとおりです。
- Get-AutomationCertificate
- Get-AutomationConnection
- Get-AutomationPSCredential
- Get-AutomationVariable
- Set-AutomationVariable
- Azure Automation アクティビティ –Runbook 内の一機能です。Azure Automation では「アクティビティ」は PowerShell コマンドレットまたは PowerShell ワークフローのアクティビティを意味します。元は System Center Orchestrator の用語だった「アクティビティ」が、System Center Service Management Automation や Azure Automation でも使用されています。
- PowerShell モジュール – PowerShell コマンドレットと PowerShell ワークフローのアクティビティの集合です。PowerShell スクリプト、ワークフロー、Runbook から使用できます。
- 統合モジュール – Runbook のアクティビティで使用する Automation 接続の種類を指定したメタデータ ファイルをオプションで含む PowerShell モジュールです。オプションの外部ファイルを持つ PowerShell モジュールであることから、Azure Automation 担当者の間では単純に「モジュール」と呼んでいます。「統合モジュール」という名称は、Orchestrator の「統合パック」と PowerShell の「PowerShell モジュール」を組み合わせた言葉です。Azure Automation の統合モジュールについて詳しく取り上げた記事が近く公開される予定です (または、ほぼ同じ内容について書かれた Service Management Automation の記事 (英語) を参照してください)。
では、挿入機能に話題を戻します。[Insert] タスクを使うと、Runbook で使用可能なすべての Runbook、設定、アクティビティを把握できます。また、その構文を挿入できるので便利です。たとえば次のスクリーンショットでは、INSERT SETTING ウィザードで「TestVariable」という変数を選択して、Runbook に追加しています。設定の説明と値が表示されています。
チェックマークをクリックすると、実行時にこの設定を取得する構文が Runbook 内の現在のカーソル位置に挿入されます。
インラインの INSERT RUNBOOK ウィザードは、INSERT SETTING ウィザードに似ています。
次に進む矢印をクリックすると、Runbook の構文が表示されるので、使用したい Runbook かどうかを確認します。
チェックボックスをクリックすると、全構文が Runbook に挿入されます。後はパラメーターを入力して、編集中の Runbook 内からインラインでこの Runbook を呼び出します。
最後は INSERT ACTIVITY ウィザードです。Azure Automation システムのすべてのモジュールと、選択したモジュールのすべてのアクティビティが表示されます。
このウィザードに標準の検索機能はありませんが、ブラウザーの検索機能 (Ctrl + F) を使用してコマンドレットを検索できます。これは INSERT SETTING ウィザードや INSERT RUNBOOK ウィザードでも可能です。
アクティビティをクリックすると、このコマンドレット用に PowerShell モジュールで指定されている場合は、説明とヘルプ リンクが表示されます。
[View detailed help] をクリックすると、このコマンドレットの使用方法に関する有用な情報が詰まったオンライン ヘルプ ページが表示されます。下はその例です。
INSERT ACTIVITY ウィザードの [next] ボタンをクリックすると、INSERT RUNBOOK ウィザードの構文ビューと似たメニューが表示されます。このアクティビティに複数のパラメーター セットがある場合は、Runbook で使用したいものを選択します。すると、選択したパラメーター セットの構文のみ挿入されます。
まとめ
この記事では、Azure Automation に用意されているさまざまな支援機能をご紹介しました。これらの機能を使用することで、複数の Runbook 作成者や運用担当者が同時に作業している環境でも、優れた Runbook をすばやく簡単に作成できることがおわかりいただけたのではないでしょうか。この知識を身に付ければ、Automation Runbook をマスターする日が来るのも遠くはないでしょう!
まだ Azure Automation をご利用でない方は、プレビュー版にサインアップしていただき、スタートアップ ガイド (英語) をご覧ください。