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 をしている場合は、その部分の完了通知は別途考えないといけないですねー。
コメント