Bewährte Methoden für die Arbeit mit AWS Lambda-Funktionen
Im Folgenden finden Sie einige bewährte Methoden für die Verwendung vo AWS Lambda:
Themen
Funktionscode
Nutzen Sie die Wiederverwendung der Ausführungsumgebung zur Verbesserung Ihrer Funktion. Initialisieren Sie SDK-Clients und Datenbankverbindungen außerhalb des Funktions-Handlers und speichern Sie statische Komponenten lokal im /tmp-Verzeichnis. Nachfolgende Aufrufe, die von derselben Instance Ihrer Funktion verarbeitet werden, können diese Ressourcen wiederverwenden. Dies spart Kosten durch Reduzierung der Funktionslaufzeit.
Um potenzielle Datenlecks über Aufrufe hinweg zu vermeiden, verwenden Sie die Ausführungsumgebung nicht, um Benutzerdaten, Ereignisse oder andere Informationen mit Sicherheitsauswirkungen zu speichern. Wenn Ihre Funktion auf einem veränderbaren Zustand beruht, der nicht im Speicher innerhalb des Handlers gespeichert werden kann, sollten Sie für jeden Benutzer eine separate Funktion oder separate Versionen einer Funktion erstellen.
Verwenden Sie eine Keep-Alive-Direktive, um dauerhafte Verbindungen zu pflegen. Lambda bereinigt Leerlaufverbindungen im Laufe der Zeit. Der Versuch, eine Leerlaufverbindung beim Aufruf einer Funktion wiederzuverwenden, führt zu einem Verbindungsfehler. Um Ihre persistente Verbindung aufrechtzuerhalten, verwenden Sie die Keep-Alive-Direktive, die Ihrer Laufzeit zugeordnet ist. Ein Beispiel finden Sie unter Wiederverwenden von Verbindungen mit Keep-Alive in Node.js.
Verwenden Sie Umgebungsvariablen um Betriebsparameter an Ihre Funktion zu übergeben. Wenn Sie z. B. Daten in einen Amazon-S3-Bucket schreiben, anstatt den Bucket-Namen, in den Sie schreiben, hartzucodieren, konfigurieren Sie den Bucket-Namen als Umgebungsvariable.
Vermeiden Sie rekursive Aufrufe in Ihrer Lambda-Funktion, bei denen die Funktion sich selbst aufruft oder einen Prozess initiiert, der die Funktion erneut aufrufen kann. Dies kann zu unvorhergesehenen Mengen an Funktionsaufrufen führen und höhere Kosten zur Folge haben. Wenn Sie eine unbeabsichtigte Menge von Aufrufen feststellen, legen Sie die reservierte gleichzeitige Ausführung der Funktion auf 0 fest, um sofort alle Aufrufe der Funktion zu drosseln, während Sie den Code aktualisieren.
Verwenden Sie keine nicht dokumentierten, nicht öffentlichen APIs in Ihrem Lambda-Funktionscode. Für AWS Lambda-verwaltete Laufzeiten wendet Lambda regelmäßig Sicherheits- und Funktionsupdates auf Lambdas interne APIs an. Diese internen API-Updates können abwärtskompatibel sein, was zu unbeabsichtigten Konsequenzen wie Aufruffehlern führt, wenn Ihre Funktion von diesen nicht öffentlichen APIs abhängig ist. Eine Liste öffentlich zugänglicher APIs finden Sie in der API-Referenz.
Schreiben Sie idempotenten Code. Das Schreiben idempotenter Code für Ihre Funktionen stellt sicher, dass doppelte Ereignisse auf die gleiche Weise behandelt werden. Ihr Code sollte Ereignisse ordnungsgemäß validieren und doppelte Ereignisse ordnungsgemäß behandeln. Weitere Informationen finden Sie unter Wie mache ich meine Lambda-Funktion idempotent?
Anmerkung
Sie können Powertools for AWS Lambda verwenden, um Funktionen idempotent zu machen. Weitere Informationen finden Sie unter:
Bewährte Methoden für sprachspezifischen Code finden Sie in den folgenden Abschnitten:
Funktionskonfiguration
Die Leistungstests Ihrer Lambda-Funktion sind ein entscheidender Faktor, um sicherzustellen, dass Sie die optimale Speichergrößenkonfiguration auswählen. Jede Erhöhung des Arbeitsspeichers führt zu einer gleichwertigen Erhöhung der CPU-Verfügbarkeit Ihrer Funktion. Die Speicherauslastung für Ihre Funktion wird pro Aufruf ermittelt und kann in Amazon CloudWatch angezeigt werden. Bei jedem Aufruf erfolgt ein REPORT: Eintrag, wie nachfolgend dargestellt:
REPORT RequestId: 3604209a-e9a3-11e6-939a-754dd98c7be3 Duration: 12.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB
Durch die Analyse Max Memory Used: des Feldes können Sie feststellen, ob Ihre Funktion mehr Speicher benötigt oder ob die Speichergröße Ihrer Funktion überdimensioniert ist.
Um die richtige Speicherkonfiguration für Ihre Funktionen zu finden, empfehlen wir die Verwendung des Open Source AWS Lambda Power Tuning-Projekts. Weitere Informationen finden Sie unter AWS Lambda Power Tuning
Um die Funktionsleistung zu optimieren, empfehlen wir außerdem die Bereitstellung von Bibliotheken, die Advanced Vector Extensions 2 (AVX2) nutzen können. Auf diese Weise können Sie anspruchsvolle Workloads verarbeiten, einschließlich Inferencing für Machine Learning, Medienverarbeitung, High Performance Computing (HPC), wissenschaftliche Simulationen und Finanzmodellierung. Weitere Informationen finden Sie unter Erstellen schnellerer AWS Lambda-Funktionen mit AVX2
Unterziehen Sie Ihre Lambda-Funktion zur Ermittlung der optimalen Zeitbeschränkung einem Belastungstest. Es sollte analysiert werden, wie lange Ihre Funktion ausgeführt wird, damit Sie Probleme mit einem Dependency-Service besser erkennen können, welche möglicherweise die Gleichzeitigkeit der Funktion über das hinaus erhöhen, was Sie erwarten. Dies ist besonders wichtig, wenn Ihre Lambda-Funktion Netzwerkaufrufe an Ressourcen durchführt, die möglicherweise die Skalierung von Lambda nicht beherrschen. Weitere Informationen über Lasttests Ihrer Anwendung finden Sie unter Verteilte Lasttests auf AWS
Verwenden Sie die strengsten Berechtigungen bei der Einrichtung von IAM-Richtlinien. Informieren Sie sich darüber, welche Ressourcen und Vorgänge Ihre Lambda-Funktion benötigt und beschränken Sie die Ausführungsrolle auf diese Berechtigungen. Weitere Informationen finden Sie unter Verwalten von Berechtigungen in AWS Lambda.
Machen Sie sich mit vertrau Lambda-Kontingente. Nutzlastgröße, Dateideskriptoren und /tmp space werden bei der Ermittlung von Laufzeit-Ressourcen-Limits oft übersehen.
Löschen Sie nicht mehr benötigte Lambda-Funktionen. Auf diese Weise werden die nicht ungenutzten Funktionen nicht unnötigerweise auf die Größenbeschränkung Ihres Bereitstellungspakets angerechnet.
Wenn Sie Amazon Simple Queue Service als Ereignisquelle verwenden, stellen Sie sicher, dass der Wert der erwarteten Aufrufzeit der Funktion nicht größer ist als der Wert der Zeitbeschränkung für die Sichtbarkeit in der Warteschlange. Dies gilt für CreateFunction und UpdateFunctionConfiguration.
-
Im Fall von CreateFunction gibt AWS Lambda für den Prozess der Funktionserstellung einen Fehler aus.
-
Bei UpdateFunctionConfiguration kann dies zu doppelten Aufrufen der Funktion führen.
Skalierbarkeit von Funktionen
Machen Sie sich mit Ihren vor- und nachgelagerten Durchsatzbeschränkungen vertraut. Lambda-Funktionen lassen sich zwar nahtlos abhängig von der Last skalieren, aber vor- und nachgelagerte Abhängigkeiten verfügen möglicherweise nicht über die gleichen Durchsatzfähigkeiten. Wenn Sie die Skalierbarkeit Ihrer Funktion begrenzen müssen, können Sie die reservierte Gleichzeitigkeit für Ihre Funktion konfigurieren.
Integrierte Drosseltoleranz. Wenn bei Ihrer synchronen Funktion eine Drosselung auftritt, weil der Datenverkehr die Skalierungsrate von Lambda überschreitet, können Sie die folgenden Strategien anwenden, um die Drosselungstoleranz zu verbessern:
-
Timeouts, Wiederholungen und Backoff mit Jitter verwenden
. Durch die Implementierung dieser Strategien werden wiederholte Aufrufe vereinfacht und es wird sichergestellt, dass Lambda innerhalb von Sekunden skaliert werden kann, um die Drosselung durch Endbenutzer zu minimieren. -
Bereitgestellte Parallelität verwenden. Die bereitgestellte Nebenläufigkeit beschreibt die Anzahl der vorinitialisierten Ausführungsumgebungen, die Lambda Ihrer Funktion zuweist. Lambda verarbeitet eingehende Anforderungen mit bereitgestellter Gleichzeitigkeit, sofern verfügbar. Lambda kann Ihre Funktion bei Bedarf auch über die vorgesehene Gleichzeitigkeitseinstellung hinaus skalieren. Die Konfiguration von bereitgestellter Gleichzeitigkeit verursacht Gebühren für Ihr AWS-Konto.
Metriken und Alarme
Verwenden Sie Verwendung von CloudWatch-Metriken mit Lambda und CloudWatch-Alarme, anstatt eine Metrik über den Lambda-Funktionsode zu erstellen oder zu aktualisieren. Es ist eine viel effizientere Art und Weise, die Zustandsprüfung Ihrer Lambda-Funktionen nachzuverfolgen, so dass Sie Probleme frühzeitig im Entwicklungsprozess erkennen können. Beispielsweise können Sie einen Alarm auf Basis der voraussichtlichen Dauer der Aufurfzeit Ihrer Lambda-Funktion konfigurieren, um Engpässe oder Latenzen zu beheben, die auf Ihren Funktionscode zurückzuführen sind.
Geben Sie benutzerdefinierte Metriken asynchron mithilfe des Embedded Metric Format (EMF) aus. Anstatt synchrone API-Aufrufe an CloudWatch zu tätigen, verwenden Sie EMF, um Metriken über die Protokolle Ihrer Funktion auszugeben. Dieser Ansatz reduziert die Latenz und verbessert die Leistung. Das Metrics-Dienstprogramm in Powertools for AWS Lambda verarbeitet die EMF-Formatierung automatisch. Weitere Informationen finden Sie unter Python-, TypeScript-, Java- oder .NET-Metrik-Dienstprogramme in der Dokumentation zu Powertools for AWS Lambda. Informationen zur Verwendung von EMF zur Generierung von Protokollen im Metrikformat finden Sie unter Veröffentlichen von Protokollen mithilfe des eingebetteten Metrikformats im Benutzerhandbuch zu Amazon CloudWatch.
Verwenden Sie die strukturierte JSON-Protokollierung für eine bessere Beobachtbarkeit. Die strukturierte Protokollierung erleichtert das Suchen, Filtern und Analysieren der Protokolle Ihrer Funktion. Erwägen Sie die Verwendung des Logger-Dienstprogramms von Powertools for AWS Lambda, um Protokolle automatisch in JSON zu formatieren. Weitere Informationen finden Sie unter Python-, TypeScript-, Java- oder .NET-Logger-Dienstprogramme in der Dokumentation zu Powertools for AWS Lambda.
Nutzen Sie Ihre Protokollierungsbibliothek und AWS Lambda-Metriken und Dimensionen, um Anwendungsfehler (z. B. ERR, ERROR, WARNING usw.) zu erkennen.
Verwenden Sie die AWS-Kostenanomalie-Erkennung, um ungewöhnliche Aktivitäten in Ihrem Konto zu erkennen. Die Kostenanomalie-Erkennung verwendet Machine Learning, um Ihre Kosten und Ihre Nutzung kontinuierlich zu überwachen und gleichzeitig falsch positive Warnungen zu minimieren. Die Kostenanomalie-Erkennung verwendet Daten von AWS Cost Explorer. Die Verzögerung kann hierbei bis zu 24 Stunden betragen. Daher kann es nach der Nutzung bis zu 24 Stunden dauern, bis eine Anomalie erkannt wird. Um die Kostenanomalie-Erkennung verwenden zu können, müssen Sie sich zunächst bei Cost Explorer anmelden. Anschließend können Sie auf die Kostenanomalie-Erkennung zugreifen.
Arbeiten mit Streams
Testen Sie mit unterschiedlichen Stapel- und Datensatzgrößen, so dass die Abfragefrequenz jeder Ereignisquelle darauf abgestimmt ist, wie schnell Ihre Funktion ihre Aufgabe erledigen kann. Der CreateEventSourceMapping-BatchSize-Parameter steuert die maximale Anzahl der Datensätze, die mit jedem Aufruf an Ihre Funktion gesendet werden können. Eine höhere Stapelgröße kann den mit dem Aufruf-Overhead über eine größere Datensatzgruppe hinweg oft effizienter verarbeiten und Ihren Durchsatz erhöhen.
Standardmäßig ruft Lambda Ihre Funktion auf, sobald Datensätze verfügbar sind. Wenn der Batch, den Lambda aus der Ereignisquelle liest, nur einen Datensatz enthält, sendet Lambda nur einen Datensatz an die Funktion. Damit die Funktion nicht mit einer kleinen Anzahl von Datensätzen aufgerufen wird, können Sie die Ereignisquelle anweisen, Datensätze bis zu 5 Minuten lang zu puffern, indem Sie ein Batch-Fenster konfigurieren. Bevor die Funktion aufgerufen wird, liest Lambda so lange Datensätze aus der Ereignisquelle, bis es einen vollständigen Batch erfasst hat, das Batch-Verarbeitungsfenster abläuft oder der Batch die Nutzlastgrenze von 6 MB erreicht. Weitere Informationen finden Sie unter Batching-Verhalten.
Warnung
Zuordnung von Lambda-Ereignisquellen verarbeiten jedes Ereignis mindestens einmal und es kann zu einer doppelten Verarbeitung von Datensätzen kommen. Um mögliche Probleme im Zusammenhang mit doppelten Ereignissen zu vermeiden, empfehlen wir Ihnen dringend, Ihren Funktionscode idempotent zu machen. Weitere Informationen finden Sie unter Wie mache ich meine Lambda-Funktion idempotent
Aktivieren Sie die teilweise Batch-Antwort für die Stream-Verarbeitung. Wenn Sie Batches von Datensätzen aus Streams wie Kinesis oder DynamoDB Streams verarbeiten, aktivieren Sie die teilweise Batch-Antwort, damit Lambda nur die fehlgeschlagenen Datensätze und nicht den gesamten Batch erneut versuchen kann. Dies verbessert die Verarbeitungseffizienz und reduziert unnötige Wiederholungsvorgänge. Sie können optional das Batch-Dienstprogramm von Powertools for AWS Lambda verwenden, um die Batchverarbeitungsmuster zu vereinfachen.
Anmerkung
Sie können Powertools for AWS Lambda für die Batchverarbeitung verwenden. Weitere Informationen finden Sie unter:
Erhöhen Sie den Durchsatz bei der Verarbeitung des Kinesis-Streams durch Hinzufügen von Shards. Ein Kinesis Stream besteht aus einem oder mehreren Shards. Die Geschwindigkeit, mit der Lambda Daten von Kinesis lesen kann, skaliert linear mit der Anzahl der Shards. Eine Erhöhung der Anzahl der Shards erhöht direkt die Anzahl der maximalen gleichzeitigen Lambda-Funktionsaufrufe und kann den Durchsatz Ihrer Kinesis-Streamverarbeitung steigern. Weitere Informationen über die Beziehung zwischen Shards und Funktionsaufrufen finden Sie unter Abfragen und Stapeln von Streams. Wenn Sie die Anzahl der Shards in einem Kineses-Stream erhöhen, stellen Sie sicher, dass Sie für Ihre Daten einen guten Partitionsschlüssel ausgewählt haben, (siehe Partitionsschlüssel), so dass Bezugsdatensätze auf denselben Shards gespeichert werden und Ihre Daten gut verteilt sind.
Verwenden Sie Amazon CloudWatch in IteratorAge, um festzustellen, ob Ihr Kinesis-Stream verarbeitet wird. Konfigurieren Sie z. B. einen CloudWatch-Alarm mit einer maximalen Einstellung von 30000 (30 Sekunden).
Bewährte Methoden für die Sicherheit
Überwachen Sie Ihre Nutzung von AWS Lambda in Bezug auf bewährte Sicherheitsmethoden, indem Sie AWS Security Hub CSPM verwenden. Security Hub bewertet mithilfe von Sicherheitskontrollen Ressourcenkonfigurationen und Sicherheitsstandards, um Sie bei der Einhaltung verschiedener Compliance-Frameworks zu unterstützen. Weitere Informationen zur Verwendung von Security Hub zur Bewertung von Lambda-Ressourcen finden Sie unter AWS Lambda-Steuerelemente im AWS Security Hub CSPM-Benutzerhandbuch.
Überwachen Sie Lambda-Netzwerkaktivitätsprotokolle mit Amazon GuardDuty Lambda Protection. GuardDuty-Lambda-Schutz hilft Ihnen, potenzielle Sicherheitsbedrohungen zu erkennen, wenn Lambda-Funktionen in Ihrem AWS-Konto aufgerufen werden. Zum Beispiel, wenn eine Ihrer Funktionen eine IP-Adresse abfragt, die mit einer Aktivität in Zusammenhang mit einer Kryptowährung steht. GuardDuty überwacht die Netzwerkaktivitätsprotokolle, die beim Aufrufen einer Lambda-Funktion erzeugt werden. Weitere Informationen finden Sie unter Lambda-Schutz im Amazon-GuardDuty-Benutzerhandbuch.