Azure Automation の Webhook 機能が超便利。OMS からの Webhook 呼び出しもサポート。KeyVault と連携すれば面倒な URL 管理も楽々!


Azure Automation はご存知ですか?

数ある Azure の機能の中でも、私が一番好きなものです。Automation を使用すると、Windows PowerShell スクリプトを Azure 上で実行することができます。

Azure 上で実行すると何がうれしいかというと、スクリプトを実行する環境を用意しておく必要が無いのです。

普段あまり意識しませんが、スクリプトを実行するためにはいくつかの条件を満たす必要があります。

  • スクリプトを実行するサーバー、またはクライアントが生きている
  • スクリプトによって処理されるターゲットが生きている
  • ネットワークが生きている
  • スクリプト実行に必要なモジュールがインストールされている

など。

こうした面倒な環境をすべてクラウドに任せてしまえるのが Azure Automation です。

Azure Automation の概要は以下の動画でどうぞ。

で、Azure Automation には Webhook 機能も実装されています。Webhook とは何かといえば、WEB の API だと思ってください。

普通スクリプトを実行するには、以下のようにスクリプトファイルを PowerShell のコンソールから入力して実行します。

PS C:> ./hogehoge.ps1

Azure Automation だと、スクリプト(正確には Runbook:ランブック と言います)を選択して「実行ボタン」をクリックすれば実行できます。

image

Azure Automation 上の Runbook は、「スケジュール」機能を使用してスケジューリングすることもできます。その他、Windows Server の機能を使用してスクリプトをタスクマネージャーに登録しておいて、時間が来たり何らかのイベントが発生したら実行する、なんてこともできますよね。

で、注目していただきたいのは以下の Webhook  です。

image

登録した Runbook に Webhook を設定することができます。

以下の画面を見てください。Webhook をクリックすると以下のような画面が開き、画面右下にあるような URL が発行されます。

これが Webhook です。

この URL を、なんらかの方法で Post してあげると、ここで作成した Runbook が実行できるんです。超便利じゃないですか?

image

ただし注意も必要です。

URL は以下のような形式です。以下のURLの token= 以降が、Webhook を識別するトークンになっており、これが外部にばれるとエライことになります。

https://s1events.azure-automation.net/webhooks?token=ypOAJiNYTwT%2fPlenxHHedJGdyB7DPkdwdkAHP6wwSNM%3d

なぜエライことになるかというと、誰でも実行できてしまうからです。

上記 URL を Post するのに便利なのは、Chrome の Advanced REST Client です。Edge の拡張機能にも REST Client があるとよいのですが、まだ提供されていないようで。。。誰か作ってください。

image

以下のように、「POST」を選択して URL を入力したら Send すれば URL を POST することができます。その結果、Webhook に関連付けられた Runbook が実行できます。

image

 

ではここで、Webhook 発行までの簡単な手順を。

  1. Azure Portal http://portal.azure.com/ の左側のメニューから「参照」をクリック
  2. Azure Automation アカウントをクリック
    image
  3. 「追加」をクリックして Automation アカウントを新規に作成
    image
  4. 作成された Automation アカウントをクリック
    image
  5. Runbook をクリック
    image
  6. 「Runbook の追加」をクリック
    image
  7. 「新しい Runbook を作成します」をクリック
    image
  8. Runbook の名前を入力し、Runbookのタイプを選択。タイプはワークフローがお勧めではあるのですが、ひとまず Webhook には関係ないのでここでは普通の PowerShell を選択しました。最後に「作成」をクリックしてください。
    image
  9. 作成すると以下のように編集画面が表示されます。今回は簡単に、Get-Date で日付を取得する Runbook にしましょう。
    image
    ちなみに、Ger-Date をローカルで実行すると以下のような出力結果が得られます。
    image
  10. 「保存」して「発行」します
    image
  11. 発行が完了したら「Webhool」をクリック
    image
  12. 「新しいWebhookの作成」をクリックして、Webhook の名前を指定します。有効期限は規定では1年が設定されています。必要最小限の期限にしましょう。
    ここで、必ずURLをコピーしておきます!これを忘れると、このURLは二度と取得することができません!!! ま、その場合は再作成すればよいだけの話なのですが。
    image
  13. URL をコピーしたら 「OK」
    image
  14. 最後に「作成」
    image

以上で Webhook の作成完了です。

URL を Chrome の Advanced REST Client にペーストして実行してみましょう。

image

以下のように「Accepted」が戻されたら成功です。

image

Runbook の「ジョブ」をクリックして、実行結果を確認してみましょう。

image

ジョブはすでに完了しているようです。タイミングによっては、ジョブの実行準備中の場合もあります。

image

完了したジョブをクリックしてみると、以下のように正常に終了したことがわかります。

image

「出力」をクリックすれば、以下のようにGet-Date の結果として日付が出力されたことがわかります。

image

どうでしょう?結構面白そうな機能ですよね。

例えばある開発案件があって、開発者が Windows Azure 特有の機能の作りこみが苦手だったとしたら、Webhook の出番です。

あなたが PowerShell で Runbook を作り、Azure Automation に載せて Webhook を準備するだけです。開発者は、用意された Runbook をPostすれば、目的の処理の出来上がり!ってわけです。

で、つい最近 OMS から Webhook の呼び出しがサポートされました。

Introducing WebHook support for OMS Alerts
https://blogs.technet.microsoft.com/msoms/2016/03/30/introducing-webhook-support-for-oms-alerts/

OMS とは Operations Management Suite のことです。

OMS を使用すると、Azure や AWS などの IaaS 上の仮想マシン、さらにはオンプレミスの Hyper-V や VNWare 上の仮想マシンを監視することができます。簡易的な System Center 的な位置づけの製品で、今後どんどん機能が拡張されて System Center Operations Manager を凌駕する可能性もあります(現時点では全然追いついていませんけどね)。

上記の Blog でも紹介されていますが、OMS で Webhook がサポートされると「監視」と「アクション」を簡単に結び付けることができるようになります。

例えば、AWS 上の仮想マシン上で特定のイベントIDを持つエラーログが発生したら、Azure Automation に登録した PowerShell スクリプトを実行してリカバリーするとか。。。アイデアは無限大!

クラウドを介するので連携性もばっちりです。

ただ、Webhook の URL の管理だけはきちんと行ってください。

お勧めは Azure KeyVault です。

KeyVault が気になる方は、以下のPPTをご覧ください。

image

Comments (0)

Skip to main content