View a markdown version of this page

Utilisez la commande AWS FIS aws:lambda:actions de fonction - AWS Service d'injection par défaut

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisez la commande AWS FIS aws:lambda:actions de fonction

Vous pouvez utiliser les actions aws:lambda:function pour injecter des erreurs dans les invocations de vos fonctions. AWS Lambda

Ces actions utilisent une extension AWS FIS gérée pour injecter des erreurs. Pour utiliser les actions aws:lambda:function, vous devez associer l'extension en tant que couche à vos fonctions Lambda et configurer un compartiment Amazon S3 pour communiquer entre et l'extension. AWS FIS

Lorsque vous exécutez un AWS FIS test ciblant aws:lambda:function, que vous lisez la configuration Amazon S3 AWS FIS à partir de votre fonction Lambda et que vous écrivez les informations relatives à l'injection de défauts dans l'emplacement Amazon S3 spécifié, comme indiqué dans le schéma ci-dessous.

Schéma illustrant la configuration de l'extension AWS Fault Injection Service Lambda.

Actions

Limitations

  • L'extension AWS FIS Lambda ne peut pas être utilisée avec des fonctions qui utilisent le streaming de réponses. Même si aucune erreur n'est appliquée, l'extension AWS FIS Lambda supprime les configurations de streaming. Pour plus d'informations, consultez la section Diffusion de réponses pour les fonctions Lambda dans le guide de AWS Lambda l'utilisateur.

Conditions préalables

