View a markdown version of this page

Verwenden Sie das AWS FIS aws:lambda:function Aktionen - AWS Service zur Fehlerinjektion

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.

Diagramm, das die Konfiguration der Lambda-Erweiterung zeigt. AWS Fault Injection Service

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-bucket Ersetzen Sie die Vorlage in der folgenden Vorlage durch den Namen des Amazon S3-Buckets, den Sie oben erstellt haben, und FisConfigs durch den Namen eines Ordners in Ihrem Amazon S3-Bucket, den Sie verwenden möchten.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowListingConfigLocation", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::my-config-distribution-bucket"], "Condition": { "StringLike": { "s3:prefix": ["FisConfigs/*"] } } }, { "Sid": "AllowReadingObjectFromConfigLocation", "Effect": "Allow", "Action": "s3:GetObject", "Resource": ["arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*"] } ] }
  • Erstellen Sie eine IAM-Richtlinie, um dem Amazon S3-Bucket Schreibzugriff für das AWS FIS Experiment zu gewähren my-config-distribution-bucket Ersetzen Sie in der folgenden Vorlage durch den Namen des Amazon S3-Buckets, den Sie oben erstellt haben, und FisConfigs durch den Namen eines Ordners in Ihrem Amazon S3-Bucket, den Sie verwenden möchten.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowFisToWriteAndDeleteFaultConfigurations", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*" }, { "Sid": "AllowFisToInspectLambdaFunctions", "Effect": "Allow", "Action": [ "lambda:GetFunction" ], "Resource": "*" }, { "Sid": "AllowFisToDoTagLookups", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" } ] }

Konfigurieren von Lambda-Funktionen

Folgen Sie den folgenden Schritten für jede Lambda-Funktion, die Sie beeinflussen möchten:

  1. Hängen Sie die oben erstellte Amazon S3-Lesezugriffsrichtlinie an die Lambda-Funktion an.

  2. 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.

  3. Stellen Sie die AWS_FIS_CONFIGURATION_LOCATION Variable beispielsweise arn:aws:s3:::my-config-distribution-bucket/FisConfigs/ auf den ARN des Amazon S3-Konfigurationsordners ein.

  4. Setzen Sie die Variable AWS_LAMBDA_EXEC_WRAPPER auf /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.

Beispieldiagramm der EMF-Ausgabe-Metriken im CloudWatch Dashboard.

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.

Fehler- und Antwortcodediagramme, die zwei Aktionen zeigen, die sich von 11:38 bis 11:41 auf x86 und Arm überschneiden.

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:

Die Standardkonfiguration.

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-API 127.0.0.1:9876 darstellt. Dies könnte der ursprüngliche Wert AWS_LAMBDA_RUNTIME_API oder 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.

Zwei verkettete Erweiterungen, die den Lambda-API-Proxy verwenden.

Weitere Informationen zum AWS Lambda Runtime-API-Proxy finden Sie unter Verbesserung der Laufzeitsicherheit und -steuerung mit der AWS Lambda Runtime-API-Proxyerweiterung und Verwenden der Lambda-Laufzeit-API für benutzerdefinierte Laufzeiten im Benutzerhandbuch. AWS Lambda

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:

  1. 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.

  2. Verwenden Sie die AWS Command Line Interface (CLI), um Details zur Erweiterung anzufordernaws lambda get-layer-version-by-arn --arn fis-extension-arn. Die Antwort enthält ein Location Feld mit einer vorsignierten URL, von der Sie die FIS-Erweiterung als ZIP-Datei herunterladen können.

  3. Entpacken Sie den Inhalt der Erweiterung in Ihr /opt Docker-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/bootstrap Skript 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 sind INFO, WARN und ERROR. Wenn nicht gesetzt, wird die AWS FIS Erweiterung standardmäßig auf INFO gesetzt.

  • AWS_FIS_EXTENSION_METRICS‐ Fakultativ. Mögliche Werte sind all und none. Wenn diese Option aktiviert all ist, werden EMF-Metriken unter dem aws-fis-extension namespace ausgegeben.

  • 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:9000 Weitere Informationen dazu finden Sie im AWS_LAMBDA_RUNTIME_API AWS 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. Wenn preventExecution Sie set to true in der aws:lambda:invocation-error Aktion verwenden, empfehlen wir, diese Variable auf mindestens 2000 (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.