Führen Sie Python planmäßig auf AWS Lambda aus

Einführung

[Einige Funktionen hinzugefügt] zu Lambda bei Amazon re: Invent 2015 im Oktober 2015 (https://aws.amazon.com/jp/blogs/aws/aws-lambda-update-python-vpc-increased-function) -duration-scheduling-and-more /) wurde angekündigt. Persönlich sind die folgenden drei groß.

Starten Sie AWS Lambda mit Schedule Driven mithilfe der Datenpipeline Ich habe bereits einen Artikel geschrieben, aber die Funktion der Schedule-Ausführung wird als Standardfunktion von Lambda unterstützt. es war erledigt. In diesem Artikel werde ich die Lambda-Funktion mit Python schreiben und die Vorgehensweise zum Ausführen des Zeitplans erläutern.

Einschränkungen

Die Lambda + Python + Schedule-Ausführungsumgebung wurde dieses Mal angekündigt / hinzugefügt, es sind jedoch einige Einschränkungen zu beachten. Die Hauptelemente sind wie folgt.

Fall 1: Versuchen Sie, alle 5 Minuten mit Python Print auszugeben

Als allererste Fallstudie ist es der solide Fall, einen Zeitplan für Python-Skripte auszuführen, der einfach alle 5 Minuten gedruckt wird. Überprüfen Sie das Protokoll, um festzustellen, ob das Ergebnis der Zeitplanausführung korrekt ausgegeben wird.

Wählen Sie unter Lambda in der AWS-Konsole die Option "Lambda-Funktion erstellen" aus.

Schritt 1 Wählen Sie eine Vorlage aus (Blaupause = Blaupause)

Es gibt viele Vorlagen für die Lambda-Funktion, aber suchen Sie und wählen Sie "Lambda-Kanarienvogel". Dies ist eine Vorlage zum Ausführen des Schedule of Python-Skripts für die Lambda-Funktion.

select_blueprint.png

Schritt 2 Ereignisquelleneinstellungen

Da wir dieses Mal Schedule ausführen, wählen Sie "Geplantes Ereignis" als Ereignisquelle (ich denke, es ist standardmäßig ausgewählt). "Name" und "Beschreibung" sind in Ordnung, wenn Sie eine entsprechende Beschreibung eingeben. Der "Zeitplanausdruck" sollte standardmäßig "Rate (5 Minuten)" sein, damit Sie ihn unverändert lassen können.

Configure_event_sources.png

Schritt 3 Python-Skripteinstellungen

Legen Sie das Python-Skript und die IAM-Rolle fest.

Der Python-Code verwendet: Es ist ein Code, der nur gedruckt wird.

import json, datetime, commands

def lambda_handler(event, context):
    print commands.getoutput('cat /proc/cpuinfo | grep -e "processor" -e "model name"')
    print commands.getoutput('cat /proc/meminfo | grep MemTotal')
    print commands.getoutput('cat /proc/meminfo | grep MemFree')
    print datetime.datetime.now().strftime('%Y/%m/%d %H:%M')  
    print '-------------------------------'
    
    print event
    print event['account']
    print context.__dict__
    print context.memory_limit_in_mb

Außer dem Python-Skript sind die folgenden Einstellungen erforderlich. Andere sind gut mit Default Mom.

Configure_function.png

Schritt 4 Überprüfen Sie die Einstellungen

Dies ist die endgültige Bestätigung. Wählen Sie "Jetzt aktivieren", um die Ausführung des Zeitplans mit dieser Einstellung zu aktivieren. Wählen Sie "Jetzt aktivieren" und drücken Sie "Funktion erstellen", um den Vorgang abzuschließen.

Review.png

Schritt 5 Drucken Überprüfen Sie das Ausgabeergebnis

Die Ausgabe der Lambda-Funktion wird in CloudWatch-Protokollen gespeichert. Wählen Sie in den CloudWatch-Protokollen in der AWS-Konsole "Lambda_Test" aus. Dann wird das Ausführungsprotokoll alle 5 Minuten hinzugefügt, und ich denke, dass der gedruckte Inhalt im Protokoll verbleibt.

CloudWatchLogs.png

Python-Skript-Ergänzung

Fall 2: Versuchen Sie, den Ausführungszyklus des Zeitplans von alle 5 Minuten auf alle 10 Minuten zu ändern

Schritt 1 Löschen Sie die alten Einstellungen für die Zeitplanausführung

Wechseln Sie von Lambda in der AWS-Konsole zur Registerkarte "Ereignisquellen" der soeben erstellten Funktion "Lambda_Test". Löschen Sie die in "Rate (5 Minuten)" festgelegte Zeitplanausführung mit "x" und wählen Sie "Ereignisquelle hinzufügen". EditEventSource.png

Schritt 2 Festlegen der Zeitplanausführung alle 10 Minuten

Wählen Sie im Dialogfeld "Ereignisquelle hinzufügen" die Option "Geplantes Ereignis" für "Ereignisquellentyp" aus und füllen Sie das Dialogfeld wie folgt aus.

Hierbei ist zu beachten, dass sich die Cron-Grammatik von Lambda geringfügig von der sogenannten allgemeinen Cron-Grammatik von Linux unterscheidet. Siehe diesen Artikel Bitte schreiben Sie "cron (0/10 * * *? *)".

EditEventSource2.png

Wenn Sie "Jetzt aktivieren" auswählen, wird der Zeitplan mit dieser Einstellung ausgeführt. Überprüfen Sie alle 10 Minuten, ob sich das Ausführungsprotokoll in CloudWatch-Protokollen befindet.

Fall 3: Versuchen Sie, eine nicht standardmäßige Bibliothek einzufügen

Wenn Sie mit Lambda + Python eine Nicht-Python 2.7-Standardbibliothek wie "numpy", "pandas" oder "request" verwenden möchten, müssen Sie die Bibliothek zusammen mit der Skriptdatei selbst komprimieren und hochladen. es gibt. Weitere Informationen finden Sie unter Erstellen eines Bereitstellungspakets (Python) auf der offiziellen AWS-Website. ).