Avant d'utiliser les actions AWS FIS Lambda, assurez-vous d'avoir effectué les tâches ponctuelles suivantes :

  • Créez un compartiment Amazon S3 dans la région dans laquelle vous prévoyez de démarrer une expérience ‐ Vous pouvez utiliser un seul compartiment Amazon S3 pour plusieurs expériences et partager le compartiment entre plusieurs AWS comptes. Cependant, vous devez disposer d'un compartiment distinct pour chacun Région AWS.

  • Créez une politique IAM pour accorder un accès en lecture à l'extension Lambda du compartiment Amazon S3 ‐ Dans le modèle suivant, remplacez my-config-distribution-bucket par le nom du compartiment Amazon S3 que vous avez créé ci-dessus et FisConfigs par le nom d'un dossier de votre compartiment Amazon S3 que vous souhaitez utiliser.

    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/*"] } ] }
  • Créez une politique IAM pour accorder un accès en écriture au compartiment Amazon S3 pour l' AWS FIS expérience. Dans le modèle suivant, remplacez my-config-distribution-bucket par le nom du compartiment Amazon S3 que vous avez créé ci-dessus et FisConfigs par le nom d'un dossier de votre compartiment Amazon S3 que vous souhaitez utiliser.

    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": "*" } ] }

Configuration de fonctions Lambda

Suivez les étapes ci-dessous pour chaque fonction Lambda que vous souhaitez influencer :

  1. Associez la politique d'accès en lecture Amazon S3 créée ci-dessus à la fonction Lambda.

  2. Attachez l' AWS FIS extension en tant que couche à la fonction. Pour plus d'informations sur la couche ARNs, consultezLes versions disponibles du AWS FIS extension pour Lambda.

  3. Définissez la AWS_FIS_CONFIGURATION_LOCATION variable sur l'ARN du dossier de configuration Amazon S3, par exemplearn:aws:s3:::my-config-distribution-bucket/FisConfigs/.

  4. Définissez la variable AWS_LAMBDA_EXEC_WRAPPER sur /opt/aws-fis/bootstrap.

Configurez un AWS FIS Expérience

Avant de lancer votre test, assurez-vous d'avoir joint la politique d'accès en écriture Amazon S3 que vous avez créée dans les prérequis aux rôles du test qui utiliseront des actions AWS FIS Lambda. Pour plus d'informations sur la configuration d'un AWS FIS test, consultezGestion des AWS modèles d'expériences FIS.

Logging

L'extension AWS FIS Lambda écrit des journaux sur la console et des CloudWatch journaux. La journalisation peut être configurée à l'aide de la AWS_FIS_LOG_LEVEL variable. Les valeurs prises en charge sont INFO, WARN et ERROR. Les journaux seront écrits dans le format de journal configuré pour votre fonction Lambda.

Voici un exemple de connexion au format texte :

2024-08-09T18:51:38.599984Z INFO AWS FIS EXTENSION - extension enabled 1.0.1

Voici un exemple de journal au format JSON :

{ "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" } }

Les journaux émis peuvent être utilisés avec les filtres de CloudWatch métriques Amazon pour générer des métriques personnalisées. Pour plus d'informations sur les filtres de métriques, consultez la section Création de métriques à partir d'événements de journal à l'aide de filtres dans le guide de l'utilisateur d'Amazon CloudWatch Logs.

Utilisation du format métrique CloudWatch intégré (EMF)

Vous pouvez configurer l'extension AWS FIS Lambda pour émettre des journaux EMF en définissant la AWS_FIS_EXTENSION_METRICS variable sur. all Par défaut, l'extension n'émet pas de journaux EMF et est définie AWS_FIS_EXTENSION_METRICS par défaut sur. none Les journaux EMF sont publiés aws-fis-extension namespace sur la CloudWatch console.

Dans l'aws-fis-extensionespace de noms, vous pouvez sélectionner certaines mesures à afficher dans un graphique. L'exemple ci-dessous montre certaines des métriques disponibles dans l'aws-fis-extensionespace de noms.

Exemple de graphique des mesures EMF en sortie dans le CloudWatch tableau de bord.

Rubriques avancées

Cette section fournit des informations supplémentaires sur le AWS FIS fonctionnement de l'extension Lambda et des cas d'utilisation particuliers.

Comprendre les sondages

Vous remarquerez peut-être une période de démarrage allant jusqu'à 60 secondes avant que les erreurs ne commencent à affecter toutes les invocations. Cela est dû au fait que l'extension Lambda interroge rarement les informations de configuration en attendant le démarrage d'une expérience. Vous pouvez ajuster l'intervalle d'interrogation en définissant la variable d'AWS_FIS_SLOW_POLL_INTERVAL_SECONDSenvironnement (60 s par défaut). Une valeur inférieure sera interrogée plus souvent, mais son impact sur les performances et les coûts seront plus importants. Vous pouvez également remarquer une période de ralentissement pouvant aller jusqu'à 20 secondes après l'injection du défaut. Cela est dû au fait que l'extension interroge plus fréquemment pendant que les expériences sont en cours.

Comprendre la simultanéité

Vous pouvez cibler les mêmes fonctions Lambda avec plusieurs actions simultanément. Si les actions sont toutes différentes les unes des autres, toutes les actions seront appliquées. Par exemple, vous pouvez ajouter un délai initial avant de renvoyer une erreur. Si deux actions identiques ou contradictoires sont appliquées à la même fonction, seule l'action dont la date de début est la plus proche sera appliquée.

La figure ci-dessous montre deux actions contradictoires, aws:lambda:invocation-error et aws:lambda:invocation-http-integration-response, qui se chevauchent. Initialement, aws:lambda:invocation-error démarre à 11 h 38 et s'exécute pendant 2 minutes. Ensuite, aws:lambda:invocation-http-integration-response tente de démarrer à 11h39, mais n'entre en vigueur qu'à 11h40 après la fin de la première action. Pour maintenir le calendrier des expériences, aws:lambda:invocation-http-integration-response se termine toujours à l'heure initialement prévue, à 11 h 41.

Graphiques des codes d'erreur et de réponse montrant deux actions qui se chevauchent de 11 h 38 à 11 h 41 sur x86 et Arm.

Comprendre le pourcentage d'invocation

Les actions AWS Fault Injection Service Lambda utilisent une cible aws:lambda:function qui vous permet de sélectionner un ou plusieurs ARN de fonction. AWS Lambda À l'aide de ces ARN, les actions AWS Fault Injection Service Lambda peuvent injecter des erreurs à chaque appel de la fonction Lambda sélectionnée. Pour vous permettre d'injecter des erreurs uniquement dans une fraction des appels, chaque action vous permet de spécifier un invocationPercentage paramètre avec des valeurs comprises entre 0 et 100. À l'aide de invocationPercentage ce paramètre, vous pouvez vous assurer que les actions sont simultanées, même pour les pourcentages d'invocation inférieurs à 100 %.

Considérations spéciales pour SnapStart

AWS Lambda les fonctions SnapStart activées auront plus de chances d'attendre toute la durée AWS_FIS_SLOW_POLL_INTERVAL_SECONDS avant de détecter la première configuration de défaut, même si une expérience est déjà en cours. Cela est dû au fait que Lambda SnapStart utilise un seul instantané comme état initial pour plusieurs environnements d'exécution et conserve le stockage temporaire. Pour l'extension AWS Fault Injection Service Lambda, elle conservera la fréquence d'interrogation et ignorera la vérification de configuration initiale lors de l'initialisation de l'environnement d'exécution. Pour plus d'informations sur Lambda SnapStart, consultez la section Améliorer les performances de démarrage avec Lambda SnapStart dans le guide de l'AWS Lambda utilisateur.

Considérations spéciales pour les fonctions rapides et peu fréquentes

Si votre fonction Lambda s'exécute pendant une durée inférieure à la durée moyenne d'interrogation de 70 millisecondes, le thread d'interrogation peut avoir besoin de plusieurs appels pour obtenir des configurations d'erreur. Si la fonction n'est pas exécutée fréquemment, par exemple une fois toutes les 15 minutes, le sondage ne sera jamais terminé. Pour vous assurer que le thread d'interrogation peut se terminer, définissez le AWS_FIS_POLL_MAX_WAIT_MILLISECONDS paramètre. L'extension attendra la durée que vous avez définie pour la fin d'un sondage en vol avant de démarrer la fonction. Notez que cela augmentera la durée de la fonction facturée et entraînera un retard supplémentaire pour certaines invocations.

Configuration de plusieurs extensions à l'aide du proxy de l'API Lambda Runtime

L'extension Lambda utilise le proxy de l'API AWS Lambda Runtime pour intercepter les appels de fonctions avant qu'ils n'atteignent le runtime. Pour ce faire, il expose un proxy pour l'API AWS Lambda Runtime au runtime et annonce son emplacement dans la AWS_LAMBDA_RUNTIME_API variable.

Le schéma suivant montre la configuration d'une extension unique à l'aide du proxy de l'API Lambda Runtime :

Configuration par défaut.

Pour utiliser l'extension AWS FIS Lambda avec une autre extension à l'aide du modèle de proxy de l'API AWS Lambda Runtime, vous devez enchaîner les proxys à l'aide d'un script d'amorçage personnalisé. L'extension AWS FIS Lambda accepte les variables d'environnement suivantes :

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Prend une chaîne sous la forme 127.0.0.1:9876 représentant l'adresse IP locale et le port d'écoute pour l'API AWS Lambda Runtime. Il peut s'agir de la valeur d'origine AWS_LAMBDA_RUNTIME_API ou de l'emplacement d'un autre proxy.

  • AWS_FIS_PROXY_LISTENER_PORT‐ Prend un numéro de port sur lequel l' AWS FIS extension doit démarrer son propre proxy, par défaut9100.

Avec ces paramètres, vous pouvez enchaîner l' AWS FIS extension avec une autre extension à l'aide du proxy de l'API Lambda Runtime dans deux ordres différents.

Deux extensions chaînées utilisant le proxy de l'API Lambda.

Pour plus d'informations sur le proxy de l'API AWS Lambda d'exécution, consultez les sections Amélioration de la sécurité et de la gouvernance de l' AWS Lambda exécution avec l'extension proxy de l'API d'exécution d'exécution et Utilisation de l'API d'exécution Lambda pour des environnements d'exécution personnalisés dans le guide de l'AWS Lambda utilisateur.

Utilisation AWS FIS avec temps d'exécution des conteneurs

Pour les AWS Lambda fonctions utilisant des images de conteneur qui acceptent la variable d'AWS_LAMBDA_RUNTIME_APIenvironnement, vous pouvez empaqueter l'extension AWS FIS Lambda dans votre image de conteneur en suivant les étapes ci-dessous :

  1. Déterminez l'ARN de la couche à partir de laquelle vous souhaitez extraire l'extension. Pour plus d'informations sur la recherche de l'ARN, consultezConfiguration de fonctions Lambda.

  2. Utilisez la AWS Command Line Interface (CLI) pour demander des informations sur l'extensionaws lambda get-layer-version-by-arn --arn fis-extension-arn. La réponse contiendra un Location champ contenant une URL pré-signée à partir de laquelle vous pourrez télécharger l'extension FIS sous forme de fichier ZIP.

  3. Décompressez le contenu de l'extension dans votre système /opt de fichiers Docker. Voici un exemple de Dockerfile basé sur le runtime NodeJS Lambda :

    # 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" ]

Pour plus d'informations sur les images de conteneur, voir Créer une fonction Lambda à l'aide d'une image de conteneur dans le guide de l'AWS Lambda utilisateur.

AWS FIS Variables d'environnement Lambda

La liste suivante répertorie les variables d'environnement pour l'extension AWS FIS Lambda.

  • AWS_FIS_CONFIGURATION_LOCATION‐ Obligatoire. Emplacement où AWS FIS seront écrites les configurations de panne actives et où l'extension lira les configurations de panne. Les emplacements doivent être au format ARN Amazon S3, y compris un compartiment et un chemin. Par exemple, arn:aws:s3:::my-fis-config-bucket/FisConfigs/.

  • AWS_LAMBDA_EXEC_WRAPPER‐ Obligatoire. Emplacement du script AWS Lambda wrapper utilisé pour configurer l'extension AWS FIS Lambda. Ce paramètre doit être défini sur le /opt/aws-fis/bootstrap script inclus dans l'extension.

  • AWS_FIS_LOG_LEVEL‐ Facultatif. Niveau de journalisation des messages émis par l'extension AWS FIS Lambda. Les valeurs prises en charge sont INFO, WARN et ERROR. Si elle n'est pas définie, AWS FIS l'extension sera définie par défaut surINFO.

  • AWS_FIS_EXTENSION_METRICS‐ Facultatif. Les valeurs possibles sont all et none. Si elle est définie sur all l'extension, elle émettra des métriques EMF sous leaws-fis-extension namespace.

  • AWS_FIS_SLOW_POLL_INTERVAL_SECONDS‐ Facultatif. Si cette option est définie, l'intervalle d'interrogation (en secondes) sera annulé pendant que l'extension n'injecte pas de défauts et attend qu'une configuration de panne soit ajoutée à l'emplacement de configuration. La valeur par défaut est 60 .

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Facultatif. Si elle est définie, elle remplacera la valeur de AWS_LAMBDA_RUNTIME_API pour définir l'endroit où l' AWS FIS extension interagit avec l'API AWS Lambda d'exécution pour contrôler l'invocation des fonctions. S'attend IP:PORT, par exemple, à127.0.0.1:9000. Pour plus d'informationsAWS_LAMBDA_RUNTIME_API, consultez la section Utilisation de l'API d'exécution Lambda pour des environnements d'exécution personnalisés dans le guide de l'AWS Lambda utilisateur.

  • AWS_FIS_PROXY_LISTENER_PORT‐ Facultatif. Définit le port sur lequel l'extension AWS FIS Lambda expose un proxy AWS Lambda d'API d'exécution qui peut être utilisé par une autre extension ou par le moteur d'exécution. La valeur par défaut est 9100 .

  • AWS_FIS_POLL_MAX_WAIT_MILLISECONDS‐ Facultatif. Si elle est définie sur une valeur différente de zéro, cette variable définit le nombre de millisecondes pendant lesquelles l'extension attendra la fin d'un sondage asynchrone en vol avant d'évaluer les configurations de panne et de lancer l'appel du runtime. La valeur par défaut est 0 . Lorsque vous utilisez preventExecution set to true dans l'aws:lambda:invocation-erroraction, nous vous recommandons de définir cette variable sur au moins 2000 (2 secondes) pour vous assurer que la configuration des pannes de l'extension est à jour avant de décider de bloquer ou non l'exécution de la fonction.