AKS + KEDA とTeamsで作るCloud Nativeなアプリケーション
はじめに
Azure Kubernetes Services (AKS) 上にコンテナアプリとして構成し、データベースへの格納と後続処理として処理結果をMicrosoft Teamsへ通知するといったものを作りたいと思います。
本記事は初歩的な内容にはなりますが、応用するとCosmosDBを使ったり、Azure IoT Central からのデータをKEDAで連携させて Azure Synapse Analytics へ渡して分析させたりと幅広い Cloud Native なアプリケーションを組むことができます。
構成
- Webアプリ
- Azure Database for MySQL [マネージドサービス]
- Webアプリで受付したデータの格納用。
- Queueストレージ [マネージドサービス]
- WebアプリからTeamsへ通知したいメッセージの格納用。
- KEDA
- Teams
- QueueトリガーFunctionからのメッセージを受信してチャネルへ投稿
事前準備(Teams)
incoming webhook をインストールしてTeamsでWebhookを受信できるようにします。
まずTeamsから「…」からアプリを検索で「Incoming Webhook」を選択します。
チームに追加をクリックして通知したいチームを選択します。
通知する対象のチャネルを選択します。
必要事項とアイコンをアップロード(通知されるときに表示されるアイコンになります)して、生成されたURLをコピーしておきます。
これは後ほどアプリ側から通知するのに使います。
Queue Trigger
KEDA で実装するFunctionの構成です。(Webアプリは好みの言語で作ってください)
Queue trigger Functionを作るには以下を参照してください。
作った後に、コードを追記してTeamsへ送信できるようにします。
まずWebhookを扱えるようにrequestをインストールします。
npm install request
func newで作った index.js を以下のように変更します。
module.exports = async function (context, myQueueItem) { var request = require('request'); request.post({ url: process.env["TeamsWebhookURL"], body: JSON.stringify({"text": myQueueItem}) }) };
local.settings.json には "TeamsWebhookURL" として事前準備で作成したTeamsのWebhook URLを追記します。
以下コマンドを投入してローカルテストします。
func start
待ち状態になったらAzure PortalからQueueを追加して動作確認します。
以下のように投稿されればOKです。
動作に問題なければ前述のリンクのようにfunc kubernetes deploy --nameコマンドを投入してAKSへデプロイしてください。
Webアプリから実行して問題なければKEDAでQueue Triggerの実装が完了です。
Teamsへの投稿はアプリケーションのエラー通知など、管理者への通知にも使えたりと、色々と応用が可能ですので組み合わせを変えたりして実装してみてください。