

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 les actions AWS FIS aws:lambda:function
<a name="use-lambda-actions"></a>

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 sous forme de 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 AWS FIS Amazon S3 à partir de votre fonction Lambda et que vous écrivez les informations relatives à l'injection d'erreurs à 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.\]](http://docs.aws.amazon.com/fr_fr/fis/latest/userguide/images/Serverless-config-distro-3.png)


## Actions
<a name="supported-lambda-actions"></a>
+ [aws:lambda:invocation-add-delay](fis-actions-reference.md#invocation-add-delay)
+ [aws:lambda:invocation-error](fis-actions-reference.md#invocation-error)
+ [aws:lambda:invocation-http-integration-response](fis-actions-reference.md#invocation-http-integration-response)

## Limitations
<a name="lambda-limitations"></a>
+ L'extension AWS FIS Lambda ne peut pas être utilisée avec des fonctions utilisant 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, voir [Streaming de réponses pour les fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html) dans le guide de l'*AWS Lambda utilisateur*.

## Conditions préalables
<a name="lambda-prerequisites"></a>

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 à partir de laquelle vous souhaitez 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 d'entre eux Région AWS.
+ **Créez une politique IAM pour accorder un accès en lecture pour l'extension Lambda au compartiment Amazon S3** ‐ Dans le modèle suivant, `my-config-distribution-bucket` remplacez-le par le nom du compartiment Amazon S3 que vous avez créé ci-dessus `FisConfigs` et 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-le `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
<a name="configure-lambda-functions"></a>

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

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

1. Attachez l' AWS FIS extension sous forme de couche à la fonction. Pour plus d'informations sur la couche ARNs, consultez[Versions disponibles de l' AWS FIS extension pour Lambda](actions-lambda-extension-arns.md). 

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

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

## Configuration d'une AWS FIS expérience
<a name="configure-fis-experiment-lambda-actions"></a>

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 conditions préalables aux rôles de test qui utiliseront les actions AWS FIS Lambda. Pour plus d'informations sur la configuration d'une AWS FIS expérience, consultez[Gestion des AWS modèles d'expériences FISGestion de vos AWS expériences FIS](experiments.md).

## Logging
<a name="lambda-actions-logging"></a>

L'extension AWS FIS Lambda écrit des journaux sur la console et CloudWatch des 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 journal 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 CloudWatch métriques Amazon pour générer des métriques personnalisées. Pour plus d'informations sur les filtres métriques, consultez la section [Création de métriques à partir d'événements de journal à l'aide de filtres](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html) dans le *guide de l'utilisateur Amazon CloudWatch Logs*.

### Utilisation du format métrique CloudWatch intégré (EMF)
<a name="lambda-actions-emf-metrics"></a>

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

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

![\[Exemple de graphique des métriques EMF en sortie dans le CloudWatch tableau de bord.\]](http://docs.aws.amazon.com/fr_fr/fis/latest/userguide/images/emf-metrics-graph.png)


## Rubriques avancées
<a name="lambda-actions-advanced-topics"></a>

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

**Topics**
+ [Comprendre les sondages](#understanding-polling)
+ [Comprendre la simultanéité](#understanding-concurrency)
+ [Comprendre le pourcentage d'invocation](#understanding-invocation-percentage)
+ [Considérations spéciales pour SnapStart](#considerations-for-snapshot)
+ [Considérations spéciales pour les fonctions rapides et peu fréquentes](#considerations-for-fast-infrequent-functions)
+ [Configuration de plusieurs extensions à l'aide du proxy Lambda Runtime API](#configuring-multiple-extensions)
+ [Utilisation AWS FIS avec des environnements d'exécution de conteneurs](#container-runtimes)
+ [AWS FIS Variables d'environnement Lambda](#fis-extension-environment-variables)

### Comprendre les sondages
<a name="understanding-polling"></a>

Vous remarquerez peut-être une période de montée en puissance allant jusqu'à 60 secondes avant que les défauts 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ébut d'une expérience. Vous pouvez ajuster l'intervalle d'interrogation en définissant la variable d'`AWS_FIS_SLOW_POLL_INTERVAL_SECONDS`environnement (60 s par défaut). Une valeur inférieure entraînera des interrogations plus fréquentes, mais aura un impact plus important sur les performances et les coûts. Vous pouvez également remarquer une période de réduction allant 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é
<a name="understanding-concurrency"></a>

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 ancienne sera appliquée. 

 **La figure ci-dessous montre deux actions contradictoires, **aws:lambda:invocation-error et aws:lambda :**, qui se chevauchent. invocation-http-integration-response** Au départ, **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 à 11 h 39, mais n'entre en vigueur qu'à 11 h 40 après la fin de la première action. Pour maintenir le calendrier des expériences, **aws:lambda :** se termine invocation-http-integration-response toujours à l'heure initialement prévue, à 11:41. 

![\[Graphs showing error and response code percentages for x86 and arm during overlapping actions.\]](http://docs.aws.amazon.com/fr_fr/fis/latest/userguide/images/understanding-concurrency.png)


### Comprendre le pourcentage d'invocation
<a name="understanding-invocation-percentage"></a>

Les actions AWS Fault Injection Service Lambda utilisent une cible **aws:lambda:function** qui vous permet de sélectionner une ou plusieurs fonctions. AWS Lambda ARNs Grâce à celles-ci ARNs, 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 dans une fraction des appels uniquement, chaque action vous permet de spécifier un `invocationPercentage` paramètre avec des valeurs comprises entre 0 et 100. À l'aide de ce `invocationPercentage` paramètre, vous pouvez vous assurer que les actions sont simultanées, même pour des pourcentages d'invocation inférieurs à 100 %. 

### Considérations spéciales pour SnapStart
<a name="considerations-for-snapshot"></a>

AWS Lambda les fonctions SnapStart activées auront plus de chances d'attendre pendant toute la durée `AWS_FIS_SLOW_POLL_INTERVAL_SECONDS` avant de détecter la première configuration défectueuse, 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, la fréquence des interrogations sera maintenue et la vérification de configuration initiale sera ignorée lors de l'initialisation de l'environnement d'exécution. *Pour plus d'informations sur Lambda SnapStart, consultez la section [Amélioration des performances de démarrage avec Lambda SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html) dans le guide de l'utilisateur.AWS Lambda * 

### Considérations spéciales pour les fonctions rapides et peu fréquentes
<a name="considerations-for-fast-infrequent-functions"></a>

Si votre fonction Lambda s'exécute pendant une durée inférieure à la durée moyenne d'interrogation de 70 millisecondes, le fil de sondage peut avoir besoin de plusieurs appels pour obtenir des configurations de panne. Si la fonction ne s'exécute pas fréquemment, par exemple une fois toutes les 15 minutes, le sondage ne sera jamais terminé. Pour vous assurer que le fil de sondage 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 délai supplémentaire pour certaines invocations.

### Configuration de plusieurs extensions à l'aide du proxy Lambda Runtime API
<a name="configuring-multiple-extensions"></a>

L'extension Lambda utilise le proxy de l'API AWS Lambda Runtime pour intercepter les appels de fonctions avant qu'ils n'atteignent l'environnement d'exécution. Pour ce faire, il expose un proxy pour l'API AWS Lambda Runtime à l'environnement d'exécution et en annonçant son emplacement dans la `AWS_LAMBDA_RUNTIME_API` variable. 

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

![\[Configuration par défaut.\]](http://docs.aws.amazon.com/fr_fr/fis/latest/userguide/images/Proxy-1.png)


Pour utiliser l'extension AWS FIS Lambda avec une autre extension utilisant le modèle de proxy AWS Lambda Runtime API, vous devez enchaîner les proxys à l'aide d'un script bootstrap 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éfaut`9100`.

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

![\[Deux extensions chaînées utilisant le proxy de l'API Lambda.\]](http://docs.aws.amazon.com/fr_fr/fis/latest/userguide/images/lambda-runtime-api-proxy.png)


*Pour plus d'informations sur le proxy AWS Lambda d'API Runtime, consultez les sections [Amélioration de la sécurité et de la gouvernance des environnements d'exécution avec l'extension de proxy AWS Lambda Runtime API](https://aws.amazon.com/blogs/compute/enhancing-runtime-security-and-governance-with-the-aws-lambda-runtime-api-proxy-extension/) et [Utilisation de l'API d'exécution Lambda pour des environnements d'exécution personnalisés dans le guide](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) de l'AWS Lambda utilisateur.*

### Utilisation AWS FIS avec des environnements d'exécution de conteneurs
<a name="container-runtimes"></a>

Pour les AWS Lambda fonctions utilisant des images de conteneur qui acceptent la variable d'`AWS_LAMBDA_RUNTIME_API`environnement, vous pouvez intégrer 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, consultez[Configuration de fonctions Lambda](#configure-lambda-functions).

1. Utilisez la AWS Command Line Interface (CLI) pour demander des informations sur l'extension`aws 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.

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

   ```
   # 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éation d'une fonction Lambda à l'aide d'une image de conteneur](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html) dans le guide de l'*AWS Lambda utilisateur*.

### AWS FIS Variables d'environnement Lambda
<a name="fis-extension-environment-variables"></a>

Voici une liste de variables d'environnement pour l'extension AWS FIS Lambda
+ `AWS_FIS_CONFIGURATION_LOCATION`‐ Obligatoire. Emplacement où les configurations de défaut actives AWS FIS seront écrites et où l'extension lira les configurations de défaillance. Les emplacements doivent être au format Amazon S3 ARN, 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](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper) utilisé pour configurer l'extension AWS FIS Lambda. Cela 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 ce n'est pas le cas, AWS FIS l'extension sera définie par défaut sur`INFO`.
+ `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 le`aws-fis-extension namespace`.
+ `AWS_FIS_SLOW_POLL_INTERVAL_SECONDS`‐ Facultatif. Si cette option est définie, l'intervalle d'interrogation (en secondes) sera dépassé pendant que l'extension n'injecte pas de défauts et attend qu'une configuration de défaut 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. Exige IP:PORT, par exemple,. `127.0.0.1:9000` *Pour plus d'informations`AWS_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](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) 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 cours avant d'évaluer les configurations d'erreur et de lancer l'invocation du runtime. La valeur par défaut est `0` .