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.
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
Gehen Sie zur aws-Konsole und wählen Sie Lambda → Ebene → Ebene erstellen.
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
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
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
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.
Lambda → Funktion → Funktion hinzufügen
Wie zu machen: Von Grund auf neu erstellen Funktionsname: Geeignet Laufzeit: python3.7 ↓ Eine Funktion erstellen
Bitte beachten Sie, dass s3 nur in Tokio verwendet werden kann. Anfangs hätte es Nordafrika sein sollen. .. ..
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.)
Konfigurieren Sie abschließend das API-Gateway zum Testen. Wählen Sie Trigger → API-Gateway → API erstellen → HTTP-API → Sicherheit: Öffnen → Hinzufügen
Überprüfen Sie diesmal, ob numpy zum Testen verwendet werden kann. Schreiben Sie den Lambda-Code wie folgt um.
Wählen Sie einen Test aus, um sicherzustellen, dass er erfolgreich ausgeführt wird.
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.
Ab dem nächsten Mal werde ich dies anwenden, um einen Linebot zu erstellen.
・ Informationen zu den lokalen Einstellungen von Lambda
Recommended Posts