

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.

# Lebenszyklus der Ausführungsumgebung
<a name="web-functions-env-lifecycle"></a>

Eine Ausführungsumgebung ist eine isolierte Recheninstanz, auf der Ihr HTTP-Server ausgeführt wird. AWS Lambda erstellt Ausführungsumgebungen für Ihre Lambda-Webfunktion, wenn der Datenverkehr eingeht. Es leitet Anfragen an aktive Umgebungen weiter und entfernt Umgebungen, die nicht mehr benötigt werden. Wenn Sie diesen Lebenszyklus verstehen, können Sie die Startleistung optimieren und Code schreiben, der das Initialisieren und Herunterfahren korrekt handhabt.

## Lebenszyklusphasen
<a name="web-functions-env-lifecycle-phases"></a>

Jede Ausführungsumgebung durchläuft die folgenden Phasen:

![Die drei Phasen der Ausführungsumgebung: Initialisieren, Bereit und Herunterfahren.](https://docs.aws.amazon.com/de_de/lambda/latest/dg/images/web-functions-environment-lifecycle.png)



| Phase | Was passiert | Bearbeitung von Anfragen | 
| --- | --- | --- | 
| Initialisierung | Lambda lädt Ihren Code, bereitet die Laufzeit vor und startet Ihren HTTP-Serverprozess. Ihr Server muss AWS\_LAMBDA\_HTTP\_ENDPOINT innerhalb von 10 Sekunden beginnen, die Adresse abzuhören. | Die Umgebung kann während der Initialisierung keine Anfragen bearbeiten. | 
| Bereit | Ihr HTTP-Server hört zu und die Umgebung ist für den Empfang von Anfragen verfügbar. Lambda leitet eingehende Anfragen an diese Umgebung weiter. | Die Umgebung akzeptiert Anfragen bis zum maxConcurrencyPerEnvironment Limit. | 
| Herunterfahren | Lambda beendet die Weiterleitung neuer Anfragen an die Umgebung, lässt laufende Anfragen nach bestem Wissen und Gewissen beendenSIGTERM, sendet und beendet dann die Umgebung. | Es werden keine neuen Anfragen an die Umgebung weitergeleitet. In-flight Anfragen können fortgesetzt werden, der Abschluss ist jedoch nicht garantiert. SIGTERMDanach hat der Vorgang bis zu 1 Sekunde Zeit, um die Bereinigung abzuschließen. Der Prozessstatus ist verloren gegangen. | 

## Initialisierung (Kaltstart)
<a name="web-functions-env-lifecycle-init"></a>

Wenn Lambda eine neue Ausführungsumgebung erstellt, umfasst die Initialisierungsphase die folgenden Schritte:

1. Lambda lädt den Code aus Ihrem ZIP-Bereitstellungspaket.

1. Lambda richtet die Laufzeitumgebung ein (einschließlich Node.js Ihrer Umgebungsvariablen).

1. Lambda startet Ihren Bewerbungsprozess.

1. Ihr HTTP-Server beginnt, auf dem Host und Port zu lauschen, die in der `AWS_LAMBDA_HTTP_ENDPOINT` Umgebungsvariablen angegeben sind. Er muss innerhalb von 10 Sekunden mit dem Abhören beginnen.

1. Lambda erkennt, dass Ihr Server zuhört, und markiert die Umgebung als bereit.

Ein Kaltstart tritt auf, wenn Lambda eine neue Umgebung erstellen muss, um eine Anfrage zu bearbeiten, da keine Umgebungen verfügbar sind. Bei der ersten Anfrage nach einem Kaltstart kommt es in der Initialisierungsphase zu zusätzlicher Latenz. Bei nachfolgenden Anfragen an dieselbe Umgebung fallen diese Kosten nicht an.

Um die Auswirkungen des Kaltstarts zu reduzieren:
+ Minimieren Sie die Größe Ihres Bereitstellungspakets. Kleinere Pakete werden schneller geladen.
+ Reduzieren Sie die Serverstartzeit. Verschieben Sie umfangreiche Initialisierungen (z. B. das Laden großer Datendateien) auf die Zeit, nachdem der Server mit der Überwachung begonnen hat. Lambda leitet Anfragen an die Umgebung weiter, sobald der Server zuhört. Lassen Sie also Anforderungshandler, die von der verzögerten Arbeit abhängen, warten, bis sie abgeschlossen ist, indem sie beispielsweise auf ein gemeinsames Versprechen warten.
+ Verwenden Sie die verzögerte Initialisierung für Datenbankverbindungen und externe Service-Clients. Stellen Sie Verbindungen bei der ersten Anfrage und nicht beim Start her.

## Scale-down und Herunterfahren
<a name="web-functions-env-lifecycle-shutdown"></a>

Lambda überwacht die Umgebungsauslastung Ihres Endgeräts und entfernt nicht benötigte Umgebungen, z. B. wenn der Traffic abnimmt. Vor dem Entfernen einer Umgebung verwendet Lambda die folgende Shutdown-Sequenz:

1. Lambda beendet die Weiterleitung neuer Anfragen an die Umgebung.

1. Lambda ermöglicht es, Anfragen während des Fluges nach bestem Wissen und Gewissen zu bearbeiten.

1. Lambda sendet`SIGTERM`. Der Vorgang hat bis zu 1 Sekunde Zeit, um die Bereinigung abzuschließen, bevor Lambda ihn beendet und die Umgebung entfernt.

Wenn kein Verkehr vorhanden ist, skaliert Lambda Ihre Webfunktion auf Umgebungen ohne. Die nächste Anfrage nach einer Phase der Skalierung auf Null löst einen neuen Kaltstart aus.

Wenn Ihre Anwendung während des Herunterfahrens eine Bereinigung durchführen muss, tun Sie das. `SIGTERM` Die Bereinigung muss innerhalb von 1 Sekunde abgeschlossen sein. Verlassen Sie sich nicht darauf, dass Shutdown-Callbacks ausgeführt werden, da Lambda nicht in allen Fehlermodi, z. B. bei einem zugrunde liegenden Hardwarefehler, ein ordnungsgemäßes Herunterfahren garantieren kann.

Das folgende Beispiel behandelt: `SIGTERM`

```
process.on('SIGTERM', () => {
  // Finish short cleanup, such as flushing buffered logs, within 1 second.
  process.exit(0);
});
```

## Wiederverwendung der Umgebung
<a name="web-functions-env-lifecycle-reuse"></a>

Lambda verwendet Ausführungsumgebungen für mehrere Anfragen wieder, um wiederholte Kaltstarts zu vermeiden. Eine einzelne Umgebung kann während ihrer Lebensdauer Tausende von Anfragen bearbeiten. Das bedeutet Folgendes:
+ **Globaler Status bleibt bestehen** — Variablen, Caches und Verbindungen, die Ihr Server beim Start initialisiert, bleiben auch bei allen Anfragen bestehen. Sie können dies für In-Memory-Caching oder Verbindungspooling verwenden.
+ **Dateisystemstatus bleibt bestehen** — Dateien, die Ihr Code in das lokale Dateisystem schreibt (z. B.`/tmp`), bleiben bestehen, bis Lambda die Umgebung entfernt.
+ **Keine garantierte Lebensdauer** — Lambda kann eine Umgebung jederzeit entfernen. Verlassen Sie sich nicht auf eine Umgebung, die über einen bestimmten Zeitraum andauert. Speichern Sie wichtige Daten in einem externen Speicher wie DynamoDB oder Amazon S3.

## Gleichzeitige Bearbeitung von Anfragen
<a name="web-functions-env-lifecycle-concurrency"></a>

Jede Ausführungsumgebung für Webfunktionen verarbeitet mehrere gleichzeitige HTTP-Anfragen. Die `maxConcurrencyPerEnvironment` Einstellung in der Revision steuert die maximale Anzahl gleichzeitiger Anfragen pro Umgebung.

Da Ihr Server mehrere Anfragen gleichzeitig verarbeitet, muss Ihr Code für die gleichzeitige Verwendung sicher sein:
+ Speichern Sie den Status pro Anfrage nicht in globalen Variablen. Verwenden Sie stattdessen Variablen mit Anforderungsbereich oder einen Middleware-Kontext.
+ Schützt gemeinsam genutzte veränderbare Zustände wie Caches oder Zähler, die Sie grenzübergreifend ändern. `await` Anfragen verschachteln sich in der Ereignisschleife. Wenn sich eine Sequenz mit Lesen, Ändern und Schreiben über einen asynchronen Vorgang erstreckt, kann eine weitere aktive Anforderung den Status lesen oder ändern, bevor die Sequenz abgeschlossen ist.
+ Beachten Sie, dass dabei eine Ereignisschleife mit einem einzigen Thread verwendet wird. Node.js CPU-intensive synchrone Operationen blockieren alle gleichzeitigen Anfragen in dieser Umgebung. Verwenden Sie asynchron I/O und vermeiden Sie es, die Ereignisschleife zu blockieren.

Weitere Informationen zu Parallelitätseinstellungen und Optimierung finden Sie unter. [Skalierungsverhalten für Lambda Web Functions](web-functions-scaling.md)