Schritt 1 Speichern Sie das Python-Skript als Datei

LambdaTest.py


import requests, datetime

def lambda_handler(event, context):
  target_URL = 'https://www.google.co.jp'

  r = requests.get(target_URL)
  print datetime.datetime.now().strftime('%Y/%m/%d %H:%M') 
  print '-------------------------------'
  print r.status_code
  print '-------------------------------'
  print r.text

Eine Bibliothek mit dem Namen "Anfragen", die nicht im Python 2.7-Standard enthalten ist, ist erforderlich. Wenn Sie diesen Code also so wie er ist in Lambda registrieren, tritt ein Fehler auf. Legen Sie daher die Bibliotheksdatei mit den Anforderungen in denselben Ordner, komprimieren Sie sie und registrieren Sie die ZIP-Datei in Lambda.

Schritt 2 Erstellen Sie eine Zip-Datei mit der Bibliothek

Wenn Sie "pip install" mit der Option "-t / PathTo / LambdaTest.py" ausführen, wird die Bibliotheksdatei im angegebenen Ordner abgelegt. Wenn sich LambdaTest.py beispielsweise in "/ home / hoge" befindet, können Sie "pip install -t / home / hoge" ausführen.

Die Dateistruktur sollte wie folgt aussehen. Zippen Sie diese (2 Ordner, 1 Datei) und geben Sie ihnen einen passenden Namen (sagen wir "LambdaLibraryZip.zip")

folder.png

Schritt 3 Ändern Sie den Funktionsnamen des Einstiegspunkts

Beim Hochladen der Code of Lambda-Funktion mit zip wird der Funktionsname von Entry Point (Hauptfunktion von Python) zum Dateinamen von * .py + . + Funktion von Entry Point in Script. In diesem Beispiel müssen Sie es auf "LambdaTest.lambda_handler" setzen. Setzen Sie "Handler" auf der Registerkarte "Konfiguration" auf "LambdaTest.lambda_handler"

HanderName.png

Schritt 4 Laden Sie die Zip-Datei hoch und führen Sie sie aus

Gehen Sie auf der Registerkarte "Code" zu "Eine ZIP-Datei hochladen", laden Sie die soeben erstellte "LambdaLibraryZip.zip" hoch, klicken Sie auf "Speichern und testen" und überprüfen Sie, ob das Python-Skript ordnungsgemäß ausgeführt wird. Bitte gib mir.

uploadzip.png

Schließlich

Lambdas Unterstützung für Python und die Ausführung von Zeitplänen sind für mich als Python Love eine sehr gute Nachricht. Gehen Sie zu Amazon 2 Tier Architecture oder Serverless Architecture. Ich denke, es wird ein großes Sprungbrett sein (und wird immer mehr von Amazon eingeschlossen ...).

Ich denke jedoch, dass es noch einige Bereiche gibt, die nicht durch Ausführen von Lambda + Python + Schedule ersetzt werden können.

Fälle, die in einem kurzen Zyklus ausgeführt werden müssen

