Serverless Framework ist ein Rahmen zum Konfigurieren von Anwendungen mit FaaS (Function as a Service), DB und Speicher in der Cloud. Es ist eine Arbeit. Neben AWS werden auch GCP und Azure unterstützt. Informationen zur Installationsmethode finden Sie in diesem Artikel .
Erstellen Sie einen LINE-Bot mit LINE-Entwicklern . Klicken Sie nach dem Anmelden unten auf dem Bildschirm auf Erstellen.
Anschließend wird der Bildschirm zur Eingabe des Anbieternamens angezeigt. Geben Sie also den gewünschten Namen ein.
Sie haben jetzt einen Anbieter erstellt. Erstellen Sie als Nächstes einen Kanal (LINE Bot). Dieses Mal erstellen wir einen LINE-Bot, der zurückgibt. Wählen Sie daher die Messaging-API aus.
Ein Bildschirm zur Eingabe des LINE Bot-Symbols und des Namens wird angezeigt. Geben Sie ihn ein.
Damit ist die Erstellung von LINE Bot abgeschlossen.
Das System, das wir dieses Mal erstellen, scheint die Lambda-Funktion auf dem Webhook ausgeführt zu haben, wenn der Benutzer eine Nachricht an den LINE-Bot sendet. Der von Rot umgebene Bereich wird von Serverless Framework implementiert.
Verwenden Sie AWS-CLI, um AWS-Informationen auf Ihrem PC festzulegen. Siehe diesen Artikel
Let's Serverless Wechseln Sie nach der Installation des Serverless Framework auf Ihrem PC in Ihr Arbeitsverzeichnis im Terminal und führen Sie den folgenden Befehl aus. Die Option --template gibt die von Lambda verwendete Programmiersprache an, und die Option --path gibt den Projektnamen und den Projektspeicherort an. Bitte entsprechend ändern.
$ serverless create --template aws-python3 --path line-bot
Wenn Sie den Befehl ausführen, wird ein Projekt mit der folgenden Verzeichnisstruktur erstellt.
line-bot
├ .gitignore
├ handler.py
└ serverless.yml
Schreiben Sie serverless.yml wie folgt neu.
serverless.yml
service: line-bot
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
region: ap-northeast-1 #Geben Sie die Region Tokio an
#Lambda-Funktionseinstellungen
functions:
callback:
handler: handler.callback
#API-Gateway-Einstellungen
events:
- http:
path: callback
method: post
Damit sind die API-Gateway- und Lambda-Einstellungen abgeschlossen. Es ist zu einfach ...
Implementieren Sie als Nächstes die Funktion, die Lambda ausführt.
Da es sich um Python handelt, erstellen Sie zunächst eine virtuelle Umgebung. Ich erstelle eine virtuelle Umgebung mit venv, aber ich denke, es gibt Leute, die sie mit conda oder virtualenv erstellen. Bitte ändern Sie dies entsprechend.
$ python3 -m venv line-bot
Dadurch wird ein Verzeichnis namens Line-Bot erstellt.
line-bot
├ line-bot/ <--Verzeichnis der virtuellen Umgebung
├ .gitignore
├ handler.py
└ serverless.yml
Einmal generiert, aktivieren Sie es mit dem folgenden Befehl.
$ source line-bot/bin/activate
Eine Bibliothek namens line-bot-sdk wird verwendet, um LINE Bot zu betreiben.
$ pip3 install line-bot-sdk
Nachdem Sie fertig sind, schreiben wir den Code.
handler.py
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, ImageMessage
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot import (
LineBotApi, WebhookHandler
)
import os
access_token = os.environ['LINE_CHANNEL_ACCESS_TOKEN'] //Wird aus Lambda-Umgebungsvariablen erhalten
secret_key = os.environ['LINE_CHANNEL_SECRET'] //Wird aus Lambda-Umgebungsvariablen erhalten
line_bot_api = LineBotApi(access_token)
handler = WebhookHandler(secret_key)
//Von LINE Bot-Webhooks ausgeführte Funktionen
def callback(event, context):
try:
signature = event["headers"]["x-line-signature"]
event_body = event["body"]
handler.handle(event_body, signature)
except InvalidSignatureError as e:
logger.error(e)
return {"statusCode": 403, "body": "Invalid signature. Please check your channel access token/channel secret."}
except Exception as e:
logger.error(e)
return {"statusCode": 500, "body": "exception error"}
return {"statusCode": 200, "body": "request OK"}
//Funktion zum Zurückgeben
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text)
)
Damit ist die Implementierung der Lambda-Funktion abgeschlossen.
Druckt eine Liste der von Lambdas Python verwendeten Bibliotheken. Führen Sie den folgenden Befehl im aktivierten Zustand aus.
$ pip3 freeze > requirements.txt
Wenn Sie die in der Datei require.txt aufgeführte Bibliothek bereitstellen, fügen Sie das Plugin zum Serverless Framework hinzu, damit Lambda es installiert.
$ npm install --save serverless-python-requirements
Die Bibliothek, die Sie lokal verwenden, ist jetzt in Lambda verfügbar.
Lassen Sie uns an dieser Stelle einmal bereitstellen Sie können mit dem folgenden Befehl bereitstellen. sls ist eine Abkürzung für serverless.
$ sls deploy
Gehen wir danach zum AWS-Konsolenbildschirm und sehen Lambda in der Region Tokio. Dann können Sie sehen, dass es tatsächlich bereitgestellt wird.
Um die implementierte Lambda-Funktion ausführen zu können, benötigen Sie das Zugriffstoken und den geheimen Schlüssel von LINE Bot. Sehen Sie sich diese also auf dem Konsolenbildschirm von LINE Developers an.
Das Zugriffstoken befindet sich unten in den Messaging-API-Einstellungen.
Der geheime Schlüssel befindet sich am Ende der Kanaleinstellungen.
Stellen Sie den oben angegebenen Wert in der Lambda-Umgebungsvariablen ein. Am unteren Rand dieses Bildschirms können Sie Umgebungsvariablen festlegen. Speichern Sie diese also auf diese Weise.
Schlüssel | Wert |
---|---|
LINE_CHANNEL_ACCESS_TOKEN | ✖️✖️✖️✖️✖️✖️ |
LINE_CHANNEL_SECRET | ✖️✖️✖️✖️✖️✖️ |
Sie können die von API Gateway ausgegebene URL überprüfen, indem Sie auf Folgendes klicken. Schauen wir uns das an.
Geben Sie die API-Gateway-URL im Webhook auf dem Einstellungsbildschirm der LINE Bot Messaging-API ein. Klicken Sie nach der Eingabe auf die Schaltfläche zur Bestätigung. Wenn der Erfolgsbildschirm angezeigt wird, ist er abgeschlossen. Ich denke, dass der QR-Code von LINE Bot oben angezeigt wird. Wenn Sie also einen Freund von dort hinzufügen, können Sie mit Umu-return Bot spielen.
Wenn Sie auf die obige Überprüfung klicken und ein Antwortfehler angezeigt wird, liegt meines Erachtens ein Fehler in der Lambda-Funktion vor, also aus der folgenden Überwachung
Wenn Sie auf dieses "CloudWatch-Protokoll anzeigen" klicken, wird das Protokoll der Lambda-Funktion angezeigt. Sehen Sie es sich also an und debuggen Sie es.