間が空いてしまいましたがその2です。。
1/23(木)・24(金) 、インテックス大阪にて開催された Microsoft の大型カンファレンス「Ignite The Tour Osaka」で登壇した「インシデントに対応する」セッションのフォロー記事の続きです。
★前回:Ignite The Tour Osaka: OPS20「インシデントに対応する」フォローアップ~内容・デモ解説編その1~ - himanago
前回の内容を受けてのデモ
Tailwind Traders の課題がいくつかありましたが、
これに対して、まず「インシデントトラッキング」を行うための「ユニークなチャネル」を作ることで解決しようというデモです。
内容と登場技術
コミュニケーションに関する課題に対処するために、エンジニアがインシデントに関する議論を行うユニークなチャネルを作成する必要があります。
これはそのインシデントにのみ「固有の」チャネルであることが必要で、インシデント対応に集中したり、あとから分析したりするためにも普段使用しているチャネルとは分けるべきです。
そして今回は
- Azure Boards(Azure DevOps)への issue 作成&オンコールなエンジニアのアサイン
- Microsoft Teams へそのインシデントに関するチャネルの作成
- オンコールなエンジニアへの連絡
を Azure Logic Apps で自動化します。
デモ
ざざっと画面キャプチャで流れを見ていきます。
Logic Apps フロー
ライブで作った部分も含め、見ていきます。
全体像
このような流れです。
Azure Monitor から連携することを想定していて、インシデント情報は JSON を HTTP で受け取るようにつくります(デモでは Postman で JSON を投げました)。
Azure Boards への issue 作成
まずは Azure DevOps へ issue を作ります。タイトルに JSON で飛んできたインシデント内容を入れておきます。Logic Apps では JSON の内容を項目(動的なコンテンツ)としてマウスクリックのみで扱えるのでとても楽ですね。
説明(内容)はひとまず空欄にしておきます。
Teams へのチャネル作成
インシデント対応チーム用の、このインシデント専用のチャネルを作ります。
ひとつ前のステップで作った issue の番号(ID)とランダムな数値をチャネル名に入れているのがポイントです。
Logic Apps ではステップ間の連動もこのように簡単にできます。
issue に Teams チャネルへのリンクを張る
チャネルのリンク(ひとつ前のステップで得られるチャネル ID を使って作る)を issue の説明に載せます。
オンコールなエンジニアを見つける
オンコールなエンジニアの情報は、今回は Azure Table Storage に入っているのでそこから取得します。
ちなみに Storage Explorer で見ると、このようになっています。
Table Storage から得た情報は JSON 形式なので、パースします。
パースした情報を使い、メールアドレスを issue の担当者として設定します。
インシデントチャネルに情報を投稿
最後のステップとして、インシデントの内容および issue へのリンクを含んだメッセージを作成したチャネルに投稿します。
今回は Adaptive Cards という形式でメッセージを送ってみます(オリジナルのセッションでは HTML 形式。どちらも「フローボット」という連携方法で送ります)。
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "Image", "url": "https://globaleventcdn.blob.core.windows.net/assets/ops/ops20/screenshots/alert.gif", "size": "Small", "spacing": "None" }, { "type": "TextBlock", "text": "[AlertType]: [SeverityDescription]" }, { "type": "TextBlock", "text": "Issue を見る:" } ], "actions": [ { "type": "Action.OpenUrl", "title": "Incident [ID]", "url": "https://xxxxxxxxx.visualstudio.com/xxxxxxx/_workitems/edit/[ID]/" } ] }
ちなみに Adaptive Cards は VS Code 用の拡張機能もあり、プレビューを見ることもできます(コマンドパレットから「Adaptive Card: Preview」)。
Logic App は以下のようになります。動的なコンテンツをいくつか埋め込みます。
実際の動き
Postman から JSON を飛ばすと、インシデントの「28」issue が作成され、次々に自動で行われていきます。
このあと、Teams でコミュニケーションをとりながらインシデント対応をしていきます。
補足
なお、当日はできませんでしたが、オリジナルではさらにオンコールなエンジニアへの DM も作っています。
さらに以下のようなステップを追加すれば、
このようなメッセージが飛んでくるので、安心ですね。