[PYTHON] Jusqu'à l'implémentation du bot de chat LINE avec Chalice

supposition

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.

Qu'est-ce que le calice

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.

Jusqu'à l'introduction de Chalice

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.

De la création du projet au déploiement

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

WS000008.JPG

Cliquez ici pour déployer.

chalice deploy

WS000009.JPG

Accédez à l'URL de l'API émise et voyez que {'hello': 'world'} est renvoyé. Voici le nettoyage.

chalice delete

Implémenter le bot de chat LINE

Inscrivez-vous auprès des développeurs LINE

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.

Installez line-bot-sdk

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

Enregistrer les variables d'environnement

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"
      }
    }
  }
}

Modification de app.py

Créer un webhook pour LINE Bot sur AWS Lambda à l'aide de Chalice Je l'ai mentionné ici.

Déployer-Résultat

Déployer. Si vous vérifiez la console, Lambda et la passerelle API sont créées. WS000001.JPG WS000003.JPG

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. WS000004.JPG

Ensuite, parlez au bot et voyez si le retour du perroquet fonctionne. WS000007.JPG

Dépannage jusqu'à la mise en œuvre

Au début, je suis allé tester Lambda parce qu'Aum n'a pas dit oui ou non. WS000000.JPG 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 ... WS000005.JPG 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.

Précautions / questions non résolues

・ 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 ...).

Recommended Posts

Jusqu'à l'implémentation du bot de chat LINE avec Chalice
Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!
Implémentons Yuma dans Python 3
Implémenter le bot de discussion Slack en Python