AWS lambda ne peut pas charger des bibliothèques externes telles que pandas et numpy dans l'état initial. Il y a deux façons de le charger, la première est de rassembler les bibliothèques installées et les fichiers exécutables dans un fichier zip et de le télécharger sur lambda, et la seconde est de le charger en tant que couche avec lambda. Cette dernière méthode est recommandée, mais dans cet article, nous avons résumé ces méthodes sous forme de conseils avec l'aspect de la gestion du code.
MacOS Catalina docker installé AWS CLI installé
Puisqu'il n'est pas bon pour la gestion de code de développer lambda sur le navigateur, nous allons permettre de développer localement. En d'autres termes, cela prend la forme de travailler localement pour pouvoir être géré par gitHub et de télécharger les modifications de code vers lambda à tout moment. J'ai donc créé un environnement de déploiement en utilisant docker-lambda. (Veuillez cloner si vous souhaitez l'utiliser) https://github.com/shoda888/local2lambda
Tout d'abord, nous avons besoin d'une image docker, nous allons donc la créer. (Première fois seulement)
$ docker build -t shoda888/local2pylambda .
Après cela, donnez le nom de la fonction lambda créée à l'avance à la variable funcname de deploy.sh
et exécutez ce qui suit pour télécharger automatiquement.
$ sh deploy.sh
Réécrivez lambda_function.py
et deploy.sh à nouveau pour voir si cela a changé.
Donnez simplement à requirements.txt un nom de bibliothèque et deploy.sh (pandas, numpy, requêtes, etc.). Un grand nombre de répertoires de bibliothèque sera créé dans le répertoire de travail. Pandas est trop lourd et le téléchargement prend environ 5 minutes. Lorsque je le vérifie sur lambda, le téléchargement est réussi, mais un avertissement apparaît.
Le package de déploiement de la fonction Lambda "*******" est trop volumineux pour permettre l'édition de code en ligne. Cependant, vous pouvez appeler la fonction.
Il semble que la fonction puisse toujours être appelée.
C'est une bonne idée de laisser requirements.txt vide, car il est fastidieux de compresser et de télécharger la bibliothèque à chaque fois. Je pense que c'est pratique et réutilisable si la bibliothèque est regroupée en une couche. (Cependant, la gestion de la version de la bibliothèque peut être problématique à l'avenir) Voyons comment organiser la bibliothèque en une couche.
Dans le cas d'une bibliothèque Python pure, par exemple, une bibliothèque composée à 100% de Python comme indiqué dans l'image peut facilement créer un fichier zip pour la couche sur votre Mac sans préparer l'environnement Amazon Linux ou ubuntu avec EC2.
Si vous voulez installer ask_sdk_core comme exemple, c'est tout. (Exemple de python3.7)
$ mkdir -p build/python/lib/python3.7/site-packages
$ pip3 install ask_sdk_core -t build/python/lib/python3.7/site-packages/
$ cd build
$ zip -r ask_sdk.zip .
Ajoutez le fichier ask_sdk.zip généré à la couche et adaptez la couche dans le lambda pour charger la bibliothèque.
Tels que numpy et pandas. Il semble préférable de créer un environnement Amazon Linux avec EC2 et de le compresser. (J'avais l'impression d'avoir créé Layer avec ubuntu avant, mais est-ce que ubuntu peut être utilisé?)
Beaucoup de gens l'ont déjà fait, donc les articles d'autres personnes seront très utiles. [Ajouter des pandas en tant que couche Lambda] (https://qiita.com/thimi0412/items/4c725ec2b26aef59e5bd) Bibliothèque commune avec AWS Lambda Layers
Ce qui suit est YouTube, mais Layer est créé à l'aide d'ubuntu. (Facile à comprendre) [AWS Lambda Layers for Pandas library] (https://youtu.be/zrrH9nbSPhQ)
Après avoir rendu possible le développement de Lambda tout en gérant le code localement, la méthode de chargement de la bibliothèque externe est résumée en Astuces.
Recommended Posts