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/
ただ、Lambda で動かすには、いくつかの追加の作業が必要です。
a.作業フォルダに、以下のようにファイルとフォルダを作成します。
/packages <フォルダ>
/lambda_function.py
b.lambda_function.py を記述
import os
import sys
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'}
)
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
こんな感じに配置されたら成功です。
※lambda_function.py が、ルードになるように ZIP を作成してください。
※本当は、Lambda のレイヤーで管理するとかした方がいいのかも?
(2) Event Bridge を登録
定期実行させる仕組みについては、Aamzon Event Bridge のスケジュール機能で、画面の指示に従って、実行サイクル、関数を指定するだけでした。
cron と同じ書き方でサイクルを指定できたので、細かい動きを制御できそうでした。
上記で、定期的に実行されるようになるので、あとは、AWS Lambda の Python のコードを拡張していくことで、色々、面白い使い方できるんじゃないでしょうか?