Konfigurieren von Provisioned Concurrency - AWS Lambda

Konfigurieren von Provisioned Concurrency

In Lambda beschreibt Gleichzeitigkeit die Anzahl der Anfragen, die Ihre Funktion gleichzeitig verarbeiten kann. Es gibt zwei Arten von Gleichzeitigkeitskontrollen:

  • Reservierte Gleichzeitigkeit – Reservierte Gleichzeitigkeit garantiert die maximale Anzahl gleichzeitiger Instances für die Funktion. Wenn für eine Funktion Gleichzeitigkeit reserviert ist, kann keine andere Funktion diese Gleichzeitigkeit nutzen. Für die Konfiguration reservierter Gleichzeitigkeit für eine Funktion wird keine Gebühr erhoben.

  • Bereitgestellte Gleichzeitigkeit – Bereitgestellte Gleichzeitigkeit initialisiert eine angefragte Anzahl von Ausführungsumgebungen, damit sie sofort auf die Aufrufe Ihrer Funktion reagieren können. Beachten Sie, dass bei der Konfiguration der bereitgestellten Parallelität Gebühren für Ihr AWS-Konto anfallen.

In diesem Thema wird beschrieben, wie Sie bereitgestellte Gleichzeitigkeit verwalten und konfigurieren. Informationen zum Konfigurieren der reservierten Gleichzeitigkeit finden Sie unter Verwalten der reservierten Lambda-Gleichzeitigkeit.

Wenn Lambda eine Instance Ihrer Funktion zuweist, lädt die Laufzeit den Code Ihrer Funktion und führt Initialisierungscode aus, den Sie außerhalb des Handlers definieren. Wenn Code und Abhängigkeiten umfangreich sind oder Sie während der Initialisierung SDK-Clients erstellen, kann dieser Vorgang einige Zeit in Anspruch nehmen. Wenn Ihre Funktion seit einiger Zeit nicht verwendet wurde, skaliert werden muss oder wenn Sie eine Funktion aktualisieren, erstellt Lambda neue Ausführungsumgebungen. Dies führt dazu, dass der Teil der Anfragen, der von neuen Instanzen bedient wird, eine höhere Latenzzeit hat als der Rest, was auch als Kaltstart bezeichnet wird.

Wenn Sie Provisioned Concurrency (Bereitgestellte Gleichzeitigkeit) vor einer Erhöhung der Aufrufe zuweisen, können Sie sicherstellen, dass alle Anforderungen von initialisierten Instances mit geringer Latenz verarbeitet werden. Lambda-Funktionen, die mit bereitgestellter Parallelität konfiguriert sind, laufen mit konsistenter Start-Latenz, wodurch sie ideal für den Aufbau interaktiver Mobile- oder Web-Backends, latenzsensitive Microservices und synchron aufgerufene APIs sind.

Anmerkung

Die bereitgestellte Gleichzeitigkeit wird auf die reservierte Gleichzeitigkeit einer Funktion und die regionalen Quoten angerechnet. Wenn die Menge der bereitgestellten Gleichzeitigkeit für die Versionen und Aliase einer Funktion zur reservierten Gleichzeitigkeit der Funktion hinzukommt, werden alle Aufrufe mit bereitgestellter Gleichzeitigkeit ausgeführt. Diese Konfiguration hat auch zur Folge, dass die nicht veröffentlichte Version der Funktion ($LATEST) gedrosselt wird, was die Ausführung verhindert. Sie können nicht mehr bereitgestellte Gleichzeitigkeit als reservierte Gleichzeitigkeit für eine Funktion zuweisen.

Lambda lässt sich auch in Application Auto Scaling integrieren, sodass Sie die bereitgestellte Gleichzeitigkeit nach einem Zeitplan oder basierend auf der Nutzung verwalten können.

Unterschiede zwischen Lambda SnapStart und bereitgestellter Gleichzeitigkeit

