雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

LINE APIを使って、LINE上からAWSで実行しているBotのON/OFFを制御できるようにした

これはなに?

AWSコンソールを利用せずに、スマートフォンからAWSのリソースを操作したい場面があり、LINE APIを使って、LINE上から操作できるようにしてみました。

今回はテスト環境なので、ユーザーの認証などは行っていません。本番利用する場合は、API GWのセキュリティやユーザーの認証などの考慮が必要となります。

作ったもの

以前のブログで商品情報チェックのBotを作成したのですが、ON/OFFをいちいちAWSコンソールにログインしないとできず、かなり不便だったので、LINE上で実施できるようにしました。
商品情報チェックがWEBスクレイピングで実装しているため、WEBの構成が変わったりした際に誤検知する場合があり、LINEからすぐON/OFFできるようにしたことで、かなり便利になりました。

www.cloudnotes.tech

構成図

構成図は以下のようになります。

f:id:ykoomaru:20220322224715p:plain

商品情報チェックBotは、Event Brigeでスケジュール実行しているので、Event BrigeのON/OFFをLINEで制御します。 特定のキーワードをLINEのトークルームで入力するとAPI Gateway経由でLambdaをキックして、Event Brigeを操作します。

セキュリティには考慮が必要ですが、Lambda上でSDKを実行しているので、Event Brige以外にも様々なAWSリソースを操作することが可能です。

利用イメージ

実際にトークルームで利用したイメージがこちらです。

f:id:ykoomaru:20220322225220p:plain

f:id:ykoomaru:20220322225234p:plain

機能

機能としては以下の3つになります。

  1. 特定のEvent Brigeのステータス取得
  2. 特定のEvent Brigeの有効化/無効化
  3. 使い方の表示

f:id:ykoomaru:20220322232702p:plain

準備

同じ仕組みを実装するには以下の準備が必要になります。

  1. LINE API登録
  2. API Gateway作成
  3. Lambda作成
  4. LambdaとAPI Gatewayとの紐づけ

LINE API登録とAPIGateway、Lambda作成については以前のブログで紹介していますので、こちら参照いただけますと幸いです。
www.cloudnotes.tech

Lambda

Lambdaの処理の流れとソースコードについて記載します。

処理フロー

  1. eventのBodyより、トークルームでの入力内容とreplyトークンを取得
  2. 入力内容によって分岐
    1. [start] Event Brigeの起動 & 実行結果をLINE に返す
    2. [stop] Event Brigeの停止 & 実行結果をLINE に返す
    3. [status] Event Brigeのステータスを取得 & 実行結果をLINE に返す
    4. [上記以外] 利用方法を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はとても便利なので、今後も色々な活用方法を試してみたいと思います。