見出し画像

【AWS】Lambdaを使ってLINEにメッセージを送ってみる【Python】

AWSを使った案件へのアサインをお願いしてるので何か成果物持ってた方がいいな。と思ったので作りました。

今回作成したのは、自分が住んでる地域の天気を毎朝自分のLINEに通知してくれるというもの。

仕組みは天気予報をLINEに通知するLambdaをEventBridgeで決まった時間に実行するというもの。

前編:LINEにLambdaからメッセージを送る
後編:天気予報を取得する関数を作る

今回は前編です。


はじめに

今回はモリユウキさんが投稿された記事を多いに参考にさせていただきました。

併せて今回はChat-GPT(3.5)にコード添削をしてもらいました。

私はプログラムを書いたことが無いので各行の意味やエラーの解説、サンプルコードを変えてこういったことを実現したい時のアドバイスをもらいました。

最後の参考欄にも記載させていただいていますが、
目につきやすいこの場でもお伝えさせていただきます。

LINE Notifyのトークンを取得する


LINE Notifyとは、Webサービス(GitHubとか)と連携することでLINE公式アカウントからメッセージを送ることができるサービスのことです。

取得方法については下記ページについて世界一分かりやすく説明されています。


ワンポイントとしては、STEP6で設定するトークン名が、下記画像の赤枠部分になるので、何に使用するかが明確な場合は分かりやすい名前が良いでしょう。


Lambdaでコードを書く


LINEにメッセージを飛ばす素材を手に入れたら早速コード作成に取り掛かりましょう。

AWS Lambdaでは事前に書いたコードを読み込むこともできますが、
私は環境作りやら何も知らないので今回は平文で書いていきます。

Lambdaのページを開いたら「関数」→「関数を作成」と進みます。

どんな言語で作成し、どんなロールで実行するかを設定できますが、今回は以下の設定で作成しました。

オプション:一から作成
関数名:任意
ランタイム:Python3.9
アーキテクチャ:x86_64


デフォルトの実行ロールの変更、詳細設定は何も変えてません。


「関数を作成」をクリックするとプログラミングのページに進みます。

コードタブのソースコードにコードを打ち込んでいきます。


何かイメージ(黒背景にパステルカラーの文字列)と違うぞ?


では、LINEに「Hello World!!」と送ってみましょう。

import json
import urllib.request

# LINE Notify
# アクセストークンは長いのでTOKENと定義します。APIに使うURLも同様です。
TOKEN = 'STEP7でコピーしたトークン'
api_url = 'https://notify-api.line.me/api/notify'

# ''の間に送りたいメッセージを入力
contents = 'Hello World!!'

request_headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Bearer' + ' ' + TOKEN
}
params = {'message': contents}


def lambda_handler(event, context):
    data = urllib.parse.urlencode(params).encode('ascii')
    req = urllib.request.Request(api_url, headers=request_headers, data=data, method='POST')
    conn = urllib.request.urlopen(req)


利用している環境で異なるのは「TOKEN」に代入するトークンと、送るメッセージです。

importしているモジュールやrequest_headersやlambda_handlerはAWS LambdaからLINEにメッセージを送る際に必要なものだと思ってください。

私もそういうものぐらいの認識で最後まで通しました。

コードが完成したら、「Deploy」後にテストタブからテストを実行できます。

LINEに想定したメッセージ通知が届けば成功です。

失敗時にはLambdaがエラーログをはいてくれます。

前編はここまでです。

後編は自分の中で言語化ができたら投稿します。


参考


この記事が気に入ったらサポートをしてみませんか?