Lambda SnapStart ist eine Leistungsoptimierung, mit der Sie die Startleistung für latenzempfindliche Anwendungen ohne zusätzliche Kosten um das bis zu 10-fache verbessern können. Die bereitgestellte Gleichzeitigkeit sorgt dafür, dass die Funktionen im zweistelligen Millisekundenbereich initialisiert und reaktionsbereit sind. Die Konfiguration von bereitgestellter Gleichzeitigkeit verursacht Gebühren für Ihre AWS-Konto. Verwenden Sie die bereitgestellte Gleichzeitigkeit, wenn Ihre Anwendung strenge Anforderungen an die Kaltstartlatenz hat. Sie können SnapStart und bereitgestellte Gleichzeitigkeit nicht in derselben Funktionsversion verwenden.

Konfigurieren von Provisioned Concurrency

Verwenden Sie die Lambda-Konsole, um die Einstellungen für die bereitgestellte Gleichzeitigkeit für eine Version oder einen Alias zu verwalten. Sie können Provisioned Concurrency für eine Version einer Funktion oder einen Alias konfigurieren.

Jede Version einer Funktion kann nur über eine Provisioned Concurrency-Konfiguration verfügen. Dies kann direkt in der Version selbst oder in einem Alias sein, der auf die Version verweist. Zwei Aliase können keine bereitgestellte Gleichzeitigkeit für dieselbe Version zuweisen.

Wenn Sie die Version ändern, auf die ein Alias verweist, hebt Lambda die Zuordnung der bereitgestellten Gleichzeitigkeit von der alten Version auf und ordnet sie der neuen Version zu. Sie können eine Routingkonfiguration zu einem Alias hinzufügen, für den Gleichzeitigkeit bereitgestellt wurde. Weitere Informationen finden Sie unter Aliase für Lambda-Funktionen. Beachten Sie, dass Sie die bereitgestellten Gleichzeitigkeitseinstellungen auf dem Alias nicht verwalten können, solange die Routing-Konfiguration vorhanden ist.

Anmerkung

Die bereitgestellte Gleichzeitigkeit wird in der unveröffentlichten Version der Funktion ($LATEST) nicht unterstützt. Stellen Sie sicher, dass Ihre Clientanwendung nicht auf $LATEST verweist, bevor Sie die bereitgestellte Parallelität konfigurieren.

So weisen Sie einem Alias oder einer Version bereitgestellte Parallelität zu
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie eine Funktion aus.

  3. Wählen Sie Konfiguration und anschließend Gleichzeitigkeit aus.

  4. Wählen Sie unter Provisioned concurrency configurations (Bereitgestellte Gleichzeitigkeitskonfigurationen) die Option Add (Hinzufügen) aus.

  5. Wählen Sie einen Alias oder eine Version aus.

  6. Geben Sie den Betrag der bereitgestellten Gleichzeitigkeit ein, die zugewiesen werden soll.

  7. Wählen Sie Save aus.

Sie können die bereitgestellte Gleichzeitigkeit auch mithilfe der Lambda-API mit den folgenden Vorgängen konfigurieren:

Um Provisioned Concurrency für eine Funktion zuzuweisen, verwenden Sie put-provisioned-concurrency-config. Der folgende Befehl weist eine Gleichzeitigkeit von 100 für den Alias BLUE einer Funktion namens my-function zu:

aws lambda put-provisioned-concurrency-config --function-name my-function \ --qualifier BLUE --provisioned-concurrent-executions 100

Die Ausgabe sollte folgendermaßen aussehen:

{ "Requested ProvisionedConcurrentExecutions": 100, "Allocated ProvisionedConcurrentExecutions": 0, "Status": "IN_PROGRESS", "LastModified": "2019-11-21T19:32:12+0000" }

Um die Gleichzeitigkeitskontingente Ihres Kontos in einer Region anzuzeigen, verwenden Sie get-account-settings.

aws lambda get-account-settings

Die Ausgabe sollte folgendermaßen aussehen:

{ "AccountLimit": { "TotalCodeSize": 80530636800, "CodeSizeUnzipped": 262144000, "CodeSizeZipped": 52428800, "ConcurrentExecutions": 1000, "UnreservedConcurrentExecutions": 900 }, "AccountUsage": { "TotalCodeSize": 174913095, "FunctionCount": 52 } }

