2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS関連の自分のブログ振り返りAdvent Calendar 2022

Day 2

AWS Lambda Function URLs を利用したLINEとの構築ハンズオン

Posted at

はじめに

今年4月6日ごろに発表されましたAWS Lambda 関数 URL: Lambda 関数用の組み込み HTTPS エンドポイントを利用して、LINEとの構築をハンズオンしました。

どういったもの?

Lambdaのサービスの組み込み機能として、HTTPSエンドポイント(URL)を介してLambda関数を簡単に呼び出せるようになりました。

以前まではAPI Gatewayなどを介してLambda関数を呼び出していたので、その手間が省けますね。

構築図

従来のAPIGatewayを利用するのではなく、直接LINEからLambdaを叩く構成です

挙動

①LINEにLambdaのURLをWebhookとして設定、LINEのメッセージを送る
②LINEメッセージでLambda起動、Lambdaで設定している文言をLINEに返す

ハンズオン

①Lambda設定

①-1 関数を作成する

下記3点を入力及び選択し、それ以外はデフォルトです

・関数名
・ランタイム(Python3.9利用)
・詳細設定の「関数URLを有効化」にチェックして、認証タイプ「NONE」


認証タイプはテスト構築のため「NONE」にしていますが、Lambdaへのエンドポイント(URL)が流出すると誰でも叩ける状態になるので取り扱いに注意が必要です(既にこちらのLambdaは削除されています)

①-2 Lambdaが構築出来ているか確認する

画面右下辺りに「関数URL」があるので、クリックする

新しい画面が開いて下記文言が表示されたら、Lambdaにてエンドポイントが作成されている状態です

※この時点でLambda Function URLsの機能が利用できているという状態なので、あとは好きにLambdaを書き散らして、ご自身のWebhookライフを送ってもらって大丈夫です。

①-3 既存コードからLINEと連携するためのコードに書き換えしてデプロイする

下記今回の利用しているコード

line-url
import json
import os
import urllib.request
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
#環境変数
LINE_CHANNEL_ACCESS_TOKEN   = os.environ['LINE_CHANNEL_ACCESS_TOKEN']

REQUEST_URL = 'https://api.line.me/v2/bot/message/reply'
REQUEST_METHOD = 'POST'
REQUEST_HEADERS = {
    'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN,
    'Content-Type': 'application/json'
}
#返信メッセージ
REQUEST_MESSAGE = [
    {
        'type': 'text',
        'text': 'これがAWS Lambda Function URLsの力なのかっっ!'
    }
]

def lambda_handler(event, context):
    logger.info(event)
    params = {
        'replyToken': json.loads(event['body'])['events'][0]['replyToken'],
        'messages': REQUEST_MESSAGE
    }
    request = urllib.request.Request(
        REQUEST_URL, 
        json.dumps(params).encode('utf-8'), 
        method=REQUEST_METHOD, 
        headers=REQUEST_HEADERS
        )
    response = urllib.request.urlopen(request, timeout=10)
    return 0

後続のLINE設定後環境変数を設定するので、ページは開いたままで後続の設定を行なっていきます

②LINE設定

②-1 LINE Developersでプロバイダーの登録

AWS Lambdaを利用したLINEbotハンズオン 1.LINE Developersでプロバイダーの登録にある、1.1~1.6までの手順を行いLINE プロバイダーを登録する

②-2 Messaging API設定の「Webhook設定」及び「Webhookの利用」にチェックする

Messaging API設定タブの『Webhook設定』に、Lambdaの関数URLを入力して設定をする

URLの入力後、「Webhook URL」の下にある項目の「Webhookの利用」にチェックを入れる

②-3 Messaging API設定のチャンネルアクセストークン(長期)を発行する

②-2同様にMessaging API設定タブのチャンネルアクセストークン(長期)を発行してCOPYしておく

③Lambda設定

③-1 Lambdaの環境変数に、チャンネルアクセストークン(長期)を入力する

①で作成したLambdaの設定タブより「環境変数」を押下して下記の値を入力
キー:LINE_CHANNEL_ACCESS_TOKEN
   値:【LINEのチャンネルアクセストークン】

挙動確認

1 作成したLINEの友達登録

AWS Lambdaを利用したLINEbotハンズオン 1.LINE Developersでプロバイダーの登録にある、5.3~6までの手順で作成したLINE の友達登録を行う

2 実際の挙動画面


※時間を空けるとColdStartの影響か立ち上がりに時間がかかりました。

まとめ

・とてもお手軽で20分もかからずLINEとの構築をすることが出来ました。

・ただし認証がIAM認証と、一応CORS(あくまでオプション)なので、こういったLINE構築においては役に立つものではない気がしています。あくまで閉じた中でのLambdaを利用する際のものかと触った感じでは思ってます(あくまで30分くらい触った個人の所感です。)

・10日ぶりに起動させようとした際、ColdStartの影響で3〜5分くらい待った気がします。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?