Je voulais le mettre sur AWS et l'exécuter parce que tout va bien. J'ai déployé le chatbot LINE sur Heroku, donc J'ai décidé de mettre ça pour le moment.
Chalice est une infrastructure d'application conçue par AWS qui active un environnement d'API avec Amazon API Gateway et AWS Lambda pour Python. (Provenant d'un responsable AWS)
En plus de pouvoir créer et déployer des applications à partir de la ligne de commande Il accorde automatiquement la stratégie de rôle IAM à accorder à Lambda, C'était assez pratique, comme payer automatiquement l'API.
Préparation ・ Acquisition d'un compte AWS ・ Installation de l'AWS CLI Si vous installez l'AWS CLI pour la première fois, après l'installation
aws configure
Appuyez sur la commande pour entrer la clé d'accès au compte ou la clé d'accès secrète, Enregistrons la région et le format de sortie. Les informations d'identification sont stockées dans le dossier .aws sous votre répertoire de base. Il n'est pas recommandé d'émettre la clé d'accès de l'utilisateur racine. Créez donc un utilisateur IAM et enregistrez ses informations d'identification.
Calice
pip install chalice
Vous pouvez l'installer avec.
chalice new-project hello-world
La commande générera un fichier de projet. Cliquez ici pour la structure des répertoires.
│ .gitignore
│ app.py
│ requirements.txt
│
└─.chalice
config.json
Modifiez app.py. C'est la valeur par défaut.
app.py
from chalice import Chalice
app = Chalice(app_name='hello-world')
@app.route('/')
def index():
return {'hello': 'world'}
# The view function above will return {"hello": "world"}
# whenever you make an HTTP GET request to '/'.
#
# Here are a few more examples:
#
# @app.route('/hello/{name}')
# def hello_name(name):
# # '/hello/james' -> {"hello": "james"}
# return {'hello': name}
#
# @app.route('/users', methods=['POST'])
# def create_user():
# # This is the JSON body the user sent in their POST request.
# user_as_json = app.current_request.json_body
# # We'll echo the json body back to the user in a 'user' key.
# return {'user': user_as_json}
#
# See the README documentation for more examples.
#
Vous pouvez vérifier l'opération localement avec la commande suivante.
chalice local
Cliquez ici pour déployer.
chalice deploy
Accédez à l'URL de l'API émise et voyez que {'hello': 'world'} est renvoyé. Voici le nettoyage.
chalice delete
Définissez le nom de l'application, etc. de manière appropriée et créez un canal pour renvoyer les perroquets. Activez l'utilisation des webhooks à partir des paramètres de l'API de messagerie et Paramètres de l'API de messagerie ** Jeton d'accès au canal (long terme) **, Notez le ** secret de la chaîne ** dans les préférences de la chaîne.
Localement
pip install line-bot-sdk
D'ACCORD. Supprimez le fichier de format whl de PyPI pour le déploiement sur Lambda. Lorsque vous utilisez une bibliothèque externe avec Lambda, créez un dossier fournisseur dans le dossier avec le nom du projet et stockez-le au format whl. De plus, créez requirements.txt et spécifiez la version à utiliser.
requirements.txt
line-bot-sdk==1.17.0
Ajoutez des variables d'environnement à config.json dans le répertoire .chalice. Enregistrons le secret de canal et le jeton d'accès au canal que nous avons noté précédemment comme suit.
config.json
{
"version": "2.0",
"app_name": "line-bot",
"stages": {
"dev": {
"api_gateway_stage": "api",
"environment_variables": {
"LINE_CHANNEL_SECRET": "Secret de chaîne",
"LINE_CHANNEL_ACCESS_TOKEN": "Jeton d'accès au canal"
}
}
}
}
Créer un webhook pour LINE Bot sur AWS Lambda à l'aide de Chalice Je l'ai mentionné ici.
Déployer.
Si vous vérifiez la console, Lambda et la passerelle API sont créées.
Enregistrez l'URL d'API émise plus / rappel dans le webhook des développeurs LINE. S'il n'y a pas de problème après avoir appuyé sur vérifier, c'est OK.
Ensuite, parlez au bot et voyez si le retour du perroquet fonctionne.
Au début, je suis allé tester Lambda parce qu'Aum n'a pas dit oui ou non.
Un json vide suffit ici pour la fonction de test.
J'ai confirmé l'échec, alors je suis allé voir CloudWatch.
Les journaux d'erreurs sont stockés dans CloudWatch> CloudWatch Logs> Groupes de journaux. Quand j'ouvre le flux de journal de line-bot ...
On dit qu'il n'y a pas de module de ligne-bot.
J'ai vérifié et trouvé que tout allait bien jusqu'à ce que je stocke la bibliothèque chez le fournisseur, mais j'ai oublié de modifier le fichier requirements.txt.
・ J'étais pressé car la console n'a pas fonctionné pendant quelques minutes après le déploiement, mais il semble que l'installation de line-bot-sdk ait pris du temps. Attendons patiemment. -Lorsque je me connecte à api / callback avec un navigateur, cela devient {"message": "Missing Authentication Token"}. Le retour du perroquet lui-même fonctionne, mais ... -Chalice attribue automatiquement la stratégie du rôle IAM attribué à Lambda, mais la stratégie de l'utilisateur IAM qui a la clé d'accès pour accéder à AWS doit être indiquée ici. Même si vous donnez une telle politique, vous n'êtes pas autorisé. J'ai été rejeté par une erreur, et cette fois j'ai fini par frapper la politique d'accès administrateur et la pousser (cela n'a aucun sens de créer un utilisateur IAM ...).