Details:
HTTP_RequestのFunctionBoxがあったので、AWSを使ったプッシュ通知を考えてみました。
今回プッシュ通知をするアプリはSlackにしました。
AWS Lambdaの関数URLを使ってFunctionBoxとSlackの連携をします。
[HTTP_Request FunctionBox]↔[AWS Lambda]↔[Slack]
■Slackアプリの作成
AWSからの通知用にSlackのアプリを作成します。(Slackのアカウント作成が必要です)
Slackアカウントでワークスペースとチャンネルを作成したら、
公式のこちらのサイトで通知用のアプリの作成行いIncoming Webhooksを有効します。
https://api.slack.com/messaging/webhooks
アプリ管理ダッシュボードの[Features]-[Incomming Webhooks]を開いて
作成されたWebhook URLをAWSのLambdaに使用します。
■AWS Lambdaの作成
以下のサイトからLambdaの作成を行います。(AWSアカウントの作成が必要です)
https://aws.amazon.com/jp/lambda/
[関数の作成]から、ランタイムをPython 3.12で作成しました。
関数が作成できたら、[設定]の[関数URL]から関数URLを作成します。
関数URLのタイプはNONEにしました。
Lambdaの処理は以下のコードを入力してDeployしています。
slakc_endpointをSlackのWebhook URLに変更します。
-------------------------------------
import json
import urllib3
http = urllib3.PoolManager()
slack_endpoint = "https://hooks.slack.com/services/〇〇〇"
def lambda_handler(event, context):
notify_slack_message("test")
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
def notify_slack_message(message_content):
msg = {
"channel": "#test",
"username": "test",
"text": message_content,
"icon_emoji": ""
}
encoded_msg = json.dumps(msg).encode('utf-8')
res = http.request('POST', slack_endpoint, body=encoded_msg)
-------------------------------------
■フローの作成
証明書のダウンロード
Lambdaの関数URLはHTTPSしかないので証明書が必要です。
- Raspberry PiのブラウザでAWS Lambdaの関数URLにアクセスします
- ブラウザのURL近くにある南京錠のアイコンをクリックして[この接続は保護されています]-[証明書は有効です]を開きます
- 詳細からAmazon ROOT CAを選択してエクスポートをクリックします
- 「Base64エンコード ASCII形式の単一の証明書」として /ect/ConnectedPLCに保存します(証明書名はrootCAにしました)
- /etc/ConnectedPLC/ConnctedPLCconfig/name.iniを開きます
- HttpCACertificateの#を削除して、証明書のファイル名を記載します。(HttpCACertificate=rootCA)
フローを書き込む
※フローは添付しているファイルを参考にしてください。
Mem_Allocのメモリサイズは256byteにしています
HTTP_Requestの第二入力につながるFunctionBoxにAWS Lambdaの関数URLを指定します
HTTP_RequestのプロパティはメソッドがGETでバージョンはTLSです
フローを書き込むと1回だけSlackに通知が来ます。
今回は書き込んだ1回だけの通知にしていますが、
フローの中で何かエラーがあった時をトリガーにして
SNSやアプリへ通知するような使い方ができるのではと思います。
※今回は1回だけ呼び出す程度なので無料利用枠でAWS Lambdaを使用できます。
添付しているフロー以外で繰り返し呼び出すような使い方をすると料金が発生する可能性があるのでご注意ください