Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Python-Laufzeit für Lambda Managed Instances
Die Lambda-Laufzeit verwendet mehrere Python-Prozesse, um gleichzeitige Anfragen zu verarbeiten. Jede gleichzeitige Anforderung wird in einem separaten Prozess mit eigenem Speicherplatz und eigener Initialisierung ausgeführt. Jeder Prozess verarbeitet jeweils eine Anfrage synchron. Prozesse teilen sich den Speicher nicht direkt, sodass globale Variablen, Caches auf Modulebene und Singleton-Objekte zwischen gleichzeitigen Anforderungen isoliert werden.
Konfiguration der Parallelität
Die maximale Anzahl gleichzeitiger Anforderungen, die Lambda an jede Ausführungsumgebung sendet, wird durch die PerExecutionEnvironmentMaxConcurrency Einstellung in der Funktionskonfiguration gesteuert. Dies ist eine optionale Einstellung, und der Standardwert variiert je nach Laufzeit. Für Python-Laufzeiten ist die Standardeinstellung 16 gleichzeitige Anforderungen pro vCPU, oder Sie können Ihren eigenen Wert konfigurieren. Dieser Wert bestimmt auch die Anzahl der Prozesse, die von der Python-Laufzeit verwendet werden. Lambda passt die Anzahl der gleichzeitigen Anforderungen automatisch bis zum konfigurierten Maximum an, basierend auf der Kapazität der einzelnen Ausführungsumgebungen, diese Anforderungen zu verarbeiten.
Wichtig
Die Verwendung prozessbasierter Parallelität bedeutet, dass jeder Runtime-Worker-Prozess seine eigene Initialisierung durchführt. Die gesamte Speicherbelegung entspricht dem Arbeitsspeicher pro Prozess multipliziert mit der Anzahl der gleichzeitigen Prozesse. Wenn Sie große Bibliotheken oder Datensätze laden und eine hohe Parallelität haben, haben Sie einen großen Speicherbedarf. Je nach Arbeitslast müssen Sie möglicherweise Ihr CPU-to-memory Verhältnis anpassen oder eine niedrigere Einstellung für die Parallelität verwenden, um eine Überschreitung des verfügbaren Speichers zu vermeiden. Sie können die MemoryUtilization Metrik verwenden CloudWatch , um den Speicherverbrauch zu verfolgen.
Erstellung von Funktionen für Mehrfachparallelität
Aufgrund des prozessbasierten Mehrparallelitätsmodells greifen Lambda Managed Instances-Funktionen, die Python-Laufzeiten verwenden, bei mehreren Aufrufen nicht gleichzeitig auf speicherinterne Ressourcen zu. Sie müssen keine Codierungspraktiken anwenden, um die Sicherheit der Parallelität im Speicher zu gewährleisten.
Gemeinsames /tmp-Verzeichnis
Das /tmp Verzeichnis wird von allen gleichzeitigen Anforderungen in der Ausführungsumgebung gemeinsam genutzt. Gleichzeitige Schreibvorgänge in dieselbe Datei können zu Datenbeschädigungen führen, z. B. wenn ein anderer Prozess die Datei überschreibt. Um dieses Problem zu beheben, implementieren Sie entweder Dateisperren für gemeinsam genutzte Dateien oder verwenden Sie eindeutige Dateinamen pro Prozess oder pro Anfrage, um Konflikte zu vermeiden. Denken Sie daran, nicht benötigte Dateien zu bereinigen, um zu vermeiden, dass der verfügbare Speicherplatz ausgeschöpft wird.
Protokollierung
Das Verschachteln von Protokollen (Protokolleinträge aus verschiedenen Anfragen werden in Protokollen verschachtelt) ist bei Systemen mit mehreren gleichzeitigen Vorgängen normal.
Funktionen, die Lambda Managed Instances verwenden, verwenden immer das strukturierte JSON-Protokollformat, das mit erweiterten Protokollierungssteuerungen eingeführt wurde. Konfigurieren erweiterter Protokollierungsoptionen für Lambda-Funktionen Dieses Format beinhaltet dasrequestId, sodass Logeinträge einer einzelnen Anfrage zugeordnet werden können. Wenn Sie das logging Modul aus der Python-Standardbibliothek in Lambda verwenden, requestId ist das automatisch in jedem Protokolleintrag enthalten. Weitere Informationen finden Sie unter Verwenden der erweiterten Lambda-Logging-Steuerelemente mit Python.
Kontext anfordern
Wird verwendetcontext.aws_request_id, um auf die Anforderungs-ID für die aktuelle Anfrage zuzugreifen.
Bei Python-Laufzeiten können Sie die _X_AMZN_TRACE_ID Umgebungsvariable verwenden, um auf die X-Ray Trace-ID mit Lambda Managed Instances zuzugreifen. Die X-Ray Trace-ID wird automatisch weitergegeben, wenn Sie das SDK verwenden. AWS
Wird verwendetcontext.get_remaining_time_in_millis(), um Timeouts zu erkennen. Weitere Informationen finden Sie unter Fehlerbehandlung und Wiederherstellung.
Beispiel: Behandlung von Timeouts
Prüfen Sie die verbleibende Zeit vor jeder Arbeitseinheit und beenden Sie die Verarbeitung, bevor der Timeout ausgelöst wird. Konfigurieren Sie die Konfiguration auf der BUFFER_MS Grundlage der erwarteten Dauer Ihres nächsten Arbeitsabschnitts.
BUFFER_MS = 2000 # Configure based on your next chunk of work def handler(event, context): for item in event["items"]: if context.get_remaining_time_in_millis() < BUFFER_MS: return {"statusCode": 206, "body": "Timeout approaching, stopping early"} process_item(item) return {"statusCode": 200, "body": "Done"}
Beispiel: Weitergabe von Terminen an Downstream-Aufrufe
Wenn Sie nachgelagerte Dienste aufrufen, geben Sie die verbleibende Zeit als Timeout an, um zu vermeiden, dass Netzwerkaufrufe, die Ihren Aufruf überdauern würden, hängen bleiben. Das boto3 SDK unterstützt keine Timeouts pro Anfrage auf einem vorhandenen Client, daher müssen Sie einen Client mit dem gewünschten Timeout erstellen. Prüfen Sie bei Funktionen mit hohem Durchsatz, ob ein fester Timeout, der bei der Initialisierung konfiguriert wird, besser geeignet ist als die Client-Erstellung pro Anfrage.
import boto3 from botocore.config import Config def handler(event, context): remaining = context.get_remaining_time_in_millis() / 1000 timeout = max(1, remaining - 0.5) s3 = boto3.client("s3", config=Config(read_timeout=timeout, connect_timeout=timeout)) response = s3.get_object(Bucket="my-bucket", Key="my-key") return {"statusCode": 200, "body": "Done"}
Initialisierung und Herunterfahren
Die Funktionsinitialisierung erfolgt einmal pro Prozess. Möglicherweise werden wiederholte Protokolleinträge angezeigt, wenn Ihre Funktion während der Initialisierung Protokolle ausgibt.
Bei Lambda-Funktionen mit Erweiterungen gibt die Ausführungsumgebung beim Herunterfahren ein SIGTERM-Signal aus. Dieses Signal wird von Erweiterungen verwendet, um Bereinigungsaufgaben wie das Leeren von Puffern auszulösen. Sie können SIGTERM-Ereignisse abonnieren, um Aufgaben zur Funktionsbereinigung auszulösen, z. B. das Schließen von Datenbankverbindungen. Weitere Informationen zum Lebenszyklus der Ausführungsumgebung finden Sie unter Verständnis des Lebenszyklus der Lambda-Ausführungsumgebung.
Versionen, die abhängig sind
Für Lambda Managed Instances sind die folgenden Mindestpaketversionen erforderlich:
-
Powertools für AWS Lambda (Python): Version 3.23.0 oder höher
Powertools für AWS Lambda (Python)
Powertools for AWS Lambda (Python) ist mit Lambda Managed Instances kompatibel und bietet Hilfsprogramme für Logging, Tracing, Metriken und mehr. Weitere Informationen finden Sie unter Powertools for AWS Lambda (Python).
Nächste Schritte
-
Überprüfen Sie die Java-Laufzeit für von Lambda verwaltete Instances
-
Überprüfen Sie die Node.js Laufzeit für Lambda Managed Instances
-
Überprüfen Sie die .NET-Laufzeit für Lambda Managed Instances
-
Erfahren Sie mehr über die Skalierung von Lambda Managed Instances