【アップデート】AWS Lambda Function URLs を利用したLINEとの構築ハンズオン


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

はじめに

お疲れ様です、第三システム部の稲村です。

今月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と連携するためのコードに書き換えしてデプロイする

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

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分くらい待った気がします。

さいごに

AWS座学で学習→分からないからハンズオン構築→付随する知識を学ぶ→深く知識の定着という、よちよちした学習サイクルを回しながら学んでいきたいと思います。

Last modified: 2022-04-29

Author