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.
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
Accédez à la console aws et sélectionnez lambda → couche → créer une couche.
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
É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
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
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.
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
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. .. ..
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à.)
Enfin, configurez API Gateway pour les tests. Sélectionnez Déclencheur → Passerelle API → Créer une API → API HTTP → Sécurité: Ouvrir → Ajouter
Cette fois, vérifiez si numpy peut être utilisé pour les tests. Réécrivez le code lambda comme suit.
Sélectionnez un test pour vous assurer qu'il s'exécute correctement.
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.
À partir de la prochaine fois, j'appliquerai ceci pour créer un linebot.
・ À propos des paramètres locaux de lambda
Recommended Posts