Serverless Framework est un cadre permettant de configurer des applications avec FaaS (Function as a Service), DB et stockage dans le cloud. C'est un travail. En plus d'AWS, il prend également en charge GCP et Azure. Veuillez consulter cet article pour la méthode d'installation.
-Comme la commande est censée être Mac, je pense que la méthode de paramétrage est différente pour Windows. ・ Vous ne pouvez pas faire cela à moins que vous n'ayez un compte AWS. -Les paramètres de Lambda et API Gateway sont trop simples, donc ceux qui sont nouveaux dans ce domaine peuvent ne pas le comprendre beaucoup.
Créez un robot LINE avec LINE Dvelopers . Une fois connecté, cliquez sur Créer au bas de l'écran.
Ensuite, l'écran de saisie du nom du fournisseur s'affiche, alors saisissez le nom que vous aimez.
Vous venez de créer un fournisseur. Ensuite, créez un canal (LINE Bot). Cette fois, nous allons créer un bot LINE à retourner, alors sélectionnez l'API de messagerie.
Un écran pour saisir l'icône et le nom du Bot LINE apparaîtra, alors saisissez-le.
Ceci termine la création de LINE Bot.
Le système que nous créons cette fois donne l'impression que la fonction Lambda est exécutée sur le webhook lorsque l'utilisateur envoie un message au bot LINE. La zone entourée de rouge est implémentée par Serverless Framework.
Utilisez AWS-CLI pour définir les informations AWS sur votre PC. Consultez cet article
Let's Serverless Après avoir installé Serverless Framework sur votre PC, accédez à votre répertoire de travail dans le terminal et exécutez la commande suivante. L'option --template spécifie le langage de programmation utilisé par Lambda, et l'option --path spécifie le nom et l'emplacement du projet. Veuillez changer en conséquence.
$ serverless create --template aws-python3 --path line-bot
Lorsque vous exécutez la commande, un projet est créé avec la structure de répertoires suivante.
line-bot
├ .gitignore
├ handler.py
└ serverless.yml
Réécrivez serverless.yml comme suit.
serverless.yml
service: line-bot
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
region: ap-northeast-1 #Spécifiez la région de Tokyo
#Paramètres de la fonction Lambda
functions:
callback:
handler: handler.callback
#Paramètres de la passerelle API
events:
- http:
path: callback
method: post
Ceci termine les paramètres API Gateway et Lambda. C'est trop facile ...
Ensuite, implémentez la fonction exécutée par Lambda.
Puisqu'il s'agit de Python, créez d'abord un environnement virtuel. Je crée un environnement virtuel avec venv, mais je pense qu'il y a des gens qui le créent avec conda ou virtualenv, veuillez donc changer cela si nécessaire.
$ python3 -m venv line-bot
Cela créera un répertoire appelé line-bot.
line-bot
├ line-bot/ <--Répertoire d'environnement virtuel
├ .gitignore
├ handler.py
└ serverless.yml
Une fois généré, activez-le avec la commande suivante.
$ source line-bot/bin/activate
Une bibliothèque appelée line-bot-sdk est utilisée pour faire fonctionner LINE Bot.
$ pip3 install line-bot-sdk
Maintenant que vous êtes prêt, écrivons le 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'] //Obtenu à partir des variables d'environnement Lambda
secret_key = os.environ['LINE_CHANNEL_SECRET'] //Obtenu à partir des variables d'environnement Lambda
line_bot_api = LineBotApi(access_token)
handler = WebhookHandler(secret_key)
//Fonctions exécutées par les webhooks LINE Bot
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"}
//Fonction à retourner
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text)
)
Ceci termine l'implémentation de la fonction Lambda.
Imprime une liste des bibliothèques utilisées par Python de Lambda. Exécutez la commande suivante à l'état activé.
$ pip3 freeze > requirements.txt
Lorsque vous déployez la bibliothèque répertoriée dans requirements.txt, ajoutez le plug-in à Serverless Framework pour que Lambda l'installe.
$ npm install --save serverless-python-requirements
La bibliothèque que vous utilisez localement est désormais disponible dans Lambda.
À ce stade, déployons une fois Vous pouvez déployer avec la commande suivante. sls est une abréviation de serverless.
$ sls deploy
Après cela, passons à l'écran de la console AWS et voyons Lambda dans la région de Tokyo. Ensuite, vous pouvez voir qu'il est réellement déployé.
Pour exécuter la fonction Lambda implémentée, vous aurez besoin du jeton d'accès et de la clé secrète de LINE Bot, alors regardez-les sur l'écran de la console de LINE Developers.
Le jeton d'accès se trouve au bas des paramètres de l'API de messagerie.
La clé secrète se trouve au bas des préférences du canal.
Définissez la valeur vue ci-dessus dans la variable d'environnement Lambda. Il y a un endroit où vous pouvez définir des variables d'environnement au bas de cet écran, donc enregistrez-le de cette manière.
Clé | valeur |
---|---|
LINE_CHANNEL_ACCESS_TOKEN | ✖️✖️✖️✖️✖️✖️ |
LINE_CHANNEL_SECRET | ✖️✖️✖️✖️✖️✖️ |
Vous pouvez vérifier l'URL émise par API Gateway en cliquant sur ce qui suit, alors jetons un coup d'œil.
Entrez l'URL de la passerelle API dans le webhook sur l'écran des paramètres de l'API LINE Bot Messaging. Après la saisie, cliquez sur le bouton de vérification et lorsque l'écran de réussite s'affiche, c'est terminé. Je pense que le code QR de LINE Bot est affiché en haut, donc si vous ajoutez un ami à partir de là, vous pouvez jouer avec Umu-return Bot.
Si vous cliquez sur la vérification ci-dessus et qu'une erreur de réponse s'affiche, je pense qu'il y a une erreur dans la fonction Lambda, donc à partir de la surveillance suivante
Si vous cliquez sur "Afficher le journal CloudWatch", vous pouvez voir le journal de la fonction Lambda, veuillez donc le consulter et le déboguer.
Recommended Posts