DT Blog

クレスコDTのエンジニアが
IT基礎知識から最新トレンドまで、技術ノウハウを発信

AWS LambdaでLINE通知を受信する方法

はじめまして!サーバー運用業務を担当している赤穂です。サーバーで実行されるプログラムでアラートが発生した際にいち早く知りたい場合などがあります。
今回はAWS Lambda(Pythonスクリプト)関数とLINE NotifyというAPIを使ってLINE通知を行う方法について紹介します。


■あわせて読まれている資料:
クラウドのコンサルティングから導入までをワンストップで支援!
クラウドテクノロジーサービス

  クラウドテクノロジー資料ダウンロード|株式会社クレスコ・デジタルテクノロジーズ 変化を続ける次世代情報社会に対応する先進のクラウド環境を提案します。 巧妙かつ高度化の一途をたどるサイバー攻撃や、攻撃後の情報搾取など、脆弱性に伴うリスクは増大しています。 私たちは最新技術と豊富な知見をもとに、安全性の高いセキュアなシステムを提供します。 株式会社クレスコ・デジタルテクノロジーズ


対応事例やソフトウェアサービス一覧を掲載!
ソフトウェアテクノロジーサービス

  ソフトウェアテクノロジー資料ダウンロード|株式会社クレスコ・デジタルテクノロジーズ 最先端のデジタル技術の豊富な知見に基づき最も効果的なソリューションを提供します。 クレスコ・デジタルテクノロジーズは、大手電機メーカー様との提携に基づく製造業のノウハウを背景に、2015年4月よりPLM事業を開始。2015年6月には、PLMパッケージであるAras Innovatorを提供している米国Aras社とシステムインテグレーションパートナー契約を締結し、数多くのAras Innovator案件に対応しています。 株式会社クレスコ・デジタルテクノロジーズ


目次[非表示]

  1. 1.はじめに
  2. 2.LINEとLINE Notifyの連携
  3. 3.LINE NotifyとAWS Lambdaの連携
  4. 4.Webページから関数の呼び出し
  5. 5.まとめ
  6. 6.引用元


はじめに

今回は、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を作成します。

$ mkdir python
$ pip install -t python requests
$ zip -r9 layer.zip python


レイヤーの追加を行います。ダッシュボードよりレイヤーを選択します。


レイヤーの作成を選択します。


名前は任意の名称記載し、作成したlayer.zipをアップロードします。
互換性のあるアーキテクチャとランタイムは関数作成時の設定と合わせて、作成を選択します。


正常に作成されると下記の画面になります。


関数にレイヤーを追加します。関数定義からLayersを選択します。


レイヤーの追加を選択します。


カスタムレイヤーを選択し、先ほどアップロードした「request」とバージョン「1」を選択し追加を行います。


レイヤーが追加されました。


LINE通知のプログラムは下記になります。黒塗りのところはLINE Notifyで作成したアクセストークンになります。

部分ごとに解説していきたいと思います。
 
▼コード

def lambda_handler(event, context): 

▼解説
Python の Lambda 関数ハンドラーになります。後ほどWebページから渡されるメッセージ内容などはevent変数から取得することが可能です。
 
▼コード

# Line Notify
ACCESS_TOKEN = "(トークン)"
HEADERS = {"Authorization": "Bearer %s" % ACCESS_TOKEN}
URL = "https://notify-api.line.me/api/notify" 

▼解説
上記の部分はLINE Notifyに送信するための定義情報になります。

▼コード

#パラメータから取得
    send_text = "empty"
    if 'body' in event:
        mbody = event["body"]
        if 'send_text' in mbody:
            if type(mbody) is str:
                dbody = json.loads(mbody)
                send_text = dbody.values()
            else:
                send_text = mbody['send_text']
data = {'message': send_text} 

▼解説
後ほどWebページから、この関数を呼び出す際にXMLHttpRequestを用いて呼び出すことを想定しており、JSON形式メッセージを送った場合bodyの中に変数名が格納されるため、このような取得方法しています。詳細はWebページから呼び出す際に説明していきます。
取得したsend_textをmessageキーに格納しています。

▼コード

#lineに通知
requests.post(URL, headers=HEADERS, data=data) 

▼解説
LINE Notifyに送信(post)を行っています。

▼コード

return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers' : 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': 'OPTION,POST,GET',
            'Access-Control-Allow-Credentials': 'true'
        },
        'body': json.dumps('Hello from Lambda!') 

▼解説
この関数のレスポンス内容を定義している部分になります。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以外のヘッダー情報なども含まれる点に注意が必要です。

▼送信時

{“send_text”: “test”}; 


▼受信時

{
  "body": {"send_text": "test", ........}
} 


送信して通知が届くことが確認できました。



まとめ

今回はできるだけシンプルな構成で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/

赤穂
赤穂
部署名:プロフェッショナルサービス1部

おすすめ資料はこちら

ソフトウェアテクノロジー

最先端のデジタル技術の豊富な知見に基づき最も効果的なソリューションを提供します。
クレスコ・デジタルテクノロジーズは、大手電機メーカー様との提携に基づく製造業のノウハウを背景に、2015年4月よりPLM事業を開始。2015年6月には、PLMパッケージであるAras Innovatorを提供している米国Aras社とシステムインテグレーションパートナー契約を締結し、数多くのAras Innovator案件に対応しています。

CONTACT

社内システムのお悩みを私たちだけで解決へと導きます

お役立ち資料は
こちらから

不明な点はお気軽に
お問い合わせください