Je suivais le tutoriel pour créer une application Alexa à l'aide de Python:
J'ai réussi à suivre toutes les étapes et à faire fonctionner l'application. Je souhaite maintenant modifier le code python et utiliser des bibliothèques externes telles que import requests
ou toute autre bibliothèque que j'installe à l'aide de pip. Comment configurer ma fonction lambda pour inclure les packages pip que j'installe localement sur ma machine?
Comme décrit dans le lien de la documentation officielle d'Amazon ici C'est aussi simple que de créer un fichier Zip de tout le contenu du dossier après avoir installé les packages requis dans votre dossier où vous avez votre python code lambda.
Comme Vineeth l'a souligné plus haut dans son commentaire, la toute première étape pour passer d'un éditeur de code intégré à une approche de téléchargement de fichier Zip consiste à modifier le nom de votre gestionnaire de fonctions lambda dans les paramètres de configuration afin d'inclure le python nom de fichier qui contient le gestionnaire lambda.
lambda_handler => {votre-nom-fichier-script-python} .lambda_handler .
D'autres solutions telles que python-lambda et lambda-uploader aident à simplifier le processus de téléchargement et, plus important encore, le TEST LOCAL. Celles-ci permettront de gagner beaucoup de temps en développement.
Le documentation officielle est très bon. En un mot, vous devez créer un fichier Zip contenant un répertoire contenant à la fois le code de votre fonction lambda et toutes les bibliothèques externes que vous utilisez au niveau supérieur.
Vous pouvez simuler cela en désactivant votre virtualenv, en copiant toutes vos bibliothèques requises dans le répertoire de travail (qui est toujours dans sys.path
si vous appelez un script sur la ligne de commande) et vérifiez si votre script fonctionne toujours.
Vous voudrez peut-être envisager d’utiliser des frameworks tels que zappa qui gérera l’emballage et le déploiement de la fonction lambda pour vous.
Vous pouvez utiliser cela conjointement avec flask-ask pour avoir plus de facilité à créer des compétences Alexa. Il y a même un tutoriel vidéo à ce sujet (extrait du readme de zappa) ici
En écho à la réponse de @ d3ming, un cadre est un bon moyen d’aller à ce stade. La création manuelle du package de déploiement n'est pas impossible, mais vous devez télécharger le code compilé de vos packages. Si vous compilez ce code sur un système autre que Linux, vous risquez de rencontrer des problèmes de différences entre votre système. et l'environnement déployé de la fonction Lambda sont élevés.
Vous pouvez ensuite contourner ce problème en compilant votre code sur une machine Linux ou un conteneur Docker .. mais entre toute cette complexité, vous pouvez obtenir beaucoup plus en adoptant un framework.
Serverless est bien adopté et supporte les packages personnalisés python. Il s’intègre même avec Docker pour compiler vos dépendances python et les construire package de déploiement pour vous.
Si vous recherchez un tutoriel complet sur ce sujet, J'en ai écrit un pour Python Fonctions Lambda ici.
Pour résoudre ce problème particulier, nous utilisons une bibliothèque appelée juniper . En un mot, tout ce que vous avez à faire est de créer un fichier manifeste très simple ressemblant à ceci:
functions:
# Name the Zip file you want juni to create
router:
# Where are your dependencies located?
requirements: ./src/requirements.txt.
# Your source code.
include:
- ./src/lambda_function.py
A partir de ce fichier manifeste, appelez juni build
créera l'artefact de fichier Zip pour vous. Le fichier comprendra toutes les dépendances que vous spécifiez dans le fichier Requirements.txt.
La commande va créer ce fichier ./dist/router.Zip
. Nous utilisons ce fichier conjointement avec un modèle Sam. Cependant, vous pouvez ensuite utiliser ce fichier Zip et le télécharger sur la console ou via awscli.