Microsoft Power Automateを使用してAWS LambdaからMicrosoft Teamsのチャネルに投稿してみた

目次

はじめに

本記事では、Power AutomateのWebhook経由で、Lambda関数の処理結果をTeamsのチャネルに投稿する方法を紹介します。具体例として、AWSのコスト情報を取得するケースを用いて説明します。

システム構成の概要

今回構築するシステムは、Teamsの特定のチャネルに対して定期的にAWSのコスト情報を投稿します。(ここでは自動投稿システムと呼ぶことにします)

自動投稿システムでは、以下のサービス・機能を使用します。

  1. Amazon EventBridge: 定期的にLambda関数を実行します。
  2. AWS Lambda: AWSのコスト情報を取得します。その後、コスト情報を含めたHTTP POSTリクエストをWebhook URLへ送信します。
  3. Power Automate (Workflow): Webhookへのリクエストを受信後、コスト情報を含めた投稿用メッセージを作成し、Teamsへ送信します。
  4. Microsoft Teams: メッセージを指定されたチャネルへ投稿します。

設定手順

Lambda関数を作成する

AWS Lambda関数を作成し、コード欄にソースコードを記述します。以下のソースコード(*)を貼り付けて、デプロイをクリックしてください。本ソースコードは、Pythonで記述しています。また、Budget APIを利用して、今月の予算額や現在の利用額、今月末の利用予測額を取得します。

(*)ソースコード

Power Automateのフローを作成する

Lambda関数から送信されたデータをTeamsに投稿するために、Power Automateでフローを作成します。

作成するフローの全体の流れは以下になります。

それぞれのトリガーおよびアクションの設定内容を説明します。

フローのトリガー/アクションを設定する

Teams Webhook要求を受信したとき
  • フローをトリガーできるユーザー: 誰でもを選択します。
  • HTTP URL: フローを保存完了後に自動的にURLが生成されます。本URLをLambda関数の環境変数(TEAMS_WEBHOOK_URL)として使用します。
JSONの解析
  • Content: 本アクションの前ステップであるTeams Webhook要求を受信したとき本文データを追加します。
  • Schema: 以下のJSON形式のスキーマを貼り付けます。propertiesに記述されているbudgetなどは、Lambda関数が送信するPOSTリクエストに含まれるデータ群です。
チャットやチャネルにカードを投稿する
  • 投稿者: フローボットを選択します。
  • 投稿先: チャネルを選択します。
  • チーム: 投稿先のTeamsを選択します。
  • チャネル: 投稿先のチャネルを選択します。
  • アダプティブカード: 以下のJSON形式のアダプティブカードを貼り付けます。アダプティブカードを編集することで、Teamsチャネルの投稿フォーマットを設定できます。

Power AutomateのWebhook URLを確認してLambda関数に設定する

フローを保存すると、Webhook用のHTTP URLが生成されます。

トリガーTeams Webhook要求を受信したときのHTTP URL欄の値をコピーしてLambda関数の環境変数TEAMS_WEBHOOK_URLとして設定します。

Lambda関数のテスト機能を使用して動作確認する

関数の[コード]タブに移動してテストを実行し、一連の動作に問題がないことを確認します。以下のようにTeamsチャネルにメッセージが投稿されていれば処理は成功です。

Lambda関数にトリガーを追加する

Lambda関数を自動的に実行し、AWS利用料をTeamsチャットに投稿したい場合は、Lambda関数が実行されるトリガーを追加します。ここでは、Amazon EventBridgeを使用して、定期的にLambda関数が実行されるよう設定します。

関数の概要画面の[トリガーを追加]をクリックします。

以下のようにEventBridgeを選択してルールを設定します。例えば、スケジュール式にcron(0 0 ? * MON-FRI *)と入力すると、月曜日から金曜日の00:00(UTC時刻)にLambda関数が実行されるようになります。

この記事を書いた人

目次