AWS Lambda kann im Ausgangszustand keine externen Bibliotheken wie Pandas und Numpy laden. Es gibt zwei Möglichkeiten, es zu laden: Die erste besteht darin, die installierten Bibliotheken und ausführbaren Dateien in einer Zip-Datei zusammenzufassen und auf Lambda hochzuladen, und die zweite darin, es als Ebene mit Lambda zu laden. Die letztere Methode wird empfohlen, aber in diesem Artikel haben wir diese Methoden als Tipps zusammen mit dem Aspekt der Codeverwaltung zusammengefasst.
MacOS Catalina Docker installiert AWS CLI installiert
Da es für das Code-Management nicht gut ist, Lambda im Browser zu entwickeln, werden wir die lokale Entwicklung ermöglichen. Mit anderen Worten, es erfolgt in lokaler Form, sodass es jederzeit von gitHub verwaltet und Codeänderungen auf Lambda hochgeladen werden können. Daher habe ich mit docker-lambda eine Bereitstellungsumgebung erstellt. (Bitte klonen Sie, wenn Sie es verwenden möchten) https://github.com/shoda888/local2lambda
Zuerst brauchen wir ein Docker-Image, damit wir es erstellen können. (Nur zum ersten Mal)
$ docker build -t shoda888/local2pylambda .
Wenn Sie danach den im Voraus erstellten Lambda-Funktionsnamen in die Variable funcname von "deploy.sh" eingeben und Folgendes ausführen, wird der Upload automatisch ausgeführt.
$ sh deploy.sh
Schreiben Sie lambda_function.py
neu und implementieren Sie.sh erneut, um festzustellen, ob es sich geändert hat.
Geben Sie require.txt einfach einen Bibliotheksnamen und deploy.sh (Pandas, Numpy, Anfragen usw.). Im Arbeitsverzeichnis wird eine große Anzahl von Bibliotheksverzeichnissen erstellt. Das Hochladen von Pandas ist zu schwer und dauert ca. 5 Minuten. Wenn ich es auf Lambda überprüfe, ist der Upload erfolgreich, aber eine Warnung wird angezeigt.
Das Bereitstellungspaket für die Lambda-Funktion "*******" ist zu groß, um die Inline-Code-Bearbeitung zu ermöglichen. Sie können die Funktion jedoch aufrufen.
Es scheint, dass die Funktion noch aufgerufen werden kann.
Es ist eine gute Idee, die Datei require.txt leer zu lassen, da es mühsam ist, die Bibliothek jedes Mal zu komprimieren und hochzuladen. Ich denke, dass es bequem und wiederverwendbar ist, wenn die Bibliothek in einer Ebene zusammengestellt wird. (Die Verwaltung von Bibliotheksversionen kann jedoch in Zukunft problematisch sein.) Mal sehen, wie man die Bibliothek in einer Ebene organisiert.
Im Fall einer reinen Python-Bibliothek kann beispielsweise eine Bibliothek, die zu 100% aus Python besteht (siehe Abbildung), problemlos eine Zip-Datei für die Ebene auf Ihrem Mac erstellen, ohne die Amazon Linux- oder Ubuntu-Umgebung mit EC2 vorzubereiten.
Wenn Sie ask_sdk_core als Beispiel installieren möchten, ist dies alles. (Beispiel für 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 .
Fügen Sie die generierte ask_sdk.zip zur Ebene hinzu und passen Sie die Ebene im Lambda an, um die Bibliothek zu laden.
Wie Numpy und Pandas. Es scheint besser, eine Amazon Linux-Umgebung mit EC2 zu erstellen und zu komprimieren. (Ich hatte das Gefühl, dass ich Layer schon einmal mit Ubuntu gemacht habe, aber kann Ubuntu verwendet werden?)
Viele Leute haben dies bereits getan, daher werden die Artikel anderer Leute sehr hilfreich sein. [Pandas als Lambda-Schicht hinzufügen] (https://qiita.com/thimi0412/items/4c725ec2b26aef59e5bd) Gemeinsame Bibliothek mit AWS Lambda-Ebenen
Das Folgende ist Youtube, aber Layer wird mit Ubuntu erstellt. (Einfach zu verstehen) [AWS Lambda Layers for Pandas library] (https://youtu.be/zrrH9nbSPhQ)
Nachdem es möglich geworden ist, Lambda zu entwickeln, während der Code lokal verwaltet wird, wird die Methode zum Laden der externen Bibliothek als Tipps zusammengefasst.
Recommended Posts