[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.
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.
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.
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.
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.
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.
Name
ist der Name der Lambda-Funktion. Jede Zeichenfolge ist in Ordnung (es sei denn, sie überschneidet sich mit anderen Lambda-Funktionen).Rolle
ist die IAM-Rolle, die der Lambda-Funktion zugewiesen ist. Da wir diesmal nicht auf andere AWS-Ressourcen zugreifen, können Sie "lambda_basic_execution" auswählen (wenn Sie keine IAM-Rolle mit dem Namen "lambda_basic_execution" haben, erstellen Sie eine Rolle mit diesem Namen).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.
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.
Handler
von Configuration
geändert werden.
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".
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 * * *? *)".
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.
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. ).
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.
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")
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"
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.
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.
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.
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