1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EventBridge+Lambda+S3でデートプラン通知システムを作成してみた

1
Posted at

皆様お久しぶりです!ぎらくさです!

GW中に彼女の誕生日がありまして
その際に作成したデートプラン通知システムの構成を
備忘録としてqiitaに残したいと思います。

まず、最初に要件ですが
要件としては主に2つです。


:one: これから行く場所の情報を予定時間の30分前に通知したい。

:two: 自分に通知がくるのではなく、彼女のスマホに通知がくるようにしたい。


以上の要件に対して
今回作成した通知システムの概要は下記になります。


:one: 彼女のuserid取得のため受信用Lambda作成

:two: LambdaからLINEに通知させるようLINE連携

:three: EventBridgeの発火対象として送信用Lambdaを作成

:four: デート先のお店情報などを載せたhtmlファイルを作成(AIに頼んで後から微調整)

:five: S3バケット内にhtmlファイルをアップロードし、静的ウェブサイトホスティングを有効

:six: EventBridgeスケジュールを利用して予定の30分前にLambdaが発火するよう設定


大まかにはこのような形で実装しました!

URLとテキストをEventBridge側のJSONで指定して
LambdaでLINEに通知させる流れになります。

需要があるかはわかりませんが
下記にある程度詳しく掲載しますので
よかったらみていってください!

① 彼女のuserid取得のため受信用Lambda作成

送信用Lambdaの環境変数に
USER_IDとLINE_TOKENを設定するのですが
今回の場合2つ欲しいものがあります。


:one: LINEのチャネルアクセストークン (LINE_TOKEN)
:two: 彼女のLINEのuserid (USER_ID)


以上の2つです。


そして今回作成する受信用Lambdaは
適切に設定したあと、彼女側のLINEからメッセージを送信すると
CloudWatchのlambdaログにuseridが通知されるのでそのために作成します。

まずは受信用Lambdaを作成します。
(わたくしコード書けないのでAIに丸投げです!)

1.コンソールにログインしてLambdaと検索し、Lambdaをクリックします。
スクリーンショット 2026-05-09 224546.png

2.関数を作成を押します。
image.png

3.関数名を適当に決めます!ランタイムはPython3.14にしました。
image.png

4.その他はなにも弄らず、関数を作成を押します。
スクリーンショット 2026-05-09 224707.png

5.AIに作成してと頼んだコードをコードソースに丸々貼り付けます。
※元々あったコードは全て消して貼り付けてください。

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': 'ok'
    }

スクリーンショット 2026-05-09 230137.png

6.Deployを押します。
image.png

Lambdaのページを開いたまま②に進みます。

② LambdaからLINEに通知させるようLINE連携

