[Lambda] J'ai essayé d'incorporer un module externe de python via S3

Aperçu

Quand j'ai créé un bot de surveillance disny utilisant lambda, je voulais utiliser lambda pour une exécution périodique, j'ai donc décidé d'utiliser aws lambda. À ce moment, il était nécessaire d'incorporer line-sdk-bot dans lambda, je vais donc décrire la méthode.

Paramètres locaux

Tout d'abord, créez un répertoire docker-lambda.

mkdir docker-lambda
cd docker-lambda

La structure du répertoire est la suivante.

docker-lambda ├── Dockerfile ├── deploy.sh └── requirements.txt

Chaque fichier est configuré comme suit.

Le Dockerfile est ci-dessous.

Dockerfile


FROM lambci/lambda:build-python3.7
ENV AWS_DEFAULT_REGION ap-northeast-1

ADD . .

CMD pip install -r requirements.txt -t python/lib/python3.7/site-packages/ && \
    zip -r linetest.zip ./python 

En lambda, je voulais mettre line-bot-sdk, pandas, numpy, requests, boto3, j'ai donc créé requirements.txt comme suit.

requirements.txt


line-bot-sdk
pandas
numpy
requests
boto3

Enfin, le fichier sh est configuré comme suit pour l'exécution. docker build -t lambda_test . En ce qui concerne, une fois que vous avez créé une image, vous pouvez commenter.

deploy.sh


#Premier lancement de conteneur uniquement
docker build -t lambda_test .
#Exécuter le conteneur
docker run -v "$PWD":/var/task lambda_test
#Autorité d'octroi(Rendre possible la lecture avec lambda)
chmod -R 755 ./*

Après avoir créé chaque fichier, exécutez ce qui suit dans le terminal.

terminal


sh deploy.sh

output


 adding: python/lib/python3.7/site-packages/urllib3-1.26.2.dist-info/RECORD (deflated 62%)
 adding: python/lib/python3.7/site-packages/urllib3-1.26.2.dist-info/WHEEL (deflated 14%)
 adding: python/lib/python3.7/site-packages/urllib3-1.26.2.dist-info/top_level.txt (stored 0%)

Lorsque l'exécution est terminée de cette manière, un dossier appelé python et un fichier zip appelé linetest.zip sont terminés. Ici, linetest.zip est une version zip de python. Les modules externes peuvent être utilisés en incorporant le fichier zip créé en tant que couche de lambda.

ls


Dockerfile              lambda_function.py      python
deploy.sh               linetest.zip            requirements.txt

Créer un calque

Accédez à la console aws et sélectionnez lambda → couche → créer une couche.

image.png

Nom: nom du calque favori (pour que vous puissiez voir à quoi sert le calque plus tard) Description: rédigez une description des modules inclus télécharger: <= 10 Mo → Télécharger un fichier zip

10 Mo → Télécharger via s3 Runtime: sélectionnez python3.7 cette fois Licence: vous n'avez rien à écrire

image.png

Étant donné que la taille du fichier zip dépasse 10 Mo cette fois, téléchargez le fichier zip via S3.

Service → s3 → créer un seau

Nom du godet: tout va bien Région: Match to lambda (cette fois unifié à Tokyo) Paramètres des paquets: tout bloquer Contrôle de version des paquets: désactiver Cryptage par défaut: désactiver Paramètres avancés: inchangés

↓ Créer un bucket

FireShot Capture 109 - S3 Management Console - s3.console.aws.amazon.com.png

Après avoir créé le bucket, sélectionnez le bucket créé. (Cette fois, j'ai créé un paquet appelé pypy-test) Télécharger → Ajouter un fichier → Télécharger le fichier zip créé précédemment

image.png

Si vous sélectionnez le fichier zip téléchargé, vous pouvez voir l'URL de l'objet, donc copiez-le.

Revenez à lambda et sélectionnez une couche. Collez l'URL de l'objet à l'emplacement de téléchargement.

Créer une fonction

lambda → fonction → ajouter une fonction

Comment faire: créer à partir de zéro Nom de la fonction: approprié Exécution: python3.7 ↓ Créer une fonction

image.png

Ce à quoi j'étais accro ici

Veuillez noter que s3 ne peut être utilisé que si la région est Tokyo. Au début, cela aurait dû être l'Afrique du Nord. .. ..

lamnda.png

Sélectionnez une fonction et sélectionnez Ajouter un calque. Sélectionnez un calque personnalisé, sélectionnez le calque que vous avez créé et cliquez sur Ajouter. (Si vous ne voyez pas la couche que vous avez créée ici, vérifiez que le runtime n'est peut-être pas là.)

image.png

Enfin, configurez API Gateway pour les tests. Sélectionnez Déclencheur → Passerelle API → Créer une API → API HTTP → Sécurité: Ouvrir → Ajouter

image.png

Cette fois, vérifiez si numpy peut être utilisé pour les tests. Réécrivez le code lambda comme suit.

image.png

Sélectionnez un test pour vous assurer qu'il s'exécute correctement.

image.png

Si vous sélectionnez API Gateway et accédez à l'URL à partir du point de terminaison de l'API, vous pouvez voir que le résultat de sin (1) est renvoyé comme indiqué ci-dessous.

FireShot Capture 115 - disny - Lambda - ap-northeast-1.console.aws.amazon.com.png

image.png

À partir de la prochaine fois, j'appliquerai ceci pour créer un linebot.

Article de référence

Paramètres Chmod

À propos des paramètres locaux de lambda

Recommended Posts

[Lambda] J'ai essayé d'incorporer un module externe de python via S3
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
[Python] J'ai essayé d'obtenir Json de squid ring 2
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de trouver l'entropie de l'image avec python
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
J'ai essayé de toucher Python (installation)
J'ai essayé de créer un environnement de MkDocs sur Amazon Linux
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé de corriger "J'ai essayé la simulation probabiliste du jeu de bingo avec Python"
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
J'ai essayé de faire 5 modèles de base d'analyse en 3 ans
[Python] Japonais simple ⇒ J'ai essayé de créer un outil de traduction en anglais
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de collecter automatiquement des images de Kanna Hashimoto avec Python! !!
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Connectez-vous à s3 avec AWS Lambda Python
[Python] J'ai essayé de calculer TF-IDF régulièrement
J'ai essayé de toucher Python (syntaxe de base)
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
Je veux colorer une partie de la chaîne Excel avec Python
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
J'ai essayé de sortir la liste rpm de la destination de connexion SSH sur une feuille Excel avec Python + openpyxl.
J'ai essayé des centaines de millions de SQLite avec python
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé d'informer Slack de la mise à jour de Redmine
J'ai essayé d'obtenir une image en grattant
Python: j'ai pu récurer en lambda
J'ai essayé de trouver le rapport de circonférence par 100 millions de chiffres
J'ai essayé de créer un environnement Ubuntu 20.04 LTS + ROS2 avec Raspberry Pi 4
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de corriger la forme trapézoïdale de l'image
[Hikari-Python] Module Chapitre 08-04 (Installation d'une bibliothèque externe)
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé d'automatiser le dépôt de 100 yens des courses de chevaux Rakuten (python / sélénium)
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé de détecter un objet avec M2Det!
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'automatiser la fabrication des sushis avec python
Je veux obtenir / exécuter des variables / fonctions / classes de fichiers externes à partir de Python
[AWS / Lambda] Comment charger une bibliothèque externe Python
J'ai essayé d'ajouter un module Python 3 en C