Lambda et Layers sont pratiques, mais il y a une limite de 5 par fonction.
Je pense qu'il existe de nombreux cas où les couches sont utilisées comme un seul module, mais cela est insuffisant de manière inattendue ou il est difficile de les ajouter un par un.
Gérez vos modules préférés dans le familier requirements.txt
et combinez-les en une seule couche.
Créez un requis.txt qui importe les 6 modules du test.
requirement.txt
selenium
requests
Pillow
lxml
numpy
Flask
Exécutez ensuite le [Script] suivant (https://github.com/umihico/fav-py-modules/blob/master/publish_layer.sh) dans la même couche. docker Modifiez la version python et les arguments de la commande aws selon vos besoins.
mkdir -p python/bin/
docker run --rm -v $(pwd):/var/task -w /var/task lambci/lambda:build-python3.7 pip install -r requirements.txt -t ./python
zip -r layer.zip python
aws lambda publish-layer-version --layer-name favorites --zip-file fileb://layer.zip --compatible-runtimes python3.7 --region ap-northeast-1
rm -rf layer.zip python
Vous pouvez désormais ajouter des couches enregistrées dans Lambda. La fonction de test a été déployée et confirmée par à partir de ce référentiel Serverless Framework. c'est tout!
Si vous utilisez Serverless Framework, serverless-python-requirements facilite la gestion des modules et il est préférable de ne pas séparer les couches en utilisant. Je pense que Infrastructure as Code est complet et élégant. Cependant, si la limite supérieure du nombre de couches devient un obstacle ou si le module est inclus dans le package, le temps d'attente pour le déploiement sera long, donc personnellement je préfère séparer par couches car j'entends un petit tour.
En passant, si vous utilisez du sélénium, il est plus facile de gérer les binaires ensemble. Voici le script qui ajoute également le binaire. En passant, le sélénium sans tête qui fonctionne sur python avec le lambda que je connais est un ensemble de cette version de script et de python3.7. C'est pourquoi vous utilisez une version plus ancienne.
mkdir -p python/bin/
+ curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-+ headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
+ unzip headless-chromium.zip -d python/bin/
+ curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
+ unzip chromedriver.zip -d python/bin/
+ rm -rf chromedriver.zip headless-chromium.zip
docker run --rm -v $(pwd):/var/task -w /var/task lambci/lambda:build-python3.7 pip install selenium -t ./python
zip -r layer.zip python
aws lambda publish-layer-version --layer-name selenium_with_bin --zip-file fileb://layer.zip --compatible-runtimes python3.7 --region ap-northeast-1
rm -rf layer.zip python
La fonction de test qui définit les options chromeOptions pour que le sélénium fonctionne correctement sur lambda et le chemin binaire obtenu à partir de cette couche est [ici](https://github.com/umihico/fav-py-modules/blob/master/scraping. py).
référence https://github.com/adieuadieu/serverless-chrome/issues/133 https://dev.classmethod.jp/articles/managing-external-modules-with-serverless-framework-plugin/ https://www.npmjs.com/package/serverless-python-requirements https://hacknote.jp/archives/49974/ https://dev.classmethod.jp/articles/lambda-layer-first-action/
Recommended Posts