Amazon Event Bridge + AWS Lambda で、定期的に Power Automate の Webhook を呼び出して Teams チャンネルに投稿する

Yossy
2024-10-25
2024-10-29

Amazon Event Bridge + AWS Lambda で、定期的に Power Automate の Webhook を呼び出して Teams チャンネルに投稿する

前回に引き続き、Webhook を利用した Teams チャンネルへの投稿についてです。

今回は、処理を AWS Lambda (Python) で書いて、処理結果を Power Automate の Webhook 経由で Teams に投稿するという形にしたいと思いました。

加えて、定期的に実行したいということで、Amazon Event Bridge を利用したいと思います。

すべての手順を書くと、凄く膨大になるので、参考にしたURLを照会しながら、ポイントとなった箇所について記載したいと思います。

(1) コード書いて、Lambda に登録

登録する Lambda 関数は、こちらの方のコードを参考にしました。

Microsoft TeamsのIncoming Webhookが廃止になるので、Workflows(Power Automate)で通知する方法を調べた

https://blog.devplatform.techmatrix.jp/blog/teams_workflows_notification/

ただ、L
ambda で動かすには、いくつかの追加の作業が必要です。

a.作業フォルダに、以下のようにファイルとフォルダを作成します。

/packages <フォルダ>

/lambda_function.py

b.lambda_function.py を記述

import os
import sys
import json
sys.path.append(os.path.join(os.path.dirname(__file__), './packages'))
import requests

def lambda_handler(event, context):
    webhook_url = '★Webhook URL★'

    message = {
    "attachments": [
        {
        "contentType": "application/vnd.microsoft.card.adaptive",
        "content": {
            "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
            "type": "AdaptiveCard",
            "version": "1.2",
            "body": [
            {
                "type": "TextBlock",
                "text": "通知テストです"
                "wrap": True,
                "markdown": True
            }
            ]
        }
        }
    ]
    }
   response = requests.post(
        url=webhook_url,
        data=json.dumps(message),
        headers={'Content-Type': 'application/json'}
    )
import sys

b.参照元のサイトのコードを書き変えた部分

AWS Lambda では、初期状態では、requests が利用できなので、これを利用できるようにする必要があります。

具体的な作業は、こちらの記事を参考にさせていただきました。


>【AWS】AWS Lambdaで外部モジュール(ライブラリ)を含むPythonをzipデブロイする方法

> https://qiita.com/takuma-1234/items/3f23af1994acfb1c0d00

ざっくり対応した内容を書くと、作業フォルダ内で、

$pip install --target ./packages requests

を実行して、requests ライブラリをダウンロードします。packages フォルダ内に、必要なファイルがダウンロードされたと思いますので、これを AWS  Lambda で利用できるように、コード先頭部分を書きました。

import os
import sys
import json
sys.path.append(os.path.join(os.path.dirname(__file__), './packages'))
import requests

加えて、AWS lambda から呼び出せるように、 

def lambda_handler(event, context):

という名前の関数として記述しています。

c.AWS Lambda にアップロード

以下を対象に zip に圧縮して、AWS Lambda に登録します。

/packages <フォルダ>

/lambda_function.py

 

こんな感じに配置されたら成功です。

 

img20241017b

※lambda_function.py が、ルードになるように ZIP を作成してください。
※本当は、Lambda のレイヤーで管理するとかした方がいいのかも?

(2) Event Bridge を登録


定期実行させる仕組みについては、Aamzon Event Bridge のスケジュール機能で、画面の指示に従って、実行サイクル、関数を指定するだけでした。
cron と同じ書き方でサイクルを指定できたので、細かい動きを制御できそうでした。

img20241016

上記で、定期的に実行されるようになるので、あとは、AWS Lambda の Python のコードを拡張していくことで、色々、面白い使い方できるんじゃないでしょうか?