AWS LambdaでLINE通知を受信する方法
はじめまして!サーバー運用業務を担当している赤穂です。サーバーで実行されるプログラムでアラートが発生した際にいち早く知りたい場合などがあります。
今回はAWS Lambda(Pythonスクリプト)関数とLINE NotifyというAPIを使ってLINE通知を行う方法について紹介します。
■あわせて読まれている資料:
クラウドのコンサルティングから導入までをワンストップで支援!
→クラウドテクノロジーサービス
対応事例やソフトウェアサービス一覧を掲載!
→ソフトウェアテクノロジーサービス
目次[非表示]
はじめに
今回は、AWSとLINEを使って環境を構築していきます。それぞれアカウント作成については割愛させて頂きます。
構成図は下図のとおり、サーバーからAWS Lambdaを呼び出し、Lambda関数からLINE Notifyを呼び出し、スマホのLINEアプリに通知が届く仕組みとなります。
今回の記事では、サーバーの構築部分を割愛して、WebページからLambda関数を呼び出し、LINE通知を行いたいと思います。
LINEとLINE Notifyの連携
LINE Notifyとは、LINEと外部のWebサービスやアプリを連携し、ユーザーがカスタマイズされた好みの情報を受け取ることができる機能です。
LINEのアカウントを持っている人なら誰でも使うことができるサービスとして、「LINE」が提供しています。
LINE Notifyの利用は完全無料で、1時間に最大1000件まで送信することができます。
早速ですが、LINE Notifyのアクセストークンの発行を行っていきたいと思います。
以下のリンクからLINE notifyのホームページに遷移します。
LINE Notify
右上のログインボタンからMYページへログインしてください。
ログインを行った後、本人認証が必要となります。
ログインが完了したら、下記ページへ移動後、トークンを発行するボタンを押してください。
https://notify-bot.line.me/my/
トークン名を指定して、通知を送信するトークルームは「1:1でLINE Notifyから通知を受け取る」を指定し「発行する」押します。(今回は例のため1:1を指定していますが、グループのトークルームも指定することが可能です。)
発行されたトークンは忘れず残しておきましょう。
LINE NotifyとAWS Lambdaの連携
2022年に公開された新機能である「AWS Lambda Function URLs」を使って関数を作成していきたいと思います。
Lambdaのトップページから「関数の作成」を押下します。
下記を選択したら、詳細設定を開きます。関数名は任意に決めてください。
関数 URL を有効化はONにして、認証タイプはNONEを指定し、関数の作成を押下します。
関数が作成されます。
関数URLにアクセスして「"Hello from Lambda!"」と表示されれば関数が正常に動作していることを確認できます。
PythonでLINE通知を行うためには、requestsモジュールが必要となるためLayerを作成してアップロードします。WindowsのPCにてPython環境が必要となりますが、こちらの準備方法については割愛させて頂きます。Pythonのバージョンは作成した関数のバージョンと合わせてください。
任意のフォルダで下記コマンドを実行してlayer.zipを作成します。
レイヤーの追加を行います。ダッシュボードよりレイヤーを選択します。
レイヤーの作成を選択します。
名前は任意の名称記載し、作成したlayer.zipをアップロードします。
互換性のあるアーキテクチャとランタイムは関数作成時の設定と合わせて、作成を選択します。
正常に作成されると下記の画面になります。
関数にレイヤーを追加します。関数定義からLayersを選択します。
レイヤーの追加を選択します。
カスタムレイヤーを選択し、先ほどアップロードした「request」とバージョン「1」を選択し追加を行います。
レイヤーが追加されました。
LINE通知のプログラムは下記になります。黒塗りのところはLINE Notifyで作成したアクセストークンになります。
部分ごとに解説していきたいと思います。
▼コード
▼解説
Python の Lambda 関数ハンドラーになります。後ほどWebページから渡されるメッセージ内容などはevent変数から取得することが可能です。
▼コード
▼解説
上記の部分はLINE Notifyに送信するための定義情報になります。
▼コード
▼解説
後ほどWebページから、この関数を呼び出す際にXMLHttpRequestを用いて呼び出すことを想定しており、JSON形式メッセージを送った場合bodyの中に変数名が格納されるため、このような取得方法しています。詳細はWebページから呼び出す際に説明していきます。
取得したsend_textをmessageキーに格納しています。
▼コード
▼解説
LINE Notifyに送信(post)を行っています。
▼コード
▼解説
この関数のレスポンス内容を定義している部分になります。Headersに記載している部分については、WebページからXMLHttpRequestで呼び出しを行う際にクロスサイトスクリプティングになるのを回避するために追加しています。
この関数を初期ソースと置き換えます。ソースをコピーしたら「Deploy」で反映させます。
関数URLにアクセスして「"Hello from Lambda!"」が表示され、LINE通知が届きます。
Webページから関数の呼び出し
前項でも記載しましたが、JavaScriptのXMLHttpRequestを用いてLambdaの関数にメッセージを渡し、そのメッセージがLINEで通知されるようにします。下記がソースになります。黒塗り部分は関数URLになります。
Webページとしては、送信するテキストと送信ボタンのみになります。テキストの内容がLINEで通知されます。
lambdaSend関数の処理内容としては、一般的なXMLHttpRequestのPOST送信で、作成したLambdaの関数にテキストメッセージをJSON形式に変換して送信しています。
JavaScriptでJSON作成時は単純な形式となりますが、XMLHttpRequestでLambda関数に送信した場合は、送信したJSON以外のヘッダー情報なども含まれる点に注意が必要です。
▼送信時
▼受信時
送信して通知が届くことが確認できました。
まとめ
今回はできるだけシンプルな構成でLINE通知が届くところまで説明させて頂きましたが、日常的に馴染みのあるアプリLINEだからこそ少しの工夫でより汎用的な使い方をしていけるのではないかと思います。
この記事をお読みになった方の一助になりましたら幸いです。
引用元
https://rooter.jp/web-crawling/line-notify_with_python/
https://tech.nri-net.com/entry/lambda_url
https://sebenkyo.com/2021/05/21/post-1979/