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

目次

はじめに

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

システム構成の概要

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

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

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

設定手順

本章で自動投稿システムの設定手順を説明します。

Lambda関数を作成する

AWS Lambda関数を作成し、適切な処理を記述します。今回は例としてPythonでコードを記述します。また、AWS Budget APIを利用してコスト情報を取得します。

以下の手順に沿ってLambda関数を作成してください。

  1. 関数の作成: AWS管理コンソールにログインし、Lambdaのコンソール画面に移動したら関数を作成します。ランタイムはPythonを選択してください。
  2. ソースコードの貼り付け: 関数の[コード]タブに移動し、本章に記載のソースコード(lambda_function.py)(*)を貼り付けてデプロイします。
  3. 環境変数の追加: AWSのコスト情報を取得し、POSTリクエストをWebhook URLへ送信するために、ソースコード内で以下の環境変数を参照しています。関数の[設定]タブに移動し、環境変数の編集画面で以下の情報を追加してください。
    • AWS_ACCOUNT_ID: AWSアカウントID
    • BUDGET_NAME: [Billing and Cost Management]コンソールで作成した予算の名前
    • TEAMS_WEBHOOK_URL: POSTリクエストの送信先となるWebhook URL(現時点ではWebhook URLが生成されていないため、後述のPower AutomateのWebhook URLを確認してLambda関数に設定するで設定します)
  4. IAMロールの追加: 関数を作成したときにデフォルトの実行ロールが関数に割り当てられますが、AWSのコスト情報を取得するための権限が不足しているため、IAMロールに必要な権限を追加します。ここでは、以下のマネージドロールを追加します。
    • AWSBudgetsReadOnlyAccess
  5. タイムアウトの変更: デフォルトのタイムアウト値は3秒ですが、デフォルトのまま関数を実行するとタイムアウトエラーが発生するはずです。関数の[設定]タブに移動し、一般設定の編集画面でタイムアウト値を変更してください。(目安は5秒)

(*)ソースコード

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関数が実行されるようになります。

この記事を書いた人

目次