Sie können Provisioned Concurrency für alle Aliase und Versionen über die Konfigurationsseite der Funktion verwalten. Die Liste der Provisioned Concurrency-Konfigurationen zeigt den Zuordnungsfortschritt jeder Konfiguration. Die Einstellungen für Provisioned Concurrency sind auch auf der Konfigurationsseite für jede Version und jeden Alias verfügbar.

Lambda gibt die folgenden Metriken für bereitgestellte Gleichzeitigkeit aus:

Metriken für Provisioned Concurrency
  • ProvisionedConcurrentExecutions – Die Anzahl der Funktions-Instances, die Ereignisse für bereitgestellte Gleichzeitigkeit verarbeiten. Für jeden Aufruf eines Alias oder einer Version mit Provisioned Concurrency gibt Lambda die aktuelle Anzahl aus.

  • ProvisionedConcurrencyInvocations – Gibt an, wie oft Ihr Funktionscode für bereitgestellte Gleichzeitigkeit ausgeführt wird.

  • ProvisionedConcurrencySpilloverInvocations – Gibt an, wie oft der Funktionscode für die Standardgleichzeitigkeit ausgeführt wird, wenn die gesamte bereitgestellte Gleichzeitigkeit verwendet wird.

  • ProvisionedConcurrencyUtilization – Bei einer Version oder einem Alias ist der Wert ProvisionedConcurrentExecutions dividiert durch die Gesamtmenge an zugewiesener bereitgestellter Gleichzeitigkeit. Zum Beispiel zeigt .5 an, dass 50 Prozent der zugewiesenen, bereitgestellten Gleichzeitigkeit genutzt werden.

Weitere Details finden Sie unter Arbeiten mit Lambda-Funktionsmetriken.

Optimierung der Latenz mit bereitgestellter Gleichzeitigkeit

Bereitgestellte Gleichzeitigkeit wird nicht sofort nach der Konfiguration online geschaltet. Lambda beginnt die Zuweisung bereitgestellter Gleichzeitigkeit nach ein oder zwei Minuten Vorbereitung. Ähnlich wie bei Funktionen, die unter Last skalieren, können je nach Region bis zu 3 000 Instances der Funktion gleichzeitig initialisiert werden. Nach der anfänglichen Steigerung werden Instances mit einer konstanten Rate von 500 pro Minute zugewiesen, bis die Anforderung erfüllt ist. Wenn Sie bereitgestellte Parallelität für mehrere Funktionen oder Versionen einer Funktion in derselben Region anfordern, gelten die Skalierungskontingente für alle Anforderungen.


                  Skalierung mit bereitgestellter Parallelität.
Legende
  • Funktions-Instances

  • Offene Anforderungen

  • Bereitgestellte Concurrency

  • Standard-Gleichzeitigkeit

Um die Latenz zu optimieren, können Sie das Initialisierungsverhalten für Funktionen anpassen, die bereitgestellte Gleichzeitigkeit verwenden. Sie können Initialisierungscode für bereitgestellte Gleichzeitigkeit-Instances ausführen, ohne die Latenz zu beeinträchtigen, da der Initialisierungscode zur Zuweisungszeit ausgeführt wird. Der Initialisierungscode für eine On-Demand-Instance wirkt sich jedoch direkt auf die Latenz des ersten Aufrufs aus. Bei einer On-Demand-Instance können Sie die Initialisierung für eine bestimmte Funktion verschieben, bis die Funktion diese Fähigkeit benötigt.

Um den Typ der Initialisierung zu bestimmen, überprüfen Sie den Wert von AWS_LAMBDA_INITIALIZATION_TYPE. Lambda setzt diese Umgebungsvariable auf provisioned-concurrency oder on-demand. Der Wert von AWS_LAMBDA_INITIALIZATION_TYPE ist unveränderlich und ändert sich während der Lebensdauer der Ausführungsumgebung nicht.

Wenn Sie die .NET 3.1-Laufzeitumgebung verwenden, können Sie die Umgebungsvariable AWS_LAMBDA_DOTNET_PREJIT konfigurieren, um die Latenz für Funktionen zu verbessern, die bereitgestellte Gleichzeitigkeit verwenden. Die .NET-Laufzeitumgebung kompiliert und initialisiert jede Bibliothek, die Ihr Code zum ersten Mal aufruft. Daher kann der erste Aufruf einer Lambda-Funktion länger dauern als nachfolgende Aufrufe. Wenn Sie AWS_LAMBDA_DOTNET_PREJIT auf ProvisionedConcurrency einstellen führt Lambda eine zeitliche JIT-Kompilierung für allgemeine Systemabhängigkeiten durch. Lambda führt diese Initialisierungsoptimierung nur für bereitgestellte Gleichzeitigkeit durch, was zu einer schnelleren Leistung beim ersten Aufruf führt. Wenn Sie die Umgebungsvariable auf Always einstellen, führt Lambda für jede Initialisierung eine zeitliche JIT-Kompilierung durch. Wenn Sie die Umgebungsvariable auf Never einstellen, ist die JIT-Kompilierung im Vorfeld der Zeit deaktiviert. Der Standardwert für AWS_LAMBDA_DOTNET_PREJIT ist ProvisionedConcurrency.

Für bereitgestellte Gleichzeitigkeits-Instances wird der Initialisierungscode Ihrer Funktion während der Zuordnung und alle paar Stunden ausgeführt, da laufende Instances Ihrer Funktion recycelt werden. Sie können die Initialisierungszeit in Protokollen und Ablaufverfolgungsdaten anzeigen, nachdem eine Instance eine Anforderung verarbeitet hat. Die Initialisierung wird jedoch auch dann abgerechnet, wenn die Instance niemals eine Anforderung verarbeitet. Die bereitgestellte Parallelität wird laufend ausgeführt und getrennt von den Initialisierungs- und Aufrufkosten in Rechnung gestellt. Weitere Details finden Sie unter AWS Lambda-Preise.

Weitere Details zur Optimierung von -Funktionen mit Provisioned Concurrency finden Sie imLambda-Betreiberführer.

Verwalten der bereitgestellten Gleichzeitigkeit mit Application Auto Scaling

Application Auto Scaling erlaubt Ihnen, dass die bereitgestellte Gleichzeitigkeit nach einem Zeitplan oder basierend auf der Auslastung verwaltet wird. Verwenden Sie eine Richtlinie für Target Tracking, wenn Ihre Funktion einen bestimmten Auslastungsprozentsatz beibehalten soll, und eine geplante Skalierung, um Provisioned Concurrency in Erwartung von Spitzenlasten zu erhöhen.

Zielverfolgung

Bei der Zielverfolgung erstellt und verwaltet Application Auto Scaling die CloudWatch-Alarme, die eine Skalierungsrichtlinie auslösen, und berechnet die Skalierungsanpassung auf der Grundlage einer von Ihnen definierten Metrik und eines Zielwerts. Dies ist ideal für Anwendungen, die keine geplante Zeit mit erhöhtem Datenverkehr haben, aber bestimmte Verkehrsmuster aufweisen.

Um die bereitgestellte Gleichzeitigkeit bei Bedarf automatisch zu erhöhen, verwenden Sie die API-Vorgänge RegisterScalableTarget und PutScalingPolicy zum Application Auto Scaling, um ein Ziel zu registrieren und eine Skalierungsrichtlinie zu erstellen:

  1. Registrieren Sie den Alias einer Funktion als Skalierungsziel. Im folgenden Beispiel wird der BLUE-Alias einer Funktion mit dem Namen my-function registriert:

    aws application-autoscaling register-scalable-target --service-namespace lambda \ --resource-id function:my-function:BLUE --min-capacity 1 --max-capacity 100 \ --scalable-dimension lambda:function:ProvisionedConcurrency
  2. Wenden Sie eine Skalierungsrichtlinie auf das Ziel an. Im folgenden Beispiel wird Application Auto Scaling so konfiguriert, dass die bereitgestellte Gleichzeitigkeit für einen Alias so angepasst wird, dass eine Auslastung von ca. 70 Prozent beibehalten wird.

    aws application-autoscaling put-scaling-policy --service-namespace lambda \ --scalable-dimension lambda:function:ProvisionedConcurrency --resource-id function:my-function:BLUE \ --policy-name my-policy --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 0.7, "PredefinedMetricSpecification": { "PredefinedMetricType": "LambdaProvisionedConcurrencyUtilization" }}'

    Die Ausgabe sollte folgendermaßen aussehen:

    { "PolicyARN": "arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:12266dbb-1524-xmpl-a64e-9a0a34b996fa:resource/lambda/function:my-function:BLUE:policyName/my-policy", "Alarms": [ { "AlarmName": "TargetTracking-function:my-function:BLUE-AlarmHigh-aed0e274-xmpl-40fe-8cba-2e78f000c0a7", "AlarmARN": "arn:aws:cloudwatch:us-east-2:123456789012:alarm:TargetTracking-function:my-function:BLUE-AlarmHigh-aed0e274-xmpl-40fe-8cba-2e78f000c0a7" }, { "AlarmName": "TargetTracking-function:my-function:BLUE-AlarmLow-7e1a928e-xmpl-4d2b-8c01-782321bc6f66", "AlarmARN": "arn:aws:cloudwatch:us-east-2:123456789012:alarm:TargetTracking-function:my-function:BLUE-AlarmLow-7e1a928e-xmpl-4d2b-8c01-782321bc6f66" } ] }

Application Auto Scaling erstellt zwei Alarme in CloudWatch. Der erste Alarm wird ausgelöst, wenn die Auslastung der bereitgestellten Gleichzeitigkeit ständig 70 Prozent überschreitet. In diesem Fall weist Application Auto Scaling mehr bereitgestellte Gleichzeitigkeit zu, um die Auslastung zu reduzieren. Der zweite Alarm wird ausgelöst, wenn die Auslastung konstant unter 63 Prozent (90 Prozent des 70-Prozent-Ziels) liegt. In diesem Fall reduziert Application Auto Scaling wird die bereitgestellte Gleichzeitigkeit des Alias.

Im folgenden Beispiel skaliert eine Funktion basierend auf der Auslastung zwischen einem minimalen und einem maximalen Umfang bereitgestellter Gleichzeitigkeit. Wenn die Anzahl der offenen Anforderungen zunimmt, erhöht Application Auto Scaling die bereitgestellte Gleichzeitigkeit in großen Schritten, bis sie das konfigurierte Maximum erreicht. Die Funktion wird weiterhin auf Standard-Gleichzeitigkeit skaliert, bis die Auslastung abfällt. Wenn die Auslastung konstant niedrig ist, verringert Application Auto Scaling die bereitgestellte Gleichzeitigkeit in kleineren periodischen Schritten.


                    Automatische Skalierung bereitgestellter Gleichzeitigkeit mit der Zielverfolgung von Application Auto Scaling
Legende
  • Funktions-Instances

  • Offene Anforderungen

  • Bereitgestellte Concurrency

  • Standard-Gleichzeitigkeit

Beide Alarme verwenden dieDurchschnittStandardmäßig statistik. Funktionen, die Verkehrsmuster von schnellen Bursts aufweisen, führen möglicherweise nicht dazu, dass Ihre bereitgestellte Parallelität skaliert wird. Wenn Ihre Lambda-Funktion beispielsweise schnell ausgeführt wird (20—100 ms) und Ihr Datenverkehrsmuster schnell ausbricht, kann dies dazu führen, dass eingehende Anfragen Ihre zugewiesene bereitgestellte Parallelität während des Bursts überschreiten, aber wenn der Burst nicht 3 Minuten dauert, wird die automatische Skalierung nicht ausgelöst. Wenn CloudWatch nicht drei Datenpunkte erhält, die den Zieldurchschnitt erreichen, wird die Richtlinie zur automatischen Skalierung nicht ausgelöst.

Weitere Informationen zu Zielverfolgungs-Skalierungsrichtlinien finden Sie unter Zielverfolgungs-Skalierungsrichtlinien für das Application Auto Scaling.

Geplante Skalierung

Die Skalierung nach einem Zeitplan ermöglicht es Ihnen, Ihren eigenen Skalierungsplan entsprechend vorhersehbarer Laständerungen festzulegen. Weitere Informationen und Beispiele finden Sie unter Planen von AWS Lambda Bereitgestellte Gleichzeitigkeit für wiederkehrende Spitzenauslastung.