はじめに
今回はAWSのサービスの1つである、LambdaでAPIを作って実行したときにTeamsへ通知がくるようにします。
開発環境
- OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
- Visual Studio Code 1.73.1
- Python 3.9
実際にAPIを作ります!
TeamsでWebhookを使ってURLを作成
作成したURL用いることでTeamsに情報を送信できるようになります。
公式に載っているやり方でURLを作成します。
- 通知を出すチャネルから「・・・(その他のオプション)」をクリック
- 「コネクタ」を選択したらWebhookを検索し、追加をする
- 「構成」を選択
- 名前を入力後、「作成」を行う
- 作成したURLはコピーして保存をする
先ほどWebhookで作成したURLをPythonから叩いてみましょう!
Teamsにメッセージを送る際のタイトルと入力されたメッセージをdata
に格納します。そしてdata
をJSON形式でPOSTします。
import requests
import json
url = "https://XXX/XXX"
data = {
"text": "aaa",
"title":"test"
}
li = json.dumps(data)
responce = requests.post(url, li)
print(responce.json())
これを実行するとTeamsに通知が来ます。
Lambda関数の作成
この通知する機能を外部から叩くためにLambda関数を作成します。
GETメソッドでクエリパラメータのkey1の中身をTeamsに送るようにコードを編集します。
import json
import requests
def lambda_handler(event, context):
url = "https://XXX/XXX" #コピーしたURLをここに貼り付ける
data = {
"title": "test",
"text": event["queryStringParameters"]["key1"] #value1がテキストでくるようにする
}
data_json = json.dumps(data)
response = requests.post(url, data_json)
return {
"statusCode": 200,
"body": json.dumps({
"result": "Success"
})
}
リクエストが成功したらstatusCode
を200で返し、JSONデータで
{
"result": "Success"
}
を返します。
実行
コードをDeployして、テストイベントのJSONデータを次のようにしてTestを押して実行します。
{
"queryStringParameters": {
"key1": "value1"
}
}
タイトル「test」で、メッセージには先ほど入力したvalue1が送られてきました!
Lambdaの関数URLを発行する方法
Lambda関数の設定から関数URLを発行することでPythonからたたけるようになります。
import requests
url ="https://XXX.lambda-url.ap-northeast-1.on.aws/?key1=aaa"
response = requests.get(url)
print(response.json())
API Gatewayを用いる方法
今度はAPI GatwayでLambdaで作成したAPIと結びつけます。
API Gatewayを起動したら、「APIを作成」をクリックします。
APIタイプを選択できますが、今回はREST APIを選択し、「構築」をします。
プロトコル選択では「REST」を選択し「新しいAPI」を作成します。
そしてAPI名を入力後、「APIの作成」をクリックします。
次に「アクション」から「リソッドの作成」を選択し、
このような画面になるので、リソース名(今回の場合は『notification』)を入力して「リソースの作成」をクリックします。
リソースを作成後、再び「アクション」から今度は「メソッドの作成」を選択し、「GET」を選びます。
統合タイプには「Lambda関数」を選択し、「Lambdaプロキシ統合の使用」にチェックを入れます。
最後に「Lambda関数」の欄には先ほどLambdaで作成したAPIの名前を入力し、「保存」をします。
APIのデプロイされるステージは「新しいステージ」とし、ステージ名を今回は「api」と入力しこのままデプロイします。
PythonからAPIを叩いてみる
import requests
url ="https://XXX/XXX/XXX/api/notification?key1=aaa" #API Gatewayで作ったURLを張り付ける
response = requests.get(url)
print(response.json())
GETメソッドを用いてコードを書きます。貼り付けたURLにはクエリを入力。
最後にコマンドプロンプトで実行します。
今度はテキストにaaaと書かれた通知が届きました!
まとめ
- LambdaでTeamsにメッセージを送るAPIを作成した
- Webhookで通知を受け取れるようURLを作成した