Lambda hat einen Mindestausführungszyklus von 5 Minuten. Ich denke, dies wird viele Bedürfnisse abdecken, aber es gibt auch Anforderungen wie "Ich möchte den Status und die lebendige Überwachung jede Minute überprüfen". Ich kenne den AWS-Service, der serverlose Kurzzykluspläne ausführt, nicht (wenn Sie wissen, lassen Sie es mich bitte wissen).

Der Vorschlag von Amazon lautet EC2 t2.nano Instance. html), denke ich. Bereiten Sie eine Instanz vor, die noch billiger als das aktuelle t2.micro ist, und schreiben Sie damit auf die Rückseite der Packungsbeilage.

Fälle, deren Bearbeitung lange dauert

Die maximale Verarbeitungszeit von Lambda wurde jetzt auf 5 Minuten (zuvor 1 Minute) erhöht. Wenn es 1 Minute war, verwenden Sie die Lambda-Funktion, um das Protokoll von S3 auf Local zu bringen, den Inhalt zu analysieren. Wenn ein Fehler gefunden wird, aktivieren Sie Alarm und schreiben Sie das Ergebnis in RDS. Zu dieser Zeit gab es einen Fall, in dem Timeout auftrat, als die Protokollgröße mehrere hundert MB überschritt, aber ich denke, dass diese Erweiterung auf 5 Minuten viele Anforderungen abdecken wird. Es gibt jedoch auch Anforderungen, die Verarbeitungszeit erfordern, wie z. B. "Tägliche ETL-Stapelverarbeitung einer großen Datenmenge".

Soweit ich weiß, sind die Anforderungen, deren Verarbeitung mit dieser Art der Berechnung und Datenübertragung einige Zeit in Anspruch nimmt, folgende

Ich finde das gut

Recommended Posts

Führen Sie Python planmäßig auf AWS Lambda aus
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Führen Sie mysqlclient auf Lambda aus
Das Modul kann nicht in Python auf EC2 importiert werden, das von AWS Lambda ausgeführt wird
[Python] Scraping in AWS Lambda
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Führen Sie Pythons CGI auf CORESERVER aus
Führen Sie den Unix-Befehl auf Python aus
Führen Sie YOLO v3 unter AWS v2 aus
Führen Sie YOLO v3 unter AWS aus
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Unterstützung für Python 2.7-Laufzeit auf AWS Lambda (ab 2020.1)
Ich möchte Lambda mit Python auf Mac AWS!
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Schreiben Sie die AWS Lambda-Funktion in Python
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Versuchen Sie, Schedule auszuführen, um Instanzen in AWS Lambda (Python) zu starten und zu stoppen.
Veröffentlichen Sie regelmäßig Bilder von Papillon auf Python + AWS Lambda + Slack
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
[Python] Ermöglicht den Import von pip3-Paketen in AWS Lambda
Führen Sie Python regelmäßig auf Heroku Scheduler aus
xgboost (Python) in einer von AWS Lambda erstellten EC2 Spot-Instanzumgebung
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Best Practice für die Anmeldung im JSON-Format unter AWS Lambda / Python
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus
[Python] Führen Sie Flask in Google App Engine aus
Installieren Sie die Python-Bibliothek auf Lambda mit [/ tmp]
Führen Sie AzureKinect an Heiligabend in Python aus.
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Führen Sie Python-Code in der A2019 Community Edition aus
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Führen Sie den Python-WSGI-Server auf der NGINX-Einheit aus
Python unter Windows
Twitter mit Python3
Python auf Mac
Jupyter auf AWS
Python auf Windbg
Setzen Sie MicroPython unter Windows ein, um ESP32 unter Python auszuführen
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Führen Sie Python YOLOv3 in C ++ unter Visual Studio 2017 aus
Python-Entwicklung unter Ubuntu unter AWS EC2 (mit Jupyter Lab)
So führen Sie MeCab unter Ubuntu 18.04 LTS Python aus
Führen Sie Python Script regelmäßig in der AWS Data Pipeline aus
LINE BOT mit Python + AWS Lambda + API Gateway
Führen Sie Python-Webanwendungen mit NGINX + NGINX Unit + Flask aus
Führen Sie Zookeeper x Python (Kazoo) unter Mac OS X aus
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
Jinja2 2.9.6 funktioniert nicht mit der Lambda Python 3-Serie
Führen Sie die Pip-Installation unter MacOS Python 3.7 oder höher aus
[AWS / Lambda] Laden einer externen Python-Bibliothek
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
(Für mich) AWS_Flask_3 (Flask auf AWS installieren / ausführen)
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
Amazon API Gateway und AWS Lambda Python-Version
TensorFlow: Führen Sie in Python gelernte Daten unter Android aus