1.LINE Developers (https://developers.line.biz/ja/)
のコンソールにログインを押します。(LINEIDでログインするのが無難です。)
スクリーンショット 2026-05-09 230332.png

2.プロバイダーの横にある作成を押します。
スクリーンショット 2026-05-09 231049.png

3.適当な名前を入れて作成を押します。
image.png

4.Messaging APIを押します。
image.png

5.LINE公式アカウントを作成するを押します。
image.png

6.アカウント名とメールアドレスを入力して、確認を押します。
スクリーンショット 2026-05-09 231608.png
image.png

7.完了を押して、アカウントを作成します。
image.png

8.作成したら、LINE Official Account Managerへを押します。
image.png

9.規約が色々でてきたら同意して、左タブにある友だち追加ガイドを押します。
image.png

10.友達追加QRコードを作成を押すと下記画面とQRが出るのでLINEで読んで追加します。
image.png

11.閉じたら右上の設定を押します。
image.png

12.左タブから MessagingAPIを押します。
image.png

13.MessagingAPIを利用するを押して、プロバイダ選択したら同意するを押します。
image.png
image.png
image.png

14.プライバシーポリシーと利用規約を登録は無視してOKを押します。

15.以下の内容でMessaging APIを利用しますか?にOKを押します。
image.png

16.WebhookURLが画面に表示されたら、開いておいたLambdaの画面に戻ります。
image.png

17.設定から関数URLを作成を押します。
image.png

18.NONEにして、保存をクリックします。

image.png
image.png

19.出てきた関数URLをコピーして、WebhookURLに貼り付けて保存します。
image.png
image.png

20.チャットを押します。
image.png

21.下記画面が出てきたら応答設定に移動を押します。
image.png

22.応答設定のWebhookをONにします。
image.png

23.彼女のLINEからメッセージを適当に送信する。

24.AWS上でcloudwatchを開く。
image.png

25.左タブのログからログ管理をクリック。
image.png

26.ロググループから先ほど作成したlambdaをクリック。
image.png

27.ログの中から"source":{"type":"user","userId":"***********"}を探し出す。

28.userid":"***********"の中身だけコピーして忘れないようにしておく。

29.LINE Developers (https://developers.line.biz/ja/)
に戻り、コンソールを開く。(ログインしたままならコンソールボタンが出る。)
image.png

30.プロバイダーから作成したプロバイダ名(tekitounanamae)をクリック。
image.png

31.チャネル設定からチャネルをクリック。(適当な名前)
image.png

32.MessagingAPI設定をクリック。
image.png

33.チャネルアクセストークンの発行をクリック。
image.png

34.チャネルアクセストークンをコピーして忘れないようにしておく。

③ EventBridgeの発火対象として送信用Lambdaを作成

長くなりましたがこれで

:one: LINEのチャネルアクセストークン (LINE_TOKEN)
:two: 彼女のLINEのuserid (USER_ID)

以上が出揃いました。
ですので、送信用Lambdaを別で作成します!

1.コンソールにログインしてLambdaと検索し、Lambdaをクリックします。
スクリーンショット 2026-05-09 224546.png

2.関数を作成を押します。
image.png

3.関数名を適当に決めます!ランタイムはPython3.14にしました。
image.png

4.その他はなにも弄らず、関数を作成を押します。
スクリーンショット 2026-05-09 224707.png

5.5.AIに作成してと頼んだコードをコードソースに丸々貼り付けます。
※元々あったコードは全て消して貼り付けてください。

import os
import json
import urllib.request

def lambda_handler(event, context):

    message = event.get("message", "")
    url = event.get("url", "")

    text = f"{message}\n{url}"

    api_url = "https://api.line.me/v2/bot/message/push"

    payload = {
        "to": os.environ["USER_ID"],
        "messages": [
            {"type": "text", "text": text}
        ]
    }

    req = urllib.request.Request(
        api_url,
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Authorization": f"Bearer {os.environ['LINE_TOKEN']}",
            "Content-Type": "application/json"
        }
    )

    urllib.request.urlopen(req)

    return {"statusCode": 200}

スクリーンショット 2026-05-09 230137.png

6.設定から環境変数をクリックして、編集をクリック。
image.png
image.png

7.環境変数の追加を2回押して2つ追加する。
image.png

8.useridのコピーとチャネルアクセストークンのコピーを下図のように記載して保存。
image.png

9.保存したらコードをクリックして、Deployを押します。
image.png

③ デート先のお店情報などを載せたhtmlファイルを作成

こちらに関しましては皆様にお任せしますが
今回はメモ帳にHelloWorldと入力して、test.htmlというファイルを作成します。

④ S3バケット内にhtmlファイルをアップロードし
静的ウェブサイトホスティングを有効

1.コンソールにログインしてS3と検索し、S3をクリック。
image.png

2.バケットを作成をクリック。
image.png

3.バケット名を設定し、その他はデフォルトのままでバケットを作成をクリック。
image.png
image.png

4.アップロードを押して、ファイルを追加をクリック。
image.png
image.png

5.ファイルとフォルダにhtmlが追加されたことを確認し、アップロードをクリック。
image.png
image.png

6.アップロードに成功しましたと出たら、閉じるをクリック。
image.png

7.アップロードしたhtmlをクリック。
image.png

8.Amazonリソースネーム(ARN)をコピー。
image.png

9.オブジェクトURLも後で使うので忘れないようにどこかにコピー
image.png

10.さっきのバケットをクリック。(testtekitounanamae)
image.png

11.アクセス許可をクリックし、ブロックパブリックアクセスの編集をクリック。
image.png
image.png

12.パブリックアクセスをすべてブロックのチェックを外し、変更の保存をクリック。
image.png
image.png

13.確認を入力して、確認をクリック。
image.png

14.バケットポリシーから編集をクリック。

image.png

15.ポリシーに下記をコピペして、Resourceの中身だけ変更し、変更の保存をクリック。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "ここだけさっきコピーしたARNに変えてね"
    }
  ]
}

image.png

image.png

⑤ EventBridgeスケジュールを利用して
予定の30分前にLambdaが発火するよう設定

いよいよここまで来ましたね..!
あとはEventBridgeの設定するだけです!

1.EventBridgeと検索してEventBridgeをクリック。
image.png

2.EventBridgeスケジュールにチェックをつけて、スケジュールを作成をクリック。
image.png

3.スケジュール名、日付と時刻を設定し、フレックスタイムをオフにし、次へをクリック。
image.png

4.ターゲットの詳細からAWSLambdaにチェックをつける。
image.png

5.先ほど作成した、送信用Lambdaを選択する。
image.png

6.ペイロードに下記をコピーして、urlの中身をオブジェクトURLに変えて次へをクリック。

{
  "message": "てすと",
  "url": "④の9でコピーしたオブジェクトURLを入れます。"
}

image.png
image.png

7.スケジュール完了後のアクションをDELETEに変えて次へをクリック。

image.png
image.png

8.スケジュールを作成をクリック。
image.png

しばらくするとスケジュールが作成されて
設定した時刻に”てすと”というメッセージと共にURLが届きます。
それを開いて中身が表示されていれば成功です!

終わりに


実際に動きましたでしょうか!
全く触ったことない方でも分かりやすいように
書いたつもりなので是非やってみてくださいね:laughing:

現在はまだオンプレ案件に参画しておりまして
クラウドは未経験のままです:cry:
ただ、資格としては4月にAWSSOAを追加で取得しましたので
実際に触りたいと思って今回のシステムを構築しました:muscle:
次はこの仕組みを利用して天気予報通知でも
作成してみたいと思います:thunder_cloud_rain::closed_umbrella:

またなにかアウトプットとして残した際は
温かい目で見守ってくださると嬉しいです。

ここまで見ていただき、ありがとうございました!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?