AWS Lambda + LINE API で自動通知システム構築

AWS

今年の始めくらいにはなりますが、Line Notify の提供が終了されるとのおしらせがありました。それで、Lambda でLine nofity を使っていたので、今回はLine Message API に変更してみるブログになります。 設定方法についても少し変わったみたいなので、設定方法も含めて今回は書いていこうと思います。

Line notify 終了のお知らせについて

LINE Notify

今回の環境

コードに関してはGitHub で管理しています。今回はcost explorer での料金をLambda を使って通知するという内容になります。通知内容を変更する場合は、コードの変更が必要になります。

GitHub - kentaindeed/cost-notification-lambda: cost をLine 通知するようのlambda の管理場所です
cost をLine 通知するようのlambda の管理場所です. Contribute to kentaindeed/cost-notification-lambda development by creating an account ...

設定手順

最初に事前準備として、Line アカウントを作成する必要があります。Line business アカウントから作成するとMessage API の欄が出てきますので、各自探してみてください。

今回Lambda からLine に通知するにあたって、以下の情報が必要になります。

  • Group ID (個人的にグループラインにしたかったので)
  • Line Token

まずはGroup ID を取得するところから始めていきます。

グループID 取得方法について

ラインで自分の作成したアカウントをグループに招待したものと思って進めていきます。グループID はアカウントのコンソール画面などでは見つけることはできないので、GAS などのWebhook を通して取得する必要があるようです。なので、GAS 触っていきます。

適当にスプレッドシートを作成

ほんとに何でもいいです。

google app script に移動

Apps Script にいきます。

下記のスクリプトを貼り付けます

function getGroupId(e) {
  var events = JSON.parse(e.postData.contents).events;
  events.forEach(function(event) {
    if (event.type === 'message' && event.source.type === 'group') {
      var groupId = event.source.groupId;

      // スプレッドシートに記録
      var sheet = SpreadsheetApp.openById('<spread sheet ID>').getActiveSheet();
      sheet.appendRow([new Date(), groupId]);
    }
  });
  return ContentService.createTextOutput(JSON.stringify({ 'content': 'post received' }))
    .setMimeType(ContentService.MimeType.JSON);
}

新しいデプロイ

ウェブアプリとしてデプロイします

ウェブアプリのURL をLine のwebhook に登録 > Line でメッセージを送信

Line developer のMessage API のページにWebhook URL があるので、ウェブアプリのURL をコピペします。セキュリティ上のせれないですが、本当はもっとURLは長いです。

Verifyというのがあるのですが、ここではエラーが発生する可能性はありますが、Line の方でテスト送信をしてみて、問題なければ下記のエラーは無視で問題ないです。302 でリダイレクトされているようですね。

ラインで通知後、spreadsheet にgroup ID が送信されていることを確認してください。後々使用します。B 欄にあるのが、Group ID です。(セキュリティ上塗りつぶししてます)

Line のAccess Token もwebhook を設定したページと同じところで、取得できたので下までスクロールして発行してみてください。ここまでできたら、次はLambda 側の設定です。

Lambda の設定

GitHub にも手順は載せていますが、ここでも書いていきます。まずは、今回のpython に必要なlib をインストールして、Lambda layer に入れてきます。

pip install -r requirements.txt

mkdir -p layer/python

pip install -r requirements.txt -t layer/python/

cd layer
zip -r ../lambda-layer.zip .
cd ..

ライブラリーをインストールできたら、Lambda Layer にデプロイしていきます。

aws lambda publish-layer-version \
    --layer-name cost-notify-dependencies \
    --description "Dependencies for cost notification Lambda" \
    --zip-file fileb://lambda-layer.zip \
    --compatible-runtimes python3.10 \
    --region ap-northeast-1

次にLambda 関数を作成してください。

aws lambda create-function \
    --function-name cost-notify-lambda \
    --runtime python3.10 \
    --role arn:aws:iam::YOUR-ACCOUNT-ID:role/lambda-execution-role \
    --handler cost-notfiy.lambda_handler \
    --zip-file fileb://lambda-function.zip \
    --description "AWS cost notification Lambda function" \
    --timeout 60 \
    --memory-size 128 \
    --region ap-northeast-1

そして、layer をあてていきます。

aws lambda update-function-configuration \
    --function-name cost-notify-lambda \
    --layers arn:aws:lambda:ap-northeast-1:YOUR-ACCOUNT-ID:layer:cost-notify-dependencies:1 \
    --region ap-northeast-1

最後に環境変数の設定をします。各自で値をセットしてください。

ここまでできたら、後はlambda のテスト機能を使ってテストします。

問題なくLine に通知されれば、オッケーです!

まとめ

Line Message API に変更になったとしても、やっていること自体はそこまで変わらないです。lambda で通知をしてみたい人などに参考になれば幸いです。

参考サイト

Line Message API 公式ドキュメント:

LINE Developers
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、...

\ 最新情報をチェック /

コメント

PAGE TOP
タイトルとURLをコピーしました