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.
Verwenden Sie die rekursive Lambda-Schleifenerkennung, um Endlosschleifen zu verhindern
Wenn Sie als Ziel für die Ausgabe einer Lambda-Funktion den gleichen Service oder die gleiche Ressource konfigurieren, durch den bzw. durch die die Funktion aufgerufen wird, kann eine unendliche rekursive Schleife entstehen. Beispielsweise könnte eine Lambda-Funktion eine Nachricht in eine Amazon Simple Queue Service (AmazonSQS) -Warteschlange schreiben, die dann dieselbe Funktion aufruft. Dieser Aufruf veranlasst die Funktion, eine weitere Nachricht in die Warteschlange zu schreiben, die wiederum erneut die Funktion aufruft.
Unbeabsichtigte rekursive Schleifen können dazu führen, dass Ihnen unerwartete Gebühren in Rechnung gestellt werden. AWS-Konto Außerdem können Schleifen dazu führen, dass Lambda skaliert wird und die gesamte verfügbare Parallelität Ihres Kontos nutzt. Um die Auswirkungen unbeabsichtigter Schleifen zu reduzieren, erkennt Lambda bestimmte Arten von rekursiven Schleifen kurz nach ihrem Auftreten. Wenn Lambda eine rekursive Schleife erkennt, stoppt es standardmäßig den Aufruf Ihrer Funktion und benachrichtigt Sie. Wenn Ihr Design bewusst rekursive Muster verwendet, können Sie die Standardkonfiguration einer Funktion so ändern, dass sie rekursiv aufgerufen werden kann. Weitere Informationen finden Sie unter Zulassen, dass eine Lambda-Funktion in einer rekursiven Schleife ausgeführt wird.
Sections
- Grundlegendes zur Erkennung rekursiver Schleifen
- Unterstützt und AWS-Services SDKs
- Benachrichtigungen zu rekursiven Schleifen
- Reagieren auf Benachrichtigungen im Zusammenhang mit der Erkennung rekursiver Schleifen
- Zulassen, dass eine Lambda-Funktion in einer rekursiven Schleife ausgeführt wird
- Unterstützte Regionen für die rekursive Lambda-Schleifenerkennung
Grundlegendes zur Erkennung rekursiver Schleifen
Zur Erkennung rekursiver Schleifen in Lambda werden Ereignisse nachverfolgt. Lambda ist ein ereignisgesteuerter Compute-Service, der Ihren Funktionscode ausführt, wenn bestimmte Ereignisse auftreten. Zum Beispiel, wenn ein Artikel zu einer SQS Amazon-Warteschlange oder einem Amazon Simple Notification Service (AmazonSNS) -Thema hinzugefügt wird. Lambda übergibt Ereignisse als JSON Objekte an Ihre Funktion, die Informationen über die Änderung des Systemstatus enthalten. Die Ausführung Ihrer Funktion infolge eines Ereignisses wird als Aufruf bezeichnet.
Zur Erkennung rekursiver Schleifen verwendet Lambda AWS X-Ray-Ablaufverfolgungs-Header. Wenn AWS-Services , die die Erkennung rekursiver Schleifen unterstützen, Ereignisse an Lambda senden, werden diese Ereignisse automatisch mit Metadaten versehen. Wenn Ihre Lambda-Funktion eines dieser Ereignisse AWS-Service mithilfe einer unterstützten Version von in ein anderes Ereignis schreibt AWS SDK, aktualisiert sie diese Metadaten. In den aktualisierten Metadaten ist angegeben, wie oft das Ereignis die Funktion aufgerufen hat.
Anmerkung
Dieses Feature funktioniert ohne Aktivierung der aktiven X-Ray-Ablaufverfolgung. Die Erkennung rekursiver Schleifen ist standardmäßig für alle AWS -Kunden aktiviert. Die Nutzung des Features ist kostenlos.
Bei einer Kette von Anforderungen handelt es sich um eine Sequenz von Lambda-Aufrufen, die durch das gleiche auslösende Ereignis verursacht werden. Stellen Sie sich zum Beispiel vor, dass eine SQS Amazon-Warteschlange Ihre Lambda-Funktion aufruft. Ihre Lambda-Funktion sendet dann das verarbeitete Ereignis zurück an dieselbe SQS Amazon-Warteschlange, die Ihre Funktion erneut aufruft. In diesem Beispiel gehört jeder Aufruf Ihrer Funktion zur gleichen Kette von Anforderungen.
Wenn Ihre Funktion ungefähr 16 Mal in derselben Kette von Anfragen aufgerufen wird, stoppt Lambda automatisch den nächsten Funktionsaufruf in dieser Anforderungskette und benachrichtigt Sie. Wenn Ihre Funktion mit mehreren Auslösern konfiguriert ist, sind Aufrufe von anderen Auslösern nicht betroffen.
Anmerkung
Selbst wenn die maxReceiveCount
Einstellung in der Redrive-Richtlinie der Quellwarteschlange höher als 16 ist, verhindert der Lambda-Rekursionsschutz nicht, dass Amazon SQS die Nachricht erneut versucht, nachdem eine rekursive Schleife erkannt und beendet wurde. Wenn Lambda eine rekursive Schleife erkennt und nachfolgende Aufrufe abbricht, gibt es ein RecursiveInvocationException
an die Zuordnung von Ereignisquellen zurück. Dadurch wird der Wert in der Nachricht erhöht. receiveCount
Lambda versucht weiterhin, die Nachricht erneut zu senden, und blockiert weiterhin Funktionsaufrufe, bis Amazon SQS feststellt, dass der Wert überschritten wurde, und die Nachricht an die maxReceiveCount
konfigurierte Warteschlange für unzustellbare Briefe sendet.
Wenn Sie für Ihre Funktion ein Ziel bei Ausfall oder eine Warteschlange für unzustellbare Nachrichten konfiguriert haben, sendet Lambda das Ereignis aus dem beendeten Aufruf auch an Ihr Ziel oder an die Warteschlange für unzustellbare Nachrichten. Achten Sie bei der Konfiguration einer Zielwarteschlange oder Warteschlange mit uneingeschränkten Briefen für Ihre Funktion darauf, kein SNS Amazon-Thema oder eine SQS Amazon-Warteschlange zu verwenden, die Ihre Funktion auch als Ereignisauslöser oder Ereignisquellenzuordnung verwendet. Wenn Sie Ereignisse an die Ressource senden, die auch Ihre Funktion aufruft, können Sie eine weitere rekursive Schleife erstellen.
Unterstützt und AWS-Services SDKs
Lambda kann nur rekursive Schleifen erkennen, die bestimmte unterstützte enthalten. AWS-Services Damit rekursive Schleifen erkannt werden können, muss Ihre Funktion auch eine der unterstützten Schleifen verwenden. AWS SDKs
Unterstützt AWS-Services
Lambda erkennt derzeit rekursive Schleifen zwischen Ihren Funktionen AmazonSQS, Amazon S3 und Amazon. SNS Außerdem erkennt Lambda Schleifen, die nur aus Lambda-Funktionen bestehen, die sich synchron oder asynchron gegenseitig aufrufen. Die folgenden Diagramme zeigen einige Beispiele für Schleifen, die von Lambda erkannt werden:
Wenn ein anderes AWS-Service System wie Amazon DynamoDB Teil der Schleife ist, kann Lambda es derzeit nicht erkennen und stoppen.
Da Lambda derzeit nur rekursive Schleifen erkennt, an denen AmazonSQS, Amazon S3 und Amazon beteiligt sind, ist es immer noch möglichSNS, dass Schleifen, an denen andere beteiligt sind, zu einer unbeabsichtigten Nutzung Ihrer Lambda-Funktionen führen AWS-Services können.
Um zu verhindern, dass Ihnen unerwartete Gebühren in Rechnung gestellt werden AWS-Konto, empfehlen wir Ihnen, CloudWatchAmazon-Alarme so zu konfigurieren, dass Sie auf ungewöhnliche Nutzungsmuster aufmerksam gemacht werden. Sie können beispielsweise so konfigurieren, dass Sie über CloudWatch Spitzenwerte bei der Parallelität oder bei Aufrufen von Lambda-Funktionen benachrichtigt werden. Des Weiteren können Sie einen Abrechnungsalarm konfigurieren, um benachrichtigt zu werden, wenn die Ausgaben für Ihr Konto einen von Ihnen angegebenen Schwellenwert übersteigen. Eine weitere Möglichkeit ist die Verwendung der AWS Cost Anomaly Detection, um über ungewöhnliche Abrechnungsmuster informiert zu werden.
Unterstützt AWS SDKs
Damit Lambda rekursive Schleifen erkennen kann, muss Ihre Funktion eine der folgenden SDK Versionen oder höher verwenden:
Laufzeit | Erforderliche Mindestversion AWS SDK |
---|---|
Node.js |
2.1147.0 (SDKVersion 2) 3.105.0 (Version 3) SDK |
Python |
1.24.46 (boto3) 1.27.46 (botocore) |
Java 8 und Java 11 |
2.17.135 |
Java 17 |
2,20,81 |
Java 21 |
2,21,24 |
.NET |
3,7,293,0 |
Ruby |
3,134,0 |
PHP |
3,232,0 |
Go |
SDKV2 (neueste Version verwenden) |
Einige Lambda-Laufzeiten wie Python und Node.js enthalten eine Version von. AWS SDK Wenn die in der Laufzeit Ihrer Funktion enthaltene SDK Version unter der erforderlichen Mindestversion liegt, können Sie dem SDK Bereitstellungspaket Ihrer Funktion eine unterstützte Version von hinzufügen. Sie können Ihrer Funktion auch mithilfe einer Lambda-Schicht eine unterstützte SDK Version hinzufügen. Eine Liste der in jeder Lambda-Laufzeit SDKs enthaltenen Funktionen finden Sie unterLambda-Laufzeiten.
Benachrichtigungen zu rekursiven Schleifen
Wenn Lambda eine rekursive Schleife beendet, erhalten Sie Benachrichtigungen über das AWS Health Dashboard
AWS Health Dashboard Benachrichtigungen
Wenn Lambda einen rekursiven Aufruf stoppt, wird auf der Seite Ihr Kontostatus unter Offene und
E-Mail-Benachrichtigungen
Wenn Lambda zum ersten Mal einen rekursiven Aufruf Ihrer Funktion beendet, erhalten Sie eine E-Mail-Benachrichtigung. Für jede Funktion in Ihrem AWS-Konto wird alle 24 Stunden maximal eine E-Mail gesendet. Nachdem Lambda eine E-Mail-Benachrichtigung gesendet hat, erhalten Sie für einen Zeitraum von 24 Stunden keine E-Mails mehr zu dieser Funktion. Das gilt auch, wenn Lambda weitere rekursive Aufrufe der Funktion beendet. Beachten Sie, dass es nach der Beendigung eines rekursiven Aufrufs durch Lambda bis zu drei Stunden dauern kann, bis Sie diese E-Mail-Benachrichtigung erhalten.
Lambda sendet rekursive Loop-E-Mail-Benachrichtigungen an Ihren primären AWS-Konto Kundenkontakt und an den alternativen Betriebskontakt. Informationen zum Anzeigen oder Aktualisieren der E-Mail-Adressen in Ihrem Konto finden Sie in der allgemeinen AWS -Referenz unter Updating contact information.
CloudWatch Amazon-Metriken
Die CloudWatch Metrik RecursiveInvocationsDropped
zeichnet die Anzahl der Funktionsaufrufen auf, die Lambda gestoppt hat, weil Ihre Funktion in einer einzigen Anforderungskette mehr als etwa 16 Mal aufgerufen wurde. Lambda gibt diese Metrik aus, sobald ein rekursiver Aufruf beendet wurde. Um diese Metrik anzuzeigen, folgen Sie den Anweisungen unter Metriken anzeigen auf der CloudWatch Konsole und wählen Sie die Metrik aus. RecursiveInvocationsDropped
Reagieren auf Benachrichtigungen im Zusammenhang mit der Erkennung rekursiver Schleifen
Wenn Ihre Funktion mehr als ungefähr 16 Mal durch dasselbe auslösende Ereignis aufgerufen wird, stoppt Lambda den nächsten Funktionsaufruf für dieses Ereignis, um die rekursive Schleife zu unterbrechen. Gehen Sie wie folgt vor, um zu verhindern, dass eine rekursive Schleife, die von Lambda unterbrochen wurde, erneut auftritt:
-
Reduzieren Sie die verfügbare Parallelität Ihrer Funktion auf Null. Dadurch werden alle zukünftigen Aufrufe gedrosselt.
-
Entfernen oder deaktivieren Sie den Auslöser oder die Zuordnung von Ereignisquellen, der bzw. die Ihre Funktion aufruft.
-
Identifizieren und beheben Sie Codefehler, die Ereignisse in die AWS Ressource zurückschreiben, die Ihre Funktion aufruft. Eine Fehlerquelle entsteht häufig, wenn die Ereignisquelle und das Ziel einer Funktion mithilfe von Variablen definiert werden. Achten Sie darauf, nicht für beide Variablen den gleichen Wert zu verwenden.
Wenn es sich bei der Ereignisquelle für Ihre Lambda-Funktion um eine SQS Amazon-Warteschlange handelt, sollten Sie außerdem erwägen, eine Warteschlange für unzustellbare Briefe in der Quellwarteschlange zu konfigurieren.
Anmerkung
Achten Sie darauf, die Warteschlange für unzustellbare Nachrichten für die Quellwarteschlange und nicht für die Lambda-Funktion zu konfigurieren. Die Warteschlange für unzustellbare Nachrichten, die Sie für eine Funktion konfigurieren, wird für die Warteschlange asynchroner Aufrufe der Funktion und nicht für Ereignisquellen-Warteschlangen verwendet.
Wenn es sich bei der Ereignisquelle um ein SNS Amazon-Thema handelt, sollten Sie erwägen, ein Ziel für den Fall eines Fehlers für Ihre Funktion hinzuzufügen.
So reduzieren Sie die verfügbare Parallelität Ihrer Funktion auf Null (Konsole)
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie den Namen Ihrer Funktion aus.
-
Wählen Sie Drosseln aus.
-
Wählen Sie im Dialogfeld Funktion drosseln die Option Bestätigen aus.
So entfernen Sie einen Auslöser oder eine Zuordnung von Ereignisquellen für Ihre Funktion (Konsole)
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie den Namen Ihrer Funktion aus.
-
Wählen Sie die Registerkarte Konfiguration und anschließend Auslöser aus.
-
Wählen Sie unter Auslöser den Auslöser oder die Zuordnung von Ereignisquellen aus, den bzw. die Sie löschen möchten, und wählen Sie anschließend Löschen aus.
-
Wählen Sie im Dialogfeld Auslöser löschen die Option Löschen aus.
So deaktivieren Sie eine Zuordnung von Ereignisquellen für Ihre Funktion (AWS CLI)
-
Führen Sie den list-event-source-mappings
Befehl AWS Command Line Interface (AWS CLI) aus, um die Zuordnung UUID für die Ereignisquelle zu finden, die Sie deaktivieren möchten. aws lambda list-event-source-mappings
-
Führen Sie den folgenden AWS CLI update-event-source-mapping
Befehl aus, um die Zuordnung der Ereignisquellen zu deaktivieren. aws lambda update-event-source-mapping --function-name
MyFunction
\ --uuida1b2c3d4-5678-90ab-cdef-EXAMPLE11111
--no-enabled
Zulassen, dass eine Lambda-Funktion in einer rekursiven Schleife ausgeführt wird
Wenn Ihr Design absichtlich eine rekursive Schleife verwendet, können Sie eine Lambda-Funktion so konfigurieren, dass sie rekursiv aufgerufen werden kann. Wir empfehlen Ihnen, die Verwendung rekursiver Schleifen in Ihrem Design zu vermeiden. Implementierungsfehler können dazu führen, dass rekursive Aufrufe Ihre gesamte verfügbare Parallelität nutzen und dass Ihrem AWS-Konto Konto unerwartete Gebühren in Rechnung gestellt werden.
Wichtig
Wenn Sie rekursive Schleifen verwenden, sollten Sie diese mit Vorsicht behandeln. Implementieren Sie bewährte Leitplanken, um das Risiko von Implementierungsfehlern zu minimieren. Weitere Informationen zu bewährten Methoden für die Verwendung rekursiver Muster finden Sie unter Rekursive Muster, die zu außer Kontrolle geratenen Lambda-Funktionen in Serverless Land führen
Sie können Funktionen so konfigurieren, dass sie rekursive Schleifen zulassen, indem Sie die Lambda-Konsole, die AWS Command Line Interface (AWS CLI) und die verwenden. PutFunctionRecursionConfigAPI Sie können auch die Einstellung für die Erkennung rekursiver Schleifen einer Funktion in und konfigurieren. AWS SAM AWS CloudFormation
Standardmäßig erkennt und beendet Lambda rekursive Schleifen. Sofern Ihr Design nicht absichtlich eine rekursive Schleife verwendet, empfehlen wir, die Standardkonfiguration Ihrer Funktionen nicht zu ändern.
Beachten Sie, dass die CloudWatch Metrik RecursiveInvocationsDropped
nicht ausgegeben wird, wenn Sie eine Funktion so konfigurieren, dass sie rekursive Schleifen zulässt.
Sie können die Konfiguration Ihrer Funktion auf die Standardeinstellung zurücksetzen, sodass Lambda rekursive Schleifen beendet, wenn es sie erkennt. Bearbeiten Sie die Konfiguration Ihrer Funktion mit der Lambda-Konsole oder der AWS CLI.
Unterstützte Regionen für die rekursive Lambda-Schleifenerkennung
Die rekursive Lambda-Schleifenerkennung wird im Folgenden unterstützt. AWS-Regionen
-
USA Ost (Nord-Virginia)
-
USA Ost (Ohio)
-
USA West (Nordkalifornien)
-
USA West (Oregon)
-
Africa (Cape Town)
-
Asia Pacific (Hong Kong)
-
Asia Pacific (Mumbai)
-
Asia Pacific (Osaka)
-
Asia Pacific (Seoul)
-
Asien-Pazifik (Singapur)
-
Asien-Pazifik (Sydney)
-
Asien-Pazifik (Tokio)
-
Canada (Central)
-
Europe (Frankfurt)
-
Europa (Irland)
-
Europa (London)
-
Europa (Milan)
-
Europe (Paris)
-
Europe (Stockholm)
-
Middle East (Bahrain)
-
Südamerika (São Paulo)