これはなに?
AWSコンソールを利用せずに、スマートフォンからAWSのリソースを操作したい場面があり、LINE APIを使って、LINE上から操作できるようにしてみました。
今回はテスト環境なので、ユーザーの認証などは行っていません。本番利用する場合は、API GWのセキュリティやユーザーの認証などの考慮が必要となります。
作ったもの
以前のブログで商品情報チェックのBotを作成したのですが、ON/OFFをいちいちAWSコンソールにログインしないとできず、かなり不便だったので、LINE上で実施できるようにしました。
商品情報チェックがWEBスクレイピングで実装しているため、WEBの構成が変わったりした際に誤検知する場合があり、LINEからすぐON/OFFできるようにしたことで、かなり便利になりました。
構成図
構成図は以下のようになります。
商品情報チェックBotは、Event Brigeでスケジュール実行しているので、Event BrigeのON/OFFをLINEで制御します。 特定のキーワードをLINEのトークルームで入力するとAPI Gateway経由でLambdaをキックして、Event Brigeを操作します。
セキュリティには考慮が必要ですが、Lambda上でSDKを実行しているので、Event Brige以外にも様々なAWSリソースを操作することが可能です。
利用イメージ
実際にトークルームで利用したイメージがこちらです。
機能
機能としては以下の3つになります。
- 特定のEvent Brigeのステータス取得
- 特定のEvent Brigeの有効化/無効化
- 使い方の表示
準備
同じ仕組みを実装するには以下の準備が必要になります。
- LINE API登録
- API Gateway作成
- Lambda作成
- LambdaとAPI Gatewayとの紐づけ
LINE API登録とAPIGateway、Lambda作成については以前のブログで紹介していますので、こちら参照いただけますと幸いです。
www.cloudnotes.tech
Lambda
Lambdaの処理の流れとソースコードについて記載します。
処理フロー
- eventのBodyより、トークルームでの入力内容とreplyトークンを取得
- 入力内容によって分岐
- [start] Event Brigeの起動 & 実行結果をLINE に返す
- [stop] Event Brigeの停止 & 実行結果をLINE に返す
- [status] Event Brigeのステータスを取得 & 実行結果をLINE に返す
- [上記以外] 利用方法をLINEに返す
LINEにメッセージを送る際にreply_messageメソッドを利用するのですが、その際eventで取得したreplyトークンを引数で渡す必要があります。
def reply_message(msg,reply_token): line_bot_api.reply_message( reply_token, TextSendMessage(text=msg))
LINE APIがPOSTで送ってくるBodyは以下のような内容になります。ユーザーIDも取得できるので、複数に分けてメッセージを返信する場合は、このユーザーIDを利用してpush_messageメソッドを利用すれば実現できますね。(replyトークンは一度しか利用できないみたいです)
{"destination":"XXXXXXXXXXXXXXXX","events":[{"type":"message","message":{"type":"text","id":"XXXXXXXXXXXXXXXX","text":"status"},"timestamp":1647935919213,"source":{"type":"user","userId":"XXXXXXXXXXXXXXXX"},"replyToken":"XXXXXXXXXXXXXXXX","mode":"active"}]}
ソースコード
gista0d2509e7f79985370453fc0f0749994
最後に
LINE APIの無料枠が1000回になっているので、回数制限には気を付けなければなりませんが、インターフェースとしてLINEはとても便利なので、今後も色々な活用方法を試してみたいと思います。