[Lambda] Ich habe versucht, ein externes Python-Modul über S3 zu integrieren

Überblick

Als ich mit Lambda einen Disny-Monitoring-Bot erstellt habe, wollte ich Lambda für die regelmäßige Ausführung verwenden, also habe ich mich für aws Lambda entschieden. Zu diesem Zeitpunkt war es notwendig, line-sdk-bot in Lambda zu integrieren, daher werde ich die Methode beschreiben.

Lokale Einstellungen

Erstellen Sie zunächst ein Docker-Lambda-Verzeichnis.

mkdir docker-lambda
cd docker-lambda

Die Struktur des Verzeichnisses ist wie folgt.

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

Jede Datei ist wie folgt konfiguriert.

Die Docker-Datei befindet sich unten.

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 

In Lambda wollte ich line-bot-sdk, pandas, numpy, request, boto3 einfügen, also habe ich die Datei require.txt wie folgt erstellt.

requirements.txt


line-bot-sdk
pandas
numpy
requests
boto3

Schließlich wird die sh-Datei für die Ausführung wie folgt konfiguriert. docker build -t lambda_test . Sobald Sie ein Bild erstellt haben, können Sie dies auskommentieren.

deploy.sh


#Zum ersten Mal nur Container starten
docker build -t lambda_test .
#Container ausführen
docker run -v "$PWD":/var/task lambda_test
#Bewilligungsbehörde(Machen Sie es möglich, mit Lambda zu lesen)
chmod -R 755 ./*

Führen Sie nach dem Erstellen jeder Datei Folgendes im Terminal aus.

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%)

Wenn die Ausführung auf diese Weise abgeschlossen ist, werden ein Ordner namens Python und eine Zip-Datei namens Linetest.zip fertiggestellt. Hier ist linetest.zip eine Zip-Version von Python. Externe Module können verwendet werden, indem die erstellte Zip-Datei als Lambda-Schicht integriert wird.

ls


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

Ebene erstellen

Gehen Sie zur aws-Konsole und wählen Sie Lambda → Ebene → Ebene erstellen.

image.png

Name: Name der bevorzugten Ebene (damit Sie später sehen können, wozu die Ebene dient) Beschreibung: Schreiben Sie eine Beschreibung der enthaltenen Module Upload: <= 10 MB → Zip-Datei hochladen

10MB → Upload über s3 Laufzeit: Wählen Sie diesmal python3.7 aus Lizenz: Sie müssen nichts schreiben

image.png

Da die Größe der Zip-Datei diesmal 10 MB überschreitet, laden Sie die Zip-Datei über S3 hoch.

Service → s3 → Eimer anlegen

Eimername: Alles ist in Ordnung Region: Match to Lambda (diesmal in Tokio vereint) Paketeinstellungen: Alle blockieren Paketversionierung: Deaktivieren Standardverschlüsselung: Deaktivieren Erweiterte Einstellungen: unverändert

↓ Einen Eimer erstellen

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

Wählen Sie nach dem Erstellen des Buckets den erstellten Bucket aus. (Dieses Mal habe ich ein Paket namens Pypy-Test erstellt) Hochladen → Datei hinzufügen → Laden Sie die zuvor erstellte Zip-Datei hoch

image.png

Wenn Sie die hochgeladene Zip-Datei auswählen, wird die Objekt-URL angezeigt. Kopieren Sie sie daher.

Gehen Sie wieder zu Lambda zurück und wählen Sie eine Ebene aus. Fügen Sie die Objekt-URL am Upload-Speicherort ein.

Eine Funktion erstellen

Lambda → Funktion → Funktion hinzufügen

Wie zu machen: Von Grund auf neu erstellen Funktionsname: Geeignet Laufzeit: python3.7 ↓ Eine Funktion erstellen

image.png

Wovon ich hier süchtig war

Bitte beachten Sie, dass s3 nur in Tokio verwendet werden kann. Anfangs hätte es Nordafrika sein sollen. .. ..

lamnda.png

Wählen Sie eine Funktion und dann Ebene hinzufügen. Wählen Sie eine benutzerdefinierte Ebene aus, wählen Sie die von Ihnen erstellte Ebene aus und klicken Sie auf Hinzufügen. (Wenn Sie die hier erstellte Ebene nicht sehen, überprüfen Sie, ob die Laufzeit möglicherweise nicht vorhanden ist.)

image.png

Konfigurieren Sie abschließend das API-Gateway zum Testen. Wählen Sie Trigger → API-Gateway → API erstellen → HTTP-API → Sicherheit: Öffnen → Hinzufügen

image.png

Überprüfen Sie diesmal, ob numpy zum Testen verwendet werden kann. Schreiben Sie den Lambda-Code wie folgt um.

image.png

Wählen Sie einen Test aus, um sicherzustellen, dass er erfolgreich ausgeführt wird.

image.png

Wenn Sie API-Gateway auswählen und vom API-Endpunkt zur URL springen, können Sie sehen, dass das Ergebnis von sin (1) wie unten gezeigt zurückgegeben wird.

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

image.png

Ab dem nächsten Mal werde ich dies anwenden, um einen Linebot zu erstellen.

Referenzartikel

Chmod-Einstellungen

Informationen zu den lokalen Einstellungen von Lambda

Recommended Posts

[Lambda] Ich habe versucht, ein externes Python-Modul über S3 zu integrieren
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
[Python] Ich habe versucht, Json von Tintenfischring 2 zu bekommen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, eine Umgebung von MkDocs unter Amazon Linux zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht zu beheben "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren"
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Ich habe versucht, in 3 Jahren 5 Muster der Analysebasis zu erstellen
[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Ich habe versucht, die Liste der Drehzahlen des SSH-Anmeldeziels mit Python + openpyxl in einer Excel-Tabelle auszugeben.
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich habe versucht, Slack über das Update von Redmine zu informieren
Ich habe versucht, durch Schaben ein Bild zu bekommen
Python: Ich konnte in Lambda rekursieren
Ich habe versucht, das Umfangsverhältnis mit 100 Millionen Stellen zu ermitteln
Ich habe versucht, mit Raspberry Pi 4 eine Umgebung von Ubuntu 20.04 LTS + ROS2 zu erstellen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
[Hikari-Python] Kapitel 08-04 Modul (Installation einer externen Bibliothek)
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, die 100-Yen-Lagerstätte von Rakuten-Pferderennen (Python / Selen) zu automatisieren.
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich möchte Variablen / Funktionen / Klassen externer Dateien von Python abrufen / ausführen
[AWS / Lambda] Laden einer externen Python-Bibliothek
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen