Ein Skript, das Ihre bevorzugten Python-Module und Binärdateien in einer einzigen Lambda-Ebene kombiniert

Lambda und Layer sind praktisch, es gibt jedoch ein Limit von 5 pro Funktion. Ich denke, dass es viele Fälle gibt, in denen Ebenen als ein Modul betrieben werden, aber es ist unerwartet unzureichend oder es ist mühsam, eine nach der anderen hinzuzufügen. Verwalten Sie Ihre Lieblingsmodule in der bekannten Datei "require.txt" und kombinieren Sie sie zu einer Ebene.

Erstellen Sie eine Anforderung.txt, die die 6 Module im Test importiert.

requirement.txt


selenium
requests
Pillow
lxml
numpy
Flask

Führen Sie dann das folgende Skript in derselben Ebene aus. Docker Bearbeiten Sie die Python-Version und die aws-Befehlsargumente nach Bedarf.

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

Sie können jetzt in Lambda registrierte Ebenen hinzufügen. Die Testfunktion wurde von aus diesem Repository Serverless Framework bereitgestellt und bestätigt. das ist alles!

Wenn Sie Serverless Framework verwenden, vereinfachen serverless-python-Anforderungen die Modulverwaltung, und es ist besser, nicht mithilfe von Ebenen zu trennen. Ich denke, dass Infrastruktur als Code gründlich und elegant ist. Wenn jedoch die Obergrenze der Anzahl der Schichten zu einem Hindernis wird oder wenn das Modul im Paket enthalten ist, ist die Wartezeit für die Bereitstellung lang. Ich persönlich bevorzuge es, mich nach Schichten zu trennen, da ich eine kleine Drehung höre.

Wenn Sie Selen verwenden, ist es übrigens einfacher, die Binärdateien zusammen zu verwalten. Unten finden Sie das Skript, das auch die Binärdatei hinzufügt. Abgesehen davon ist das kopflose Selen, das mit dem mir bekannten Lambda auf Python läuft, ein Satz dieser Skriptversion und von Python3.7. Aus diesem Grund verwenden Sie eine ältere Release-Version.

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

Die Testfunktion, mit der die chromeOptions für Selen so eingestellt werden, dass sie auf Lambda und dem von dieser Schicht erhaltenen Binärpfad ordnungsgemäß funktioniert, lautet hier. py).

Referenz 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

Ein Skript, das Ihre bevorzugten Python-Module und Binärdateien in einer einzigen Lambda-Ebene kombiniert
[Python, PyPDF2] Ein Skript, das ein verbreitetes PDF in zwei links und rechts unterteilt
Python, das viele Excel zu einem Excel zusammenführt
Ein Skript, das mehrere Seiten einer PDF-Datei zu einer Seite ohne Ränder kombiniert
Eine Kurzanleitung zu PyFlink, die Apache Flink und Python kombiniert
Ein Python-Skript, das auf dem Mac erstellte ._DS_Store- und ._ * -Dateien löscht
Ein Python-Programm, das die Größe eines Videos ändert und es in ein Bild verwandelt
[Python] Packen und verteilen Sie Ihre eigenen Module
Python-Skript, das SQL-Dateien liest, BigQuery ausführt und CSV speichert
Organisieren Sie Python-Module und -Pakete in einem Chaos
Python-Code, der zusammenhängende Leerzeichen in einem entfernt
"Python Kit", das Python-Skripte von Swift aufruft
Ein Python-Skript, das eine datierte CSV-Datei als Zeitpartitionstabelle in BigQuery importiert
[Python] Ein Notizbuch, das die ipynb-Datei von GitHub ins Japanische übersetzt und herunterlädt.
Shell-Skript zum Einfügen von Webmin in Alpine Linux
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts
Python-Programm, das ical-Daten in Text konvertiert
Ein Skript, das Dateiaktualisierungen erkennt, Coffee and Sass automatisch kompiliert und den Browser neu lädt
Python-Skript, das den Status des Servers über den Browser überprüfen kann