EventGrid で Azure のリソースの作成完了をキャッチする

Azure

Microsoft Azure で、ARM テンプレートを使って環境を構築することってよくあることだと思います。

で、「何かをトリガーに自動作成して、構築が終わったことを完了通知したい」

なんてことをしたいってことがあると思います。

 

多分、皆さんが最初に思いつくのは、Automation だと思うのですが、

Automation だと、

  • WebHookの有効期間に制限がある。
  • ARM をたたいたところで、Automation のタスクは終わりで、Azure のリソースは非同期処理で構築される

という問題があり、構築が完了したことを受け取ることが難しいです。

やろうと思えば、ポーリングしてチェックするっていう手はあると思います。

 

ということで、今回は、EventGrid を使って、Azure の環境構築の完了をトラップしてみたいと思います。

 

 

EventGrid とは

Event Grid をざっくり一言で言ってしまうと、Microsoft Azure のリソースに対するイベントをフックして、イベントハンドラーやWeb Hook にルーティングをしてくれる機能です。

まさに、Event を Grid する感じっすね。

 

概要的な機能については、以下のドキュメントに詳しくのっています。

■Azure Event Grid の概要
https://docs.microsoft.com/ja-jp/azure/event-grid/overview

 

試したこと

今回はサンプルとして、Logic Apps を使って、EventGrid でリソース作成をキャッチした後に、Slackに情報を飛ばすってのをやってみました。

Logic Apps のフローはこんな感じ

ちなみに、Event Grid でサブスクリプションに接続するためには、サブスクリプションのテナントに所属するユーザでないといけません。

ですので、この Logic Apps を作成する前には、テナントにユーザを追加しています。

Directory Role は、Userです。

 

少しだけ補足です。

Resource Type は、こんな感じのが選択できます。
今回は、Microsoft.Resources.Subscriptions を選びました。

 

Event Type Item も、こんな感じのが選択できます。
今回は、Microsoft.Resources.ResourceWriteSuccess を選びました。

 

SLACK の部分は、Event をトリガーにPostしてるだけです。

 

ここで、ポータルを使って VM を1台作成してみました。

そうすると、こんな感じでSlack に通知が上がってきます。

抜粋したログを載せますが、作成されたリソースがすべて通知されました。
(なんもフィルターしてないのでw)

 

Microsoft.Resources.ResourceWriteSuccess
[ID]
/subscriptions/(サブスクリプションID)/resourcegroups/testvm20180510/providers/Microsoft.Compute/virtualMachines/testvm20180510

2018-05-10T08:26:18.2426543Z
Microsoft.Resources.ResourceWriteSuccess
[ID]
/subscriptions/(サブスクリプションID)/resourcegroups/testvm20180510/deployments/Microsoft.WindowsServer2016Datacenter-20180510170537

 

まとめ

リソースができたことがわかるという部分は実現したのですが、完了したことをユーザに通知する部分は、ちょっとコードを使って実装してまとめてあげた方がいいかもしれません。

今回はデモ的にやったので、操作しているユーザも1人なので、複数同時ユーザによって構築された場合に混ざった形で情報が来ると思います。

ですので、キーうまく扱って、どの操作によって操作されたのかを区別しなければなりません。

 

あと、IaC をやってConfiguratin をしている場合は、その部分の完了通知は別途考えないといけないですねー。

コメント

タイトルとURLをコピーしました