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 das AWS FIS aws:lambda:function Aktionen
Sie können die Aktionen aws:lambda:function verwenden, um Fehler in Aufrufe Ihrer Funktionen einzufügen. AWS Lambda
Diese Aktionen verwenden eine verwaltete Erweiterung, um Fehler einzufügen. AWS FIS Um aws:lambda:function-Aktionen verwenden zu können, müssen Sie die Erweiterung als Ebene an Ihre Lambda-Funktionen anhängen und einen Amazon S3-Bucket für die Kommunikation zwischen und der Erweiterung konfigurieren. AWS FIS
Wenn Sie ein AWS FIS Experiment ausführen, das auf aws:lambda:function abzielt, AWS FIS liest die Amazon S3-Konfiguration aus Ihrer Lambda-Funktion und schreibt Informationen zur Fehlerinjektion an den angegebenen Amazon S3-Speicherort, wie in der folgenden Abbildung dargestellt.
Aktionen
Einschränkungen
Die AWS FIS Lambda-Erweiterung kann nicht mit Funktionen verwendet werden, die Antwortstreaming verwenden. Selbst wenn keine Fehler auftreten, unterdrückt die AWS FIS Lambda-Erweiterung Streaming-Konfigurationen. Weitere Informationen finden Sie im AWS Lambda Benutzerhandbuch unter Response-Streaming für Lambda-Funktionen.
Voraussetzungen
Bevor Sie AWS FIS Lambda-Aktionen verwenden, stellen Sie sicher, dass Sie diese einmaligen Aufgaben abgeschlossen haben:
Erstellen Sie einen Amazon S3-Bucket in der Region, in der Sie ein Experiment starten möchten — Sie können einen einzelnen Amazon S3-Bucket für mehrere Experimente verwenden und den Bucket auf mehrere AWS Konten teilen. Sie müssen jedoch für jeden einen eigenen Bucket haben AWS-Region.
Erstellen Sie eine IAM-Richtlinie, um Lesezugriff für die Lambda-Erweiterung auf den Amazon S3-Bucket zu gewähren.
my-config-distribution-bucketErsetzen Sie die Vorlage in der folgenden Vorlage durch den Namen des Amazon S3-Buckets, den Sie oben erstellt haben, undFisConfigsdurch den Namen eines Ordners in Ihrem Amazon S3-Bucket, den Sie verwenden möchten.Erstellen Sie eine IAM-Richtlinie, um dem Amazon S3-Bucket Schreibzugriff für das AWS FIS Experiment zu gewähren ‐
my-config-distribution-bucketErsetzen Sie in der folgenden Vorlage durch den Namen des Amazon S3-Buckets, den Sie oben erstellt haben, undFisConfigsdurch den Namen eines Ordners in Ihrem Amazon S3-Bucket, den Sie verwenden möchten.
Konfigurieren von Lambda-Funktionen
Folgen Sie den folgenden Schritten für jede Lambda-Funktion, die Sie beeinflussen möchten:
-
Hängen Sie die oben erstellte Amazon S3-Lesezugriffsrichtlinie an die Lambda-Funktion an.
-
Hängen Sie die AWS FIS Erweiterung als Ebene an die Funktion an. Weitere Informationen zu den Layer-ARNs finden Sie unterVerfügbare Versionen von AWS FIS Erweiterung für Lambda.
-
Stellen Sie die
AWS_FIS_CONFIGURATION_LOCATIONVariable beispielsweisearn:aws:s3:::my-config-distribution-bucket/FisConfigs/auf den ARN des Amazon S3-Konfigurationsordners ein. -
Setzen Sie die Variable
AWS_LAMBDA_EXEC_WRAPPERauf/opt/aws-fis/bootstrap.
Konfigurieren Sie eine AWS FIS Experiment
Stellen Sie vor der Durchführung Ihres Experiments sicher, dass Sie die Amazon S3-Schreibzugriffsrichtlinie, die Sie in den Voraussetzungen erstellt haben, an die Testrollen angehängt haben, die AWS FIS Lambda-Aktionen verwenden werden. Weitere Informationen zur Einrichtung eines AWS FIS Experiments finden Sie unterVerwaltung von AWS FIS-Experimentvorlagen.
Protokollierung
Die AWS FIS Lambda-Erweiterung schreibt Protokolle in die Konsole und CloudWatch protokolliert sie. Die Protokollierung kann mithilfe der AWS_FIS_LOG_LEVEL Variablen konfiguriert werden. Unterstützte Werte sind INFO, WARN und ERROR. Die Protokolle werden in dem für Ihre Lambda-Funktion konfigurierten Protokollformat geschrieben.
Das Folgende ist ein Beispiel für ein Login-Textformat:
2024-08-09T18:51:38.599984Z INFO AWS FIS EXTENSION - extension enabled 1.0.1
Das Folgende ist ein Beispiel für ein Protokoll im JSON-Format:
{ "timestamp": "2024-10-08T17:15:36.953905Z", "level": "INFO", "fields": { "message": "AWS FIS EXTENSION - adding 5000 milliseconds of latency to function invocation", "requestId":"0608bf70-908f-4a17-bbfe-3782cd783d8b" } }
Die ausgegebenen Protokolle können mit CloudWatch Amazon-Metrikfiltern verwendet werden, um benutzerdefinierte Metriken zu generieren. Weitere Informationen zu Metrikfiltern finden Sie unter Erstellen von Metriken aus Protokollereignissen mithilfe von Filtern im Amazon CloudWatch Logs-Benutzerhandbuch.
Verwenden des CloudWatch Embedded Metric Format (EMF)
Sie können die AWS FIS Lambda-Erweiterung für die Ausgabe von EMF-Protokollen konfigurieren, indem Sie die Variable auf AWS_FIS_EXTENSION_METRICS setzen. all Standardmäßig gibt die Erweiterung keine EMF-Protokolle aus und AWS_FIS_EXTENSION_METRICS ist standardmäßig auf. none EMF-Protokolle werden in der aws-fis-extension namespace auf der Konsole veröffentlicht. CloudWatch
Im aws-fis-extension Namespace können Sie bestimmte Metriken auswählen, die in einem Diagramm angezeigt werden sollen. Das folgende Beispiel zeigt einige der verfügbaren Metriken im aws-fis-extension Namespace.
Fortschrittliche Themen
Dieser Abschnitt enthält zusätzliche Informationen zur AWS FIS Funktionsweise der Lambda-Erweiterung und zu speziellen Anwendungsfällen.
Grundlegendes zur Umfrage
Möglicherweise stellen Sie eine Anlaufzeit von bis zu 60 Sekunden fest, bevor sich Fehler auf alle Aufrufe auswirken. Dies liegt daran, dass die Lambda-Erweiterung selten nach Konfigurationsinformationen fragt, während sie auf den Start eines Experiments wartet. Sie können das Abfrageintervall anpassen, indem Sie die AWS_FIS_SLOW_POLL_INTERVAL_SECONDS Umgebungsvariable setzen (Standard 60s). Ein niedrigerer Wert führt zwar häufiger zu Abfragen, hat aber größere Auswirkungen auf die Leistung und verursacht höhere Kosten. Möglicherweise stellen Sie auch fest, dass nach dem Auftreten des Fehlers eine Anlaufzeit von bis zu 20 Sekunden anhält. Dies liegt daran, dass die Erweiterung während der Ausführung von Experimenten häufiger Abfragen durchführt.
Parallelität verstehen
Sie können dieselben Lambda-Funktionen mit mehreren Aktionen gleichzeitig als Ziel verwenden. Wenn sich die Aktionen alle voneinander unterscheiden, werden alle Aktionen angewendet. Sie können beispielsweise eine anfängliche Verzögerung hinzufügen, bevor ein Fehler zurückgegeben wird. Wenn zwei identische oder widersprüchliche Aktionen auf dieselbe Funktion angewendet werden, wird nur die Aktion mit dem frühesten Startdatum angewendet.
Die folgende Abbildung zeigt zwei widersprüchliche Aktionen, aws:lambda:invocation-error und aws:lambda:invocation-http-integration-response, die sich überschneiden. Anfangs wird aws:lambda:invocation-error um 11:38 Uhr hochgefahren und 2 Minuten lang ausgeführt. Dann versucht aws:lambda:invocation-http-integration-response, um 11:39 Uhr zu beginnen, wird aber erst um 11:40 Uhr nach Abschluss der ersten Aktion wirksam. Um den zeitlichen Ablauf des Experiments beizubehalten, endet aws:lambda:invocation-http-integration-response immer noch zur ursprünglich vorgesehenen Zeit von 11:41 Uhr.
Grundlegendes zum Prozentsatz der Aufrufe
Die AWS Fault Injection Service Lambda-Aktionen verwenden ein aws:lambda:function -Ziel, mit dem Sie eine oder mehrere Funktions-ARNs auswählen können. AWS Lambda Mithilfe dieser ARNs können die AWS Fault Injection Service Lambda-Aktionen bei jedem Aufruf der ausgewählten Lambda-Funktion Fehler auslösen. Damit Sie Fehler nur in einen Bruchteil der Aufrufe einfügen können, können Sie für jede Aktion einen invocationPercentage Parameter mit Werten zwischen 0 und 100 angeben. Mithilfe des invocationPercentage Parameters können Sie sicherstellen, dass Aktionen auch bei Aufrufen unter 100% gleichzeitig ausgeführt werden.
Besondere Überlegungen für SnapStart
AWS Lambda Bei Funktionen, die SnapStart aktiviert sind, ist die Wahrscheinlichkeit höher, dass AWS_FIS_SLOW_POLL_INTERVAL_SECONDS sie über die gesamte Dauer warten, bis die erste Fehlerkonfiguration abgerufen wird, selbst wenn bereits ein Experiment läuft. Dies liegt daran, dass Lambda einen einzelnen Snapshot als Ausgangszustand für mehrere Ausführungsumgebungen SnapStart verwendet und temporären Speicher beibehält. Für die AWS Fault Injection Service Lambda-Erweiterung wird die Abruffrequenz beibehalten und die Überprüfung der Erstkonfiguration bei der Initialisierung der Ausführungsumgebung übersprungen. Weitere Informationen zu Lambda SnapStart finden Sie im Benutzerhandbuch unter Verbessern der Startleistung mit SnapStart Lambda. AWS Lambda
Besondere Überlegungen für schnelle, seltene Funktionen
Wenn Ihre Lambda-Funktion weniger als die durchschnittliche Abfragedauer von 70 Millisekunden dauert, benötigt der Polling-Thread möglicherweise mehrere Aufrufe, um Fehlerkonfigurationen abzurufen. Wenn die Funktion selten ausgeführt wird, z. B. einmal alle 15 Minuten, wird die Umfrage nie abgeschlossen. Stellen Sie den Parameter ein, um sicherzustellen, dass der Polling-Thread beendet werden kann. AWS_FIS_POLL_MAX_WAIT_MILLISECONDS Die Erweiterung wartet bis zu der von Ihnen festgelegten Dauer, bis eine Umfrage während des Fluges abgeschlossen ist, bevor die Funktion gestartet wird. Beachten Sie, dass dies die Dauer der abgerechneten Funktion verlängert und bei einigen Aufrufen zu einer zusätzlichen Verzögerung führt.
Konfiguration mehrerer Erweiterungen mit dem Lambda Runtime API-Proxy
Die Lambda-Erweiterung verwendet den AWS Lambda Runtime-API-Proxy, um Funktionsaufrufe abzufangen, bevor sie die Laufzeit erreichen. Dazu wird der Runtime ein Proxy für die AWS Lambda Runtime-API zur Verfügung gestellt und sein Standort in der Variablen bekannt gegeben. AWS_LAMBDA_RUNTIME_API
Das folgende Diagramm zeigt die Konfiguration für eine einzelne Erweiterung unter Verwendung des Lambda Runtime API-Proxys:
Um die AWS FIS Lambda-Erweiterung mit einer anderen Erweiterung zu verwenden, die das AWS Lambda Runtime-API-Proxymuster verwendet, müssen Sie die Proxys mithilfe eines benutzerdefinierten Bootstrap-Skripts verketten. Die AWS FIS Lambda-Erweiterung akzeptiert die folgenden Umgebungsvariablen:
AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Nimmt eine Zeichenfolge in der Form an, die die lokale IP und den Listener-Port für die AWS Lambda Runtime-API127.0.0.1:9876darstellt. Dies könnte der ursprüngliche WertAWS_LAMBDA_RUNTIME_APIoder der Standort eines anderen Proxys sein.AWS_FIS_PROXY_LISTENER_PORT‐ Nimmt standardmäßig eine Portnummer an, auf der die AWS FIS Erweiterung ihren eigenen Proxy starten soll9100.
Mit diesen Einstellungen können Sie die AWS FIS Erweiterung mithilfe des Lambda-Runtime-API-Proxys in zwei verschiedenen Reihenfolgen mit einer anderen Erweiterung verketten.
Weitere Informationen zum AWS Lambda Runtime-API-Proxy finden Sie unter Verbesserung der Laufzeitsicherheit und -steuerung mit der AWS Lambda Runtime-API-Proxyerweiterung
Verwenden AWS FIS mit Container-Laufzeiten
Für AWS Lambda Funktionen, die Container-Images verwenden, die die AWS_LAMBDA_RUNTIME_API Umgebungsvariable akzeptieren, können Sie die AWS FIS Lambda-Erweiterung in Ihr Container-Image packen, indem Sie die folgenden Schritte ausführen:
Ermitteln Sie den ARN der Ebene, aus der die Erweiterung extrahiert werden soll. Weitere Informationen zum Auffinden des ARN finden Sie unterKonfigurieren von Lambda-Funktionen.
Verwenden Sie die AWS Command Line Interface (CLI), um Details zur Erweiterung anzufordern
aws lambda get-layer-version-by-arn --arn fis-extension-arn. Die Antwort enthält einLocationFeld mit einer vorsignierten URL, von der Sie die FIS-Erweiterung als ZIP-Datei herunterladen können.Entpacken Sie den Inhalt der Erweiterung in Ihr
/optDocker-Dateisystem. Das Folgende ist ein Beispiel für eine Docker-Datei, die auf der NodeJS-Lambda-Laufzeit basiert:# extension installation # FROM amazon/aws-lambda-nodejs:12 AS builder COPY extension.zip extension.zip RUN yum install -y unzip RUN mkdir -p /opt RUN unzip extension.zip -d /opt RUN rm -f extension.zip FROM amazon/aws-lambda-nodejs:12 WORKDIR /opt COPY --from=builder /opt . # extension installation finished # # JS example. Modify as required by your runtime WORKDIR ${LAMBDA_TASK_ROOT} COPY index.js package.json . RUN npm install CMD [ "index.handler" ]
Weitere Informationen zu Container-Images finden Sie im Benutzerhandbuch unter Erstellen einer Lambda-Funktion mithilfe eines Container-Images. AWS Lambda
AWS FIS Lambda-Umgebungsvariablen
Im Folgenden finden Sie eine Liste von Umgebungsvariablen für die AWS FIS Lambda-Erweiterung
AWS_FIS_CONFIGURATION_LOCATION‐ Erforderlich. Ort, an den aktive Fehlerkonfigurationen geschrieben AWS FIS werden und die Erweiterung Fehlerkonfigurationen liest. Die Standorte sollten im Amazon S3-ARN-Format vorliegen, einschließlich eines Buckets und eines Pfads. Beispiel,arn:aws:s3:::my-fis-config-bucket/FisConfigs/.AWS_LAMBDA_EXEC_WRAPPER‐ Erforderlich. Speicherort des AWS Lambda Wrapper-Skripts, das zur Konfiguration der AWS FIS Lambda-Erweiterung verwendet wird. Dies sollte auf das/opt/aws-fis/bootstrapSkript gesetzt werden, das in der Erweiterung enthalten ist.AWS_FIS_LOG_LEVEL‐ Fakultativ. Protokollebene für Nachrichten, die von der AWS FIS Lambda-Erweiterung ausgegeben werden. Unterstützte Werte sindINFO,WARNundERROR. Wenn nicht gesetzt, wird die AWS FIS Erweiterung standardmäßig aufINFOgesetzt.AWS_FIS_EXTENSION_METRICS‐ Fakultativ. Mögliche Werte sindallundnone. Wenn diese Option aktiviertallist, werden EMF-Metriken unter demaws-fis-extension namespaceausgegeben.AWS_FIS_SLOW_POLL_INTERVAL_SECONDS‐ Fakultativ. Wenn diese Option gesetzt ist, wird das Abfrageintervall (in Sekunden) außer Kraft gesetzt, solange die Erweiterung keine Fehler eingibt und darauf wartet, dass eine Fehlerkonfiguration zum Konfigurationsspeicherort hinzugefügt wird. Standardeinstellung:60.AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Fakultativ. Wenn gesetzt, wird der Wert von überschriebenAWS_LAMBDA_RUNTIME_API, um zu definieren, wo die AWS FIS Erweiterung mit der AWS Lambda Runtime-API interagiert, um den Funktionsaufruf zu steuern. IP:PORTErwartet zum Beispiel.127.0.0.1:9000Weitere Informationen dazu finden Sie imAWS_LAMBDA_RUNTIME_APIAWS Lambda Benutzerhandbuch unter Verwenden der Lambda-Laufzeit-API für benutzerdefinierte Laufzeiten.AWS_FIS_PROXY_LISTENER_PORT‐ Fakultativ. Definiert den Port, auf dem die AWS FIS Lambda-Erweiterung einen AWS Lambda Runtime-API-Proxy bereitstellt, der von einer anderen Erweiterung oder der Runtime verwendet werden kann. Standardeinstellung:9100.AWS_FIS_POLL_MAX_WAIT_MILLISECONDS‐ Fakultativ. Wenn diese Variable auf einen Wert ungleich Null gesetzt ist, definiert sie die Anzahl der Millisekunden, die die Erweiterung auf den Abschluss einer asynchronen Abfrage während des Fluges wartet, bevor die Fehlerkonfigurationen ausgewertet und der Aufruf der Laufzeit gestartet wird. Standardeinstellung:0. WennpreventExecutionSie set totruein deraws:lambda:invocation-errorAktion verwenden, empfehlen wir, diese Variable auf mindestens2000(2 Sekunden) zu setzen, um sicherzustellen, dass die Erweiterung über eine aktuelle Fehlerkonfiguration verfügt, bevor entschieden wird, ob die Funktionsausführung blockiert werden soll.