

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.

# Testez votre application sans serveur avec AWS SAM
<a name="serverless-test-and-debug"></a>

Après avoir écrit et créé votre application, vous serez prêt à tester votre application pour vérifier qu'elle fonctionne correctement. Grâce à l'interface de ligne de AWS SAM commande (CLI), vous pouvez tester localement votre application sans serveur avant de la télécharger dans le AWS Cloud. Le test de votre application vous permet de confirmer la fonctionnalité, la fiabilité et les performances de l'application, tout en identifiant les problèmes (bogues) qui devront être résolus.

Cette section fournit des conseils sur les pratiques courantes que vous pouvez suivre pour tester votre application. Les rubriques de cette section se concentrent principalement sur les tests locaux que vous pouvez effectuer avant le déploiement dans le AWS cloud. Les tests avant le déploiement vous aident à identifier les problèmes de manière proactive, réduisant ainsi les coûts inutiles associés aux problèmes de déploiement. Chaque rubrique de cette section décrit un test que vous pouvez effectuer et indique à yoxi include href ? u les avantages de son utilisation, et inclut des exemples vous montrant comment effectuer le test. Après avoir testé votre application, vous serez prêt à corriger tous les problèmes que vous aurez découverts.

**Topics**
+ [Présentation des tests à l'aide de la sam local commande](using-sam-cli-local.md)
+ [Invoquez localement des fonctions Lambda avec AWS SAM](serverless-sam-cli-using-invoke.md)
+ [Exécutez API Gateway localement avec AWS SAM](serverless-sam-cli-using-start-api.md)
+ [Présentation des tests dans le cloud avec sam remote test-event](using-sam-cli-remote-test-event.md)
+ [Présentation des tests dans le cloud avec sam remote invoke](using-sam-cli-remote-invoke.md)
+ [Automatisez les tests d'intégration locaux avec AWS SAM](serverless-sam-cli-using-automated-tests.md)
+ [Générez des exemples de charges utiles d'événements avec AWS SAM](serverless-sam-cli-using-generate-event.md)
+ [Tester et déboguer des fonctions durables](test-and-debug-durable-functions.md)

# Présentation des tests à l'aide de la sam local commande
<a name="using-sam-cli-local"></a>

Utilisez la AWS Serverless Application Model commande Command Line Interface (AWS SAMCLI) `sam local` pour tester vos applications sans serveur localement.

Pour une introduction à la AWS SAMCLI, voir[Qu'est-ce que c'est AWS SAMCLI ?](what-is-sam-overview.md#what-is-sam-cli).

## Conditions préalables
<a name="using-sam-cli-local-prerequisites"></a>

Pour utiliser `sam local`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Avant d'utiliser `sam local`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).

## Utilisation de la commande sam local
<a name="using-sam-cli-local-command"></a>

Utilisez la commande `sam local` avec l'une de ses sous-commandes pour effectuer différents types de tests locaux pour votre application.

```
$ sam local <subcommand>
```

Pour en savoir plus sur chaque sous-commande, consultez les ressources suivantes :
+ **[Présentation de sam local generate-event](using-sam-cli-local-generate-event.md)**— Génère Service AWS des événements pour les tests locaux.
+ **[Présentation de sam local invoke](using-sam-cli-local-invoke.md)** : lancez un appel unique d'une fonction AWS Lambda au niveau local.
+ **[Présentation de sam local start-api](using-sam-cli-local-start-api.md)** : exécutez vos fonctions Lambda à l'aide d'un serveur HTTP local.
+ **[Présentation de sam local start-lambda](using-sam-cli-local-start-lambda.md)**— Exécutez vos fonctions Lambda à l'aide d'un serveur HTTP local à utiliser avec le AWS CLI ou. SDKs

# Présentation des tests avec sam local generate-event
<a name="using-sam-cli-local-generate-event"></a>

Utilisez la AWS Serverless Application Model `sam local generate-event` sous-commande Command Line Interface (AWS SAMCLI) pour générer des échantillons de charge utile d'événements pour les applications prises en charge. Services AWS Vous pouvez ensuite modifier et transmettre ces événements à des ressources locales pour les tester.
+ Pour une introduction à la AWS SAMCLI, voir [Qu'est-ce que c'est AWS SAMCLI ?](what-is-sam-overview.md#what-is-sam-cli)
+ Pour obtenir la liste des options de commande `sam local generate-event`, consultez [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Un *événement* est un objet JSON qui est généré lorsqu'un utilisateur Service AWS exécute une action ou une tâche. Ces événements contiennent des informations spécifiques, telles que les données traitées ou le timestamp de l'événement. La plupart des Services AWS génèrent des événements et les événements de chaque service sont formatés de manière unique pour le service en question.

Les événements générés par un service sont transmis à d'autres services en tant que *source d'événements*. Par exemple, un élément placé dans un compartiment Amazon Simple Storage Service (Amazon S3) peut générer un événement. Cet événement peut ensuite être utilisé comme source d'événement pour une fonction AWS Lambda afin de poursuivre le traitement des données.

Les événements que vous générez avec `sam local generate-event` sont formatés selon la même structure que les événements réels créés par le AWS service. Vous pouvez modifier le contenu de ces événements et les utiliser pour tester les ressources de votre application.

## Conditions préalables
<a name="using-sam-cli-local-generate-event-prerequisites"></a>

Pour utiliser `sam local generate-event`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Avant d'utiliser `sam local generate-event`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).

## Générer des exemples d'événements
<a name="using-sam-cli-local-generate-event-generate"></a>

Utilisez la AWS SAMCLI `sam local generate-event` sous-commande pour générer des événements pour les personnes prises en charge Services AWS.

**Pour voir la liste des produits pris en charge Services AWS**

1. Exécutez les commandes suivantes :

   ```
   $ sam local generate-event
   ```

1. La liste des produits pris en charge Services AWS s'affichera. Voici un exemple :

   ```
   $ sam local generate-event
   ...
   Commands:
     alb
     alexa-skills-kit
     alexa-smart-home
     apigateway
     appsync
     batch
     cloudformation
     ...
   ```

**Pour générer un événement local**

1. Exécutez `sam local generate-event` et fournissez le nom du service pris en charge. La liste des types d'événements que vous pouvez générer s'affichera. Voici un exemple :

   ```
   $ sam local generate-event s3
   
   Usage: sam local generate-event s3 [OPTIONS] COMMAND [ARGS]...
   
   Options:
     -h, --help  Show this message and exit.
   
   Commands:
     batch-invocation  Generates an Amazon S3 Batch Operations Invocation Event
     delete            Generates an Amazon S3 Delete Event
     put               Generates an Amazon S3 Put Event
   ```

1. Pour générer l'exemple d'événement, exécutez `sam local generate-event` en fournissant le service et le type d'événement.

   ```
   $ sam local generate-event <service> <event>
   ```

   Voici un exemple :

   ```
   $ sam local generate-event s3 put
   {
     "Records": [
       {
         "eventVersion": "2.0",
         "eventSource": "aws:s3",
         "awsRegion": "us-east-1",
         "eventTime": "1970-01-01T00:00:00.000Z",
         "eventName": "ObjectCreated:Put",
         "userIdentity": {
           "principalId": "EXAMPLE"
         },
         "requestParameters": {
           "sourceIPAddress": "127.0.0.1"
         },
         "responseElements": {
           "x-amz-request-id": "EXAMPLE123456789",
           "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
         },
         "s3": {
           "s3SchemaVersion": "1.0",
           "configurationId": "testConfigRule",
           "bucket": {
             "name": "sam-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::sam-s3-demo-bucket"
           },
           "object": {
             "key": "test/key",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

Ces exemples d'événements contiennent des valeurs d'espace réservé. Vous pouvez modifier ces valeurs pour faire référence aux ressources réelles dans votre application ou pour faciliter les tests locaux.

**Pour modifier un exemple d'événement**

1. Vous pouvez modifier les exemples d'événements à l'invite de commande. Pour afficher vos options, exécutez ce qui suit :

   ```
   $ sam local generate-event <service> <event> --help
   ```

   Voici un exemple :

   ```
   $ sam local generate-event s3 put --help
   
   Usage: sam local generate-event s3 put [OPTIONS]
   
   Options:
     --region TEXT       Specify the region name you'd like, otherwise the
                         default = us-east-1
     --partition TEXT    Specify the partition name you'd like, otherwise the
                         default = aws
     --bucket TEXT       Specify the bucket name you'd like, otherwise the
                         default = example-bucket
     --key TEXT          Specify the key name you'd like, otherwise the default =
                         test/key
     --debug             Turn on debug logging to print debug message generated
                         by AWS SAM CLI and display timestamps.
     --config-file TEXT  Configuration file containing default parameter values.
                         [default: samconfig.toml]
     --config-env TEXT   Environment name specifying default parameter values in
                         the configuration file.  [default: default]
     -h, --help          Show this message and exit.
   ```

1. Utilisez l'une de ces options à l'invite de commande pour modifier votre exemple de charge utile d'événement. Voici un exemple :

   ```
   $ sam local generate-event s3 put--bucket sam-s3-demo-bucket
   
   {
     "Records": [
       {
         "eventVersion": "2.0",
         "eventSource": "aws:s3",
         "awsRegion": "us-east-1",
         "eventTime": "1970-01-01T00:00:00.000Z",
         "eventName": "ObjectCreated:Put",
         "userIdentity": {
           "principalId": "EXAMPLE"
         },
         "requestParameters": {
           "sourceIPAddress": "127.0.0.1"
         },
         "responseElements": {
           "x-amz-request-id": "EXAMPLE123456789",
           "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
         },
         "s3": {
           "s3SchemaVersion": "1.0",
           "configurationId": "testConfigRule",
           "bucket": {
             "name": "sam-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::sam-s3-demo-bucket"
           },
           "object": {
             "key": "test/key",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

## Utiliser les événements générés pour les tests locaux
<a name="using-sam-cli-local-generate-event-use"></a>

Enregistrez les événements générés localement et utilisez d'autres sous-commandes `sam local` pour les tester.

**Pour enregistrer vos événements générés localement**
+ Exécutez les commandes suivantes :

  ```
  $ sam local generate-event <service> <event> <event-option> > <filename.json>
  ```

  Voici un exemple d'événement enregistré sous forme de fichier `s3.json` dans le dossier `events` de notre projet.

  ```
  sam-app$ sam local generate-event s3 put --bucket amzn-s3-demo-bucket > events/s3.json
  ```

**Pour utiliser un événement généré pour des tests locaux**
+ Transmettez l'événement avec d'autres sous-commandes `sam local` à l'aide de l'option `--event`.

  Voici un exemple d'utilisation de l'événement `s3.json` pour appeler notre fonction Lambda localement :

  ```
  sam-app$ sam local invoke --event events/s3.json S3JsonLoggerFunction
  
  Invoking src/handlers/s3-json-logger.s3JsonLoggerHandler (nodejs18.x)
  Local image is up-to-date
  Using local image: public.ecr.aws/lambda/nodejs:18-rapid-x86_64.
  
  Mounting /Users/.../sam-app/.aws-sam/build/S3JsonLoggerFunction as /var/task:ro,delegated, inside runtime container
  START RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128 Version: $LATEST
  END RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128
  REPORT RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128  Init Duration: 1.23 ms  Duration: 9371.93 ms      Billed Duration: 9372 ms        Memory Size: 128 MB     Max Memory Used: 128 MB
  ```

## En savoir plus
<a name="using-sam-cli-local-generate-event-learn"></a>

Pour obtenir la liste de toutes les options `sam local generate-event`, consultez [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Pour une démonstration de l'utilisation de `sam local`, consultez [AWS SAM pour le développement local. Tester AWS Cloud des ressources issues d'environnements de développement locaux](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) dans le cadre de la *série Serverless Land Sessions with SAM on YouTube*.

# Présentation des tests avec sam local invoke
<a name="using-sam-cli-local-invoke"></a>

Utilisez la AWS Serverless Application Model `sam local invoke` sous-commande Command Line Interface (AWS SAMCLI) pour lancer un appel unique d'une AWS Lambda fonction localement.
+ Pour une introduction à la AWS SAMCLI, voir [Qu'est-ce que c'est AWS SAMCLI ?](what-is-sam-overview.md#what-is-sam-cli)
+ Pour obtenir la liste des options de commande `sam local invoke`, consultez [sam local invoke](sam-cli-command-reference-sam-local-invoke.md).
+ Pour un exemple d'utilisation de `sam local invoke` dans le cadre d'un flux de travail de développement classique, consultez [Étape 7 : (Facultatif) testez votre application localement](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**Note**  
Il n'est pas recommandé d'utiliser les fonctionnalités d'appel local de la SAM CLI dans du code non fiable. Pour vous isoler complètement de votre environnement local, exécutez le code directement dans le service Lambda.

**Note**  
`sam local invoke`prend en charge des fonctions durables avec des fonctionnalités de point de contrôle et de rediffusion automatiques. Lorsque des fonctions durables sont invoquées localement, l'état d'exécution est automatiquement géré.

## Conditions préalables
<a name="using-sam-cli-local-invoke-prerequisites"></a>

Pour utiliser `sam local invoke`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Avant d'utiliser `sam local invoke`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).

## Appel d'une fonction Lambda localement
<a name="using-sam-cli-local-invoke-use"></a>

Lorsque vous utilisez `sam local invoke`, la CLI AWS SAM suppose que le répertoire de travail actuel est le répertoire racine du projet. La CLI AWS SAM recherche d'abord un fichier `template.[yaml|yml]` dans un sous-dossier `.aws-sam`. Si elle ne le trouve pas, la CLI AWS SAM recherche un fichier `template.[yaml|yml]` dans votre répertoire de travail actuel.

**Pour appeler une fonction Lambda localement**

1. À partir du répertoire racine de votre projet, effectuez les actions suivantes :

   ```
   $ sam local invoke <options>
   ```

1. Si votre application contient plusieurs fonctions, indiquez l'identifiant logique de la fonction. Voici un exemple :

   ```
   $ sam local invoke HelloWorldFunction
   ```

1. La CLI  AWS SAM crée votre fonction dans un conteneur local à l'aide de Docker. Elle invoque ensuite votre fonction et génère la réponse de votre fonction.

   Voici un exemple :

   ```
   $ sam local invoke
   Invoking app.lambda_handler (python3.9)
   Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image
   Building image....................................................................................................................
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
   START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST
   END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df
   REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df  Init Duration: 1.09 ms  Duration: 608.42 ms       Billed Duration: 609 ms Memory Size: 128 MB     Max Memory Used: 128 MB
   {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
   ```

### Gestion des journaux
<a name="using-sam-cli-local-invoke-logs"></a>

Lorsque vous utilisez `sam local invoke`, le résultat d'exécution de la fonction Lambda (par exemple, les journaux) sort vers `stderr` et le résultat de la fonction Lambda sors vers `stdout`.

Voici un exemple de fonction Lambda de base :

```
def handler(event, context):
    print("some log") # this goes to stderr
    return "hello world" # this goes to stdout
```

Vous pouvez enregistrer ces résultats standard. Voici un exemple :

```
$ sam local invoke 1> stdout.log
...

$ cat stdout.log
"hello world"

$ sam local invoke 2> stderr.log
...

$ cat stderr.log
Invoking app.lambda_handler (python3.9)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST
some log
END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46
REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46  Init Duration: 0.91 ms  Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
```

Vous pouvez utiliser ces résultats standard pour automatiser davantage vos processus de développement locaux.

## Options
<a name="using-sam-cli-local-invoke-options"></a>

### Transmettez des événements personnalisés pour appeler la fonction Lambda
<a name="using-sam-cli-local-invoke-options-events"></a>

Pour transmettre un événement à la fonction Lambda, utilisez l'option `--event`. Voici un exemple :

```
$ sam local invoke --event events/s3.json S3JsonLoggerFunction
```

Vous pouvez créer des événements à l'aide de la sous-commande `sam local generate-event`. Pour en savoir plus, veuillez consulter la section [Présentation des tests avec sam local generate-event](using-sam-cli-local-generate-event.md).

### Transmettre des variables d'environnement lors de l'appel de votre fonction Lambda
<a name="using-sam-cli-local-invoke-options-env"></a>

Si votre fonction Lambda utilise des variables d'environnement, vous pouvez les transmettre lors des tests locaux à l'aide de l'option `--env-vars`. C'est un excellent moyen de tester une fonction Lambda localement avec des services de votre application déjà déployés dans le cloud. Voici un exemple :

```
$ sam local invoke --env-vars locals.json
```

### Spécifier un modèle ou une fonction
<a name="using-sam-cli-local-invoke-options-specify"></a>

Pour spécifier un modèle à référencer par la CLI AWS SAM, utilisez l'option `--template`. Ils AWS SAMCLI chargeront uniquement ce AWS SAM modèle et les ressources vers lesquelles il pointe.

Pour appeler une fonction d'une application ou d'une pile imbriquée, fournissez l'identifiant logique de l'application ou de la pile avec l'identifiant logique. Voici un exemple :

```
$ sam local invoke StackLogicalId/FunctionLogicalId
```

### Tester une fonction Lambda à partir de votre projet Terraform
<a name="using-sam-cli-local-invoke-options-terraform"></a>

Utilisez l'option `--hook-name` pour tester localement les fonctions Lambda de vos projets Terraform. Pour en savoir plus, veuillez consulter la section [Utilisation de la CLI  AWS SAM avec Terraform pour le débogage et les tests locaux](using-samcli-terraform.md).

Voici un exemple :

```
$ sam local invoke --hook-name terraform --beta-features
```

## Bonnes pratiques
<a name="using-sam-cli-local-invoke-best"></a>

Si votre application possède un répertoire `.aws-sam` qui exécute `sam build`, assurez-vous d'exécuter `sam build` chaque fois que vous mettez à jour le code de votre fonction. Exécutez ensuite `sam local invoke` pour tester localement votre code de fonction mis à jour.

Les tests locaux constituent une excellente solution pour un développement et des tests rapides avant le déploiement dans le cloud. Toutefois, les tests locaux ne valident pas tout, notamment les autorisations entre vos ressources dans le cloud. Dans la mesure du possible, testez vos applications dans le cloud. Nous vous recommandons d'[utiliser `sam sync`](using-sam-cli-sync.md) pour accélérer vos flux de travail de test dans le cloud.

## Exemples
<a name="using-sam-cli-local-invoke-examples"></a>

### Générer un exemple d'événement Amazon API Gateway et l'utiliser pour appeler une fonction Lambda localement
<a name="using-sam-cli-local-invoke-examples-api"></a>

Tout d'abord, nous générons une charge utile d'événement API HTTP API Gateway et l'enregistrons dans notre dossier `events`.

```
$ sam local generate-event apigateway http-api-proxy > events/apigateway_event.json
```

Ensuite, nous modifions notre fonction Lambda pour qu'elle renvoie une valeur de paramètre à partir de l'événement.

```
def lambda_handler(event, context):
    print("HelloWorldFunction invoked")
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": event['queryStringParameters']['parameter2'],
        }),
    }
```

Ensuite, nous invoquons localement notre fonction Lambda et fournissons notre événement personnalisé.

```
$ sam local invoke --event events/apigateway_event.json

Invoking app.lambda_handler (python3.9)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.

Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST
some log
END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8
REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8  Init Duration: 1.63 ms  Duration: 564.07 ms       Billed Duration: 565 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"value\"}"}%
```

### Transmettre des variables d'environnement lors de l'appel d'une fonction Lambda localement
<a name="using-sam-cli-local-invoke-examples-env"></a>

Cette application possède une fonction Lambda qui utilise une variable d'environnement pour un nom de table Amazon DynamoDB. Voici un exemple de la fonction définie dans le AWS SAM modèle :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
...
Resources:
  getAllItemsFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/get-all-items.getAllItemsHandler
      Description: get all items
      Policies:
        - DynamoDBReadPolicy:
            TableName: !Ref SampleTable
      Environment:
        Variables:
          SAMPLE_TABLE: !Ref SampleTable
...
```

Nous souhaitons tester localement notre fonction Lambda tout en la faisant interagir avec notre table DynamoDB dans le cloud. Pour ce faire, nous créons notre fichier de variables d'environnement et l'enregistrons dans le répertoire racine de notre projet sous le nom `locals.json`. La valeur fournie ici pour `SAMPLE_TABLE` fait référence à notre table DynamoDB dans le cloud.

```
{
    "getAllItemsFunction": {
        "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98"
    }
}
```

Ensuite, nous exécutons `sam local invoke` et transmettons nos variables d'environnement avec l'option `--env-vars`.

```
$ sam local invoke getAllItemsFunction --env-vars locals.json

Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST
some log
END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8
REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8  Init Duration: 1.63 ms  Duration: 564.07 ms       Billed Duration: 565 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode":200,"body":"{}"}
```

## En savoir plus
<a name="using-sam-cli-local-invoke-learn"></a>

Pour obtenir la liste de toutes les options `sam local invoke`, consultez [sam local invoke](sam-cli-command-reference-sam-local-invoke.md).

Pour une démonstration de l'utilisation de `sam local`, consultez [AWS SAM pour le développement local. Tester AWS Cloud des ressources issues d'environnements de développement locaux](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) dans le cadre de la *série Serverless Land Sessions with SAM on YouTube*.

# Présentation des tests avec sam local start-api
<a name="using-sam-cli-local-start-api"></a>

Utilisez la AWS Serverless Application Model `sam local start-api` sous-commande Command Line Interface (AWS SAMCLI) pour exécuter vos AWS Lambda fonctions localement et les tester via un hôte de serveur HTTP local. Ce type de test est utile pour les fonctions Lambda qui sont appelées par un point de terminaison Amazon API Gateway.
+ Pour une introduction à la AWS SAMCLI, voir [Qu'est-ce que c'est AWS SAMCLI ?](what-is-sam-overview.md#what-is-sam-cli)
+ Pour obtenir la liste des options de commande `sam local start-api`, consultez [sam local start-api](sam-cli-command-reference-sam-local-start-api.md).
+ Pour un exemple d'utilisation de `sam local start-api` dans le cadre d'un flux de travail de développement classique, consultez [Étape 7 : (Facultatif) testez votre application localement](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**Note**  
`sam local start-api`prend en charge des fonctions durables avec des fonctionnalités de point de contrôle et de rediffusion automatiques. Les fonctions durables fonctionnent parfaitement avec le point de terminaison API Gateway local.

## Conditions préalables
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Pour utiliser `sam local start-api`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Avant d'utiliser `sam local start-api`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).

## Utilisation de sam local start-api
<a name="using-sam-cli-local-start-api-use"></a>

Lorsque vous utilisez `sam local start-api`, la CLI AWS SAM suppose que le répertoire de travail actuel est le répertoire racine du projet. La CLI AWS SAM recherche d'abord un fichier `template.[yaml|yml]` dans un sous-dossier `.aws-sam`. Si elle ne le trouve pas, la CLI AWS SAM recherche un fichier `template.[yaml|yml]` dans votre répertoire de travail actuel.

**Pour démarrer un serveur HTTP local**

1. À partir du répertoire racine de votre projet, effectuez les actions suivantes :

   ```
   $ sam local start-api <options>
   ```

1. La CLI AWS SAM crée vos fonctions Lambda dans un conteneur Docker local. Elle affiche ensuite l'adresse locale du point de terminaison de votre serveur HTTP. Voici un exemple :

   ```
   $ sam local start-api
   
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
   Containers Initialization is done.
   Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
   You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template
   2023-04-12 14:41:05 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3000
   ```

1. Vous pouvez appeler votre fonction Lambda via le navigateur ou l'invite de commande. Voici un exemple :

   ```
   sam-app$ curl http://127.0.0.1:3000/hello
   {"message": "Hello world!"}%
   ```

1. Lorsque vous modifiez le code de votre fonction Lambda, tenez compte des points suivants pour actualiser votre serveur HTTP local :
   + Si votre application ne possède pas de répertoire `.aws-sam` et que votre fonction utilise un langage interprété, la CLI  AWS SAM met automatiquement à jour votre fonction en créant un nouveau conteneur et en l'hébergeant.
   + Si votre application possède un répertoire `.aws-sam`, vous devez exécuter `sam build` pour mettre à jour votre fonction. Exécutez ensuite à nouveau `sam local start-api` pour héberger la fonction.
   + Si votre fonction utilise un langage compilé ou si votre projet nécessite une prise en charge complexe d'empaquetage, exécutez votre propre solution de création pour mettre à jour votre fonction. Exécutez ensuite à nouveau `sam local start-api` pour héberger la fonction.

### Fonctions Lambda qui utilisent des mécanismes d'autorisation Lambda
<a name="using-sam-cli-local-start-api-authorizers"></a>

**Note**  
Cette fonctionnalité est nouvelle dans la version 1.80.0 de la CLI  AWS SAM. Pour effectuer une mise à niveau, consultez [Mise à niveau de la CLI  AWS SAM en cours](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Pour les fonctions Lambda qui utilisent des mécanismes d'autorisation Lambda, la CLI  AWS SAM invoquera automatiquement votre mécanisme d'autorisation Lambda avant d'appeler le point de terminaison de votre fonction Lambda.

Voici un exemple de démarrage d'un serveur HTTP local pour une fonction qui utilise un mécanisme d'autorisation Lambda :

```
$ sam local start-api
2023-04-17 15:02:13 Attaching import module proxy for analyzing dynamic imports

AWS SAM CLI does not guarantee 100% fidelity between authorizers locally
and authorizers deployed on AWS. Any application critical behavior should
be validated thoroughly before deploying to production.

Testing application behaviour against authorizers deployed on AWS can be done using the sam sync command.

Mounting HelloWorldFunction at http://127.0.0.1:3000/authorized-request [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template
2023-04-17 15:02:13 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:3000
2023-04-17 15:02:13 Press CTRL+C to quit
```

Lorsque vous invoquez le point de terminaison de votre fonction Lambda via le serveur HTTP local, la CLI  AWS SAM invoque d'abord votre mécanisme d'autorisation Lambda. Si l'autorisation est réussie, la CLI  AWS SAM invoquera le point de terminaison de votre fonction Lambda. Voici un exemple :

```
$ curl http://127.0.0.1:3000/authorized-request --header "header:my_token"
{"message": "from authorizer"}%

Invoking app.authorizer_handler (python3.8)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64.

Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container
START RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0 Version: $LATEST
END RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0
REPORT RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0    Init Duration: 1.08 ms    Duration: 628.26 msBilled Duration: 629 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
Invoking app.request_handler (python3.8)
Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64.

Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container
START RequestId: fdc12255-79a3-4365-97e9-9459d06446ff Version: $LATEST
END RequestId: fdc12255-79a3-4365-97e9-9459d06446ff
REPORT RequestId: fdc12255-79a3-4365-97e9-9459d06446ff    Init Duration: 0.95 ms    Duration: 659.13 msBilled Duration: 660 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
No Content-Type given. Defaulting to 'application/json'.
2023-04-17 15:03:03 127.0.0.1 - - [17/Apr/2023 15:03:03] "GET /authorized-request HTTP/1.1" 200 -
```

## Options
<a name="using-sam-cli-local-start-api-options"></a>

### Réutiliser en permanence les conteneurs pour accélérer les appels de fonctions locales
<a name="using-sam-cli-local-start-api-options-warm"></a>

Par défaut, la CLI  AWS SAM crée un nouveau conteneur chaque fois que votre fonction est invoquée via le serveur HTTP local. Utilisez l'option `--warm-containers` pour réutiliser automatiquement votre conteneur pour les appels de fonctions. Cela accélère le temps nécessaire à la CLI  AWS SAM pour préparer votre fonction Lambda pour l'invocation locale. Vous pouvez personnaliser davantage cette option en fournissant l'argument `eager` ou `lazy`.
+ `eager` : les conteneurs pour toutes les fonctions sont chargés au démarrage et persistent entre les appels.
+ `lazy` : les conteneurs ne sont chargés que lorsque chaque fonction est appelée pour la première fois. Ils persistent ensuite pour des appels supplémentaires.

Voici un exemple :

```
$ sam local start-api --warm-containers eager
```

Lorsque vous utilisez `--warm-containers` et modifiez le code de votre fonction Lambda :
+ Si votre application dispose d'un répertoire `.aws-sam`, exécutez `sam build` pour mettre à jour le code de votre code de fonction dans les artefacts de création de votre application.
+ Lorsqu'une modification de code est détectée, la CLI  AWS SAM arrête automatiquement le conteneur de fonctions Lambda.
+ Lorsque vous invoquez à nouveau la fonction, la CLI  AWS SAM crée automatiquement un nouveau conteneur.

### Spécifier une image de conteneur à utiliser pour vos fonctions Lambda
<a name="using-sam-cli-local-start-api-options-specify"></a>

Par défaut, la CLI  AWS SAM utilise les images de base Lambda provenant d'Amazon Elastic Container Registry (Amazon ECR) pour invoquer vos fonctions localement. Utilisez l'option `--invoke-image` pour référencer une image de conteneur personnalisée. Voici un exemple :

```
$ sam local start-api --invoke-image public.ecr.aws/sam/emu-python3.8
```

Vous pouvez spécifier la fonction à utiliser avec l'image de conteneur personnalisée. Voici un exemple :

```
$ sam local start-api --invoke-image Function1=amazon/aws/sam-cli-emulation-image-python3.8
```

### Spécifier un modèle à tester localement
<a name="using-sam-cli-local-start-api-options-template"></a>

Pour spécifier un modèle à référencer par la CLI AWS SAM, utilisez l'option `--template`. Ils AWS SAMCLI chargeront uniquement ce AWS SAM modèle et les ressources vers lesquelles il pointe. Voici un exemple :

```
$ sam local start-api --template myTemplate.yaml
```

### Spécifier l'environnement de développement hôte de votre fonction Lambda
<a name="using-sam-cli-local-start-api-options-dev"></a>

Par défaut, la sous-commande `sam local start-api` crée un serveur HTTP utilisant `localhost` avec l'adresse IP `127.0.0.1`. Vous pouvez personnaliser ces valeurs si votre environnement de développement local est isolé de votre ordinateur local.

Utilisez l'option `--container-host` pour spécifier un hôte. Voici un exemple :

```
$ sam local start-api --container-host host.docker.internal
```

Utilisez l'option `--container-host-interface` pour spécifier l'adresse IP du réseau hôte à laquelle les ports de conteneur doivent se relier. Voici un exemple :

```
$ sam local start-api --container-host-interface 0.0.0.0
```

## Bonnes pratiques
<a name="using-sam-cli-local-start-api-best"></a>

Si votre application possède un répertoire `.aws-sam` qui exécute `sam build`, assurez-vous d'exécuter `sam build` chaque fois que vous mettez à jour le code de votre fonction. Exécutez ensuite `sam local start-api` pour tester localement votre code de fonction mis à jour.

Les tests locaux constituent une excellente solution pour un développement et des tests rapides avant le déploiement dans le cloud. Toutefois, les tests locaux ne valident pas tout, notamment les autorisations entre vos ressources dans le cloud. Dans la mesure du possible, testez vos applications dans le cloud. Nous vous recommandons d'[utiliser `sam sync`](using-sam-cli-sync.md) pour accélérer vos flux de travail de test dans le cloud.

## En savoir plus
<a name="using-sam-cli-local-start-api-learn"></a>

Pour obtenir la liste de toutes les options `sam local start-api`, consultez [sam local start-api](sam-cli-command-reference-sam-local-start-api.md).

# Présentation des tests avec sam local start-lambda
<a name="using-sam-cli-local-start-lambda"></a>

Utilisez la AWS SAMCLI sous-commande `sam local start-lambda` pour appeler votre fonction Lambda via AWS CLI le et. SDKs Cette commande démarre un point de terminaison local qui émule Lambda.
+ Pour une introduction à la AWS SAMCLI, voir [Qu'est-ce que c'est AWS SAMCLI ?](what-is-sam-overview.md#what-is-sam-cli)
+ Pour obtenir la liste des options de commande `sam local start-lambda`, consultez [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

**Note**  
`sam local start-lambda`prend en charge des fonctions durables avec des fonctionnalités de point de contrôle et de rediffusion automatiques. Les fonctions durables fonctionnent parfaitement avec le point de terminaison Lambda local.

## Conditions préalables
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Pour utiliser `sam local start-lambda`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Avant d'utiliser `sam local start-lambda`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).

## Utilisation de sam local start-lambda
<a name="using-sam-cli-local-start-lambda-use"></a>

Lorsque vous utilisez `sam local start-lambda`, la CLI AWS SAM suppose que le répertoire de travail actuel est le répertoire racine du projet. La CLI AWS SAM recherche d'abord un fichier `template.[yaml|yml]` dans un sous-dossier `.aws-sam`. Si elle ne le trouve pas, la CLI AWS SAM recherche un fichier `template.[yaml|yml]` dans votre répertoire de travail actuel.

**Pour utiliser sam local start-lambda**

1. À partir du répertoire racine de votre projet, effectuez les actions suivantes :

   ```
   $ sam local start-lambda <options>
   ```

1. La CLI AWS SAM crée vos fonctions Lambda dans un conteneur Docker local. Elle transmet ensuite l'adresse locale au point de terminaison de votre serveur HTTP. Voici un exemple :

   ```
   $ sam local start-lambda
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/hello_world as /var/task:ro,delegated, inside runtime container
   Containers Initialization is done.
   Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.
   2023-04-13 07:25:43 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3001
   2023-04-13 07:25:43 Press CTRL+C to quit
   ```

1. Utilisez le AWS CLI ou SDKs pour appeler votre fonction Lambda localement.

   Voici un exemple avec utilisation de la AWS CLI :

   ```
   $ aws lambda invoke --function-name "HelloWorldFunction" --endpoint-url "http://127.0.0.1:3001" --no-verify-ssl out.txt
       
   StatusCode: 200
   (END)
   ```

   Voici un exemple d'utilisation du AWS SDK for Python :

   ```
   import boto3
   from botocore.config import Config
   from botocore import UNSIGNED
   
   lambda_client = boto3.client('lambda',
                                endpoint_url="http://127.0.0.1:3001",
                                use_ssl=False,
                                verify=False,
                                config=Config(signature_version=UNSIGNED,
                                              read_timeout=1,
                                              retries={'max_attempts': 0}
                                              )
                               )
   lambda_client.invoke(FunctionName="HelloWorldFunction")
   ```

## Options
<a name="using-sam-cli-local-start-lambda-options"></a>

### Spécifier un modèle
<a name="using-sam-cli-local-start-lambda-options-template"></a>

Pour spécifier un modèle à référencer par la CLI AWS SAM, utilisez l'option `--template`. Ils AWS SAMCLI chargeront uniquement ce AWS SAM modèle et les ressources vers lesquelles il pointe. Voici un exemple :

```
$ sam local start-lambda --template myTemplate.yaml
```

Pour plus d'informations sur les AWS SAM modèles, consultez[AWS SAM anatomie du modèle](sam-specification-template-anatomy.md).

## Bonnes pratiques
<a name="using-sam-cli-local-start-lambda-best"></a>

Si votre application possède un répertoire `.aws-sam` qui exécute `sam build`, assurez-vous d'exécuter `sam build` chaque fois que vous mettez à jour le code de votre fonction. Exécutez ensuite `sam local start-lambda` pour tester localement votre code de fonction mis à jour.

Les tests locaux constituent une excellente solution pour un développement et des tests rapides avant le déploiement dans le cloud. Toutefois, les tests locaux ne valident pas tout, notamment les autorisations entre vos ressources dans le cloud. Dans la mesure du possible, testez vos applications dans le cloud. Nous vous recommandons d'[utiliser `sam sync`](using-sam-cli-sync.md) pour accélérer vos flux de travail de test dans le cloud.

## En savoir plus
<a name="using-sam-cli-local-start-lambda-learn"></a>

Pour obtenir la liste de toutes les options `sam local start-lambda`, consultez [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

# Invoquez localement des fonctions Lambda avec AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

L'invocation locale d'une fonction Lambda avant de la tester ou de la déployer dans le cloud peut présenter de nombreux avantages. Cela vous permet de tester plus rapidement la logique de votre fonction. Les tests locaux réduisent d'abord la probabilité d'identifier les problèmes lors des tests dans le cloud ou pendant le déploiement, ce qui peut vous aider à éviter des coûts inutiles. De plus, les tests locaux facilitent le débogage.

Vous pouvez appeler votre fonction Lambda localement en utilisant la [sam local invoke](sam-cli-command-reference-sam-local-invoke.md) commande et en fournissant l'identifiant logique de la fonction et un fichier d'événements. **sam local invoke**accepte également `stdin` en tant qu'événement. Pour plus d’informations sur les événements, consultez [Evénement](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event) dans le *Guide du développeur AWS Lambda *. Pour plus d'informations sur les formats de messages d'événements provenant de différents AWS services, consultez la section [Utilisation AWS Lambda avec d'autres services](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html) dans le *Guide du AWS Lambda développeur*.

**Note**  
Il n'est pas recommandé d'utiliser les fonctionnalités d'appel local de la SAM CLI dans du code non fiable. Pour vous isoler complètement de votre environnement local, exécutez le code directement dans le service Lambda.

**Note**  
La **sam local invoke** commande correspond à la commande AWS Command Line Interface (AWS CLI) [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html). Vous pouvez utiliser l'une ou l'autre commande pour appeler une fonction Lambda.

Vous devez exécuter la commande **sam local invoke** dans le répertoire du projet qui contient la fonction que vous voulez appeler.

 Exemples :

```
# Invoking function with event file
$ sam local invoke "Ratings" -e event.json

# Invoking function with event via stdin
$ echo '{"message": "Hey, are you there?" }' | sam local invoke --event - "Ratings"

# For more options
$ sam local invoke --help
```

## Fichier de variable d'environnement
<a name="serverless-sam-cli-using-invoke-environment-file"></a>

Pour déclarer localement des variables d'environnement qui remplacent les valeurs définies dans vos modèles, procédez comme suit :

1. Créez un `.env` fichier JSON ou contenant les variables d'environnement à remplacer.

1. Utilisez l'argument `--env-vars` pour remplacer les valeurs définies dans vos modèles.

L'`--env-vars`option prend en charge deux formats de fichiers. Le format de fichier est automatiquement détecté en fonction du contenu du fichier.

### Déclarer des variables d'environnement avec JSON
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Pour déclarer des variables d'environnement qui s'appliquent globalement à toutes les ressources, spécifiez un objet `Parameters` comme suit :

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

Pour déclarer des variables d'environnement différentes pour chaque ressource, spécifiez des objets pour chaque ressource comme suit :

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

Lorsque vous spécifiez des objets pour chaque ressource, vous pouvez utiliser les identifiants suivants, énumérés dans l'ordre de la plus haute à la plus basse priorité :

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identifiant de chemin complet

Vous pouvez utiliser les deux méthodes précédentes de déclaration des variables d'environnement dans un seul fichier. Ce faisant, les variables d'environnement que vous avez fournies pour des ressources spécifiques ont la priorité sur les variables d'environnement globales.

Enregistrez vos variables d'environnement dans un fichier JSON, tel que `env.json`.

### Déclarer des variables d'environnement avec des fichiers .env
<a name="serverless-sam-cli-using-invoke-environment-file-dotenv"></a>

Vous pouvez également utiliser un `.env` fichier pour déclarer des variables d'environnement. Les variables déclarées dans un `.env` fichier s'appliquent globalement à toutes les fonctions, comme l'`Parameters`objet au format JSON.

```
TABLE_NAME=localtable
BUCKET_NAME=amzn-s3-demo-bucket
STAGE=dev
```

Le `.env` format prend en charge les commentaires (lignes commençant par`#`) et les valeurs entre guillemets.

**Note**  
Le `.env` format ne prend en charge que les variables d'environnement globales. Pour déclarer des variables d'environnement spécifiques à une fonction, utilisez le format JSON.

### Remplacement des valeurs des variables d'environnement
<a name="serverless-sam-cli-using-invoke-environment-file-override"></a>

Pour remplacer les variables d'environnement par celles définies dans votre fichier de variables d'environnement, utilisez l'`--env-vars`argument associé aux **start-api** commandes **invoke** ou. Par exemple :

```
# Using a JSON file
sam local invoke --env-vars env.json

# Using a .env file
sam local invoke --env-vars .env
```

## Layers
<a name="serverless-sam-cli-using-invoke-layers"></a>

Si votre application comporte des couches, pour plus d'informations sur la façon de déboguer les problèmes liés aux couches sur votre hôte local, consultez [Améliorez l'efficacité en utilisant les couches Lambda avec AWS SAM](serverless-sam-cli-layers.md).

## En savoir plus
<a name="serverless-sam-cli-using-invoke-learn"></a>

Pour un exemple pratique d'invocation de fonctions localement, voir le [module 2 - Exécuter localement dans The](https://s12d.com/sam-ws-en-local) *Complete AWS SAM Workshop*.

# Exécutez API Gateway localement avec AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

L'exécution locale d'Amazon API Gateway peut présenter de nombreux avantages. Par exemple, l'exécution locale d'API Gateway vous permet de tester les points de terminaison d'API localement avant le déploiement AWS dans le cloud. Si vous effectuez d'abord des tests locaux, vous pouvez souvent réduire les tests et le développement dans le cloud, ce qui peut contribuer à réduire les coûts. De plus, l'exécution locale facilite le débogage. 

Pour démarrer une instance locale d'API Gateway que vous pouvez utiliser pour tester la fonctionnalité de requête/réponse HTTP, utilisez la commande. `sam local start-api` AWS SAMCLI Cette fonctionnalité dispose d'un rechargement à chaud afin que vous puissiez rapidement développer et itérer vos fonctions.

**Note**  
Le *rechargement à chaud* consiste à actualiser uniquement les fichiers qui ont été modifiés, l'état de l'application restant inchangé. En revanche, le *rechargement en direct* consiste à actualiser l'application entière et à perdre l'état de l'application.

Pour des instructions relatives à l'utilisation de la commande `sam local start-api`, veuillez consulter la section [Présentation des tests avec sam local start-api](using-sam-cli-local-start-api.md).

Par défaut, AWS SAM utilise des intégrations de AWS Lambda proxy et prend en charge les deux `HttpApi` types de `Api` ressources. Pour plus d'informations sur les intégrations de proxy pour les types de `HttpApi` ressources, consultez la section [Travailler avec les intégrations de AWS Lambda proxy pour HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) dans le guide du *développeur d'API Gateway*. Pour plus d'informations sur les intégrations de proxy avec les types de ressources `Api`, consultez [Présentation de l'intégration de proxy Lambda API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy) dans le *Guide du développeur API Gateway*.

**Exemple :**

```
$ sam local start-api
```

AWS SAM trouve automatiquement dans votre AWS SAM modèle toutes les fonctions dont les sources d'`Api`événements `HttpApi` ou les sources d'événements sont définies. Ensuite, il monte la fonction sur les chemins HTTP définis.

Dans l'exemple `Api` ci-dessous, la fonction `Ratings` monte `ratings.py:handler()` dans `/ratings` pour les demandes `GET`.

```
Ratings:
  Type: AWS::Serverless::Function
  Properties:
    Handler: ratings.handler
    Runtime: python3.9
    Events:
      Api:
        Type: Api
        Properties:
          Path: /ratings
          Method: get
```

Voici un exemple de réponse `Api` :

```
// Example of a Proxy Integration response
exports.handler = (event, context, callback) => {
    callback(null, {
        statusCode: 200,
        headers: { "x-custom-header" : "my custom header value" },
        body: "hello world"
    });
}
```

Si vous modifiez le code de votre fonction, exécutez la commande `sam build` pour que `sam local start-api` détecte vos modifications.

## Fichier de variable d'environnement
<a name="serverless-sam-cli-using-start-api-environment-variable"></a>

Pour déclarer localement des variables d'environnement qui remplacent les valeurs définies dans vos modèles, procédez comme suit :

1. Créez un fichier JSON qui contient les variables d'environnement à remplacer.

1. Utilisez l'argument `--env-vars` pour remplacer les valeurs définies dans vos modèles.

### Déclaration des variables d'environnement
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Pour déclarer des variables d'environnement qui s'appliquent globalement à toutes les ressources, spécifiez un objet `Parameters` comme suit :

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

Pour déclarer des variables d'environnement différentes pour chaque ressource, spécifiez des objets pour chaque ressource comme suit :

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

Lorsque vous spécifiez des objets pour chaque ressource, vous pouvez utiliser les identifiants suivants, énumérés dans l'ordre de la plus haute à la plus basse priorité :

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identifiant de chemin complet

Vous pouvez utiliser les deux méthodes précédentes de déclaration des variables d'environnement dans un seul fichier. Ce faisant, les variables d'environnement que vous avez fournies pour des ressources spécifiques ont la priorité sur les variables d'environnement globales.

Enregistrez vos variables d'environnement dans un fichier JSON, tel que `env.json`.

### Remplacement des valeurs des variables d'environnement
<a name="serverless-sam-cli-using-start-api-environment-file-override"></a>

Pour remplacer les variables d'environnement par celles définies dans votre fichier JSON, utilisez l'argument `--env-vars` avec les commandes **invoke** ou **start-api**. Par exemple :

```
$ sam local start-api --env-vars env.json
```

## Layers
<a name="serverless-sam-cli-using-start-api-layers"></a>

Si votre application comporte des couches, pour plus d'informations sur la façon de déboguer les problèmes liés aux couches sur votre hôte local, consultez [Améliorez l'efficacité en utilisant les couches Lambda avec AWS SAM](serverless-sam-cli-layers.md).

# Présentation des tests dans le cloud avec sam remote test-event
<a name="using-sam-cli-remote-test-event"></a>

Utilisez la AWS Serverless Application Model commande Command Line Interface (AWS SAM CLI) `sam remote test-event` pour accéder aux événements de test partageables pour vos AWS Lambda fonctions et les gérer.

Pour en savoir plus sur les événements de test partageables, consultez la rubrique relative aux [événements de test partageables](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) dans le *Guide du développeur AWS Lambda *.

**Topics**
+ [Configurer l'CLI AWS SAM pour utiliser sam remote test-event](#using-sam-cli-remote-test-event-setup)
+ [Utilisation de la commande sam remote test-event](#using-sam-cli-remote-test-event-use)
+ [Utilisation des événements de test partageables](#using-sam-cli-remote-test-event-invoke)
+ [Gestion des événements de test partageables](#using-sam-cli-remote-test-event-manage)

## Conditions préalables
<a name="using-sam-cli-remote-test-event-prerequisites"></a>

Pour utiliser `sam remote test-event`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Si vous l'avez déjà AWS SAM CLI installé, nous vous recommandons de passer à la dernière version de la AWS SAMCLI version. Pour en savoir plus, veuillez consulter la section [Mise à niveau de la CLI  AWS SAM en cours](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Avant d'utiliser `sam remote test-event`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).
+ [Présentation de l'utilisation sam sync de la synchronisation avec AWS Cloud](using-sam-cli-sync.md).

## Configurer l'CLI AWS SAM pour utiliser sam remote test-event
<a name="using-sam-cli-remote-test-event-setup"></a>

Effectuez les étapes de configuration suivantes pour utiliser la AWS SAM CLI `sam remote test-event` commande :

1. **Configurez le AWS SAM CLI pour utiliser votre Compte AWS** — Les événements de test partageables pour Lambda sont accessibles et gérés par les utilisateurs de Lambda. Compte AWS Pour configurer le AWS SAM CLI afin d'utiliser votre Compte AWS, voir[Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).

1. **Configurer les autorisations pour les événements de test partageables** – Pour accéder aux événements de test partageables et les gérer, vous devez disposer des autorisations appropriées. Pour en savoir plus, consultez la rubrique relative aux [événements de test partageables](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) dans le *Guide du développeur AWS Lambda *.

## Utilisation de la commande sam remote test-event
<a name="using-sam-cli-remote-test-event-use"></a>

La AWS SAM CLI `sam remote test-event` commande fournit les sous-commandes suivantes que vous pouvez utiliser pour accéder à vos événements de test partageables et les gérer :
+ `delete`— Supprime un événement de test partageable du registre des EventBridge schémas Amazon.
+ `get`— Obtenez un événement de test partageable depuis le registre des EventBridge schémas.
+ `list`— Répertorie les événements de test partageables existants pour une fonction dans le registre des EventBridge schémas.
+ `put`— Enregistrez un événement depuis un fichier local dans le registre des EventBridge schémas.

Pour répertorier ces sous-commandes à l'aide du AWS SAM CLI, exécutez ce qui suit :

```
$ sam remote test-event --help
```

### Suppression d'événements de test partageables
<a name="using-sam-cli-remote-test-event-use-delete"></a>

Vous pouvez supprimer un événement de test partageable à l'aide de la sous-commande `delete` et en indiquant :
+ le nom de l'événement de test partageable à supprimer ;
+ un ID acceptable pour la fonction Lambda associée à l'événement ;
+ Si vous fournissez l'ID logique de la fonction Lambda, vous devez également fournir le nom de AWS CloudFormation pile associé à la fonction Lambda.

Voici un exemple :

```
$ sam remote test-event delete HelloWorldFunction --stack-name sam-app --name demo-event
```

Pour obtenir la liste des options à utiliser avec la sous-commande `delete`, consultez [sam remote test-event delete](sam-cli-command-reference-remote-test-event-delete.md). Vous pouvez également exécuter les opérations suivantes depuis AWS SAM CLI :

```
$ sam remote test-event delete --help
```

### Obtention d'événements de test partageables
<a name="using-sam-cli-remote-test-event-use-get"></a>

Vous pouvez obtenir un événement de test partageable à partir du registre des EventBridge schémas en utilisant la `get` sous-commande associée à ce qui suit :
+ le nom de l'événement de test partageable à obtenir ;
+ un ID acceptable pour la fonction Lambda associée à l'événement ;
+ Si vous fournissez l'ID logique de la fonction Lambda, vous devez également fournir le nom de AWS CloudFormation pile associé à la fonction Lambda.

Voici un exemple qui permet d'obtenir un événement de test partageable nommé `demo-event` qui est associé à la fonction Lambda `HelloWorldFunction` de la pile `sam-app`. Cette commande imprime l'événement sur votre console.

```
$ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event
```

Pour obtenir un événement de test partageable et l'enregistrer sur votre machine locale, utilisez l'option `--output-file` et fournissez un chemin et un nom de fichier. Voici un exemple d'enregistrement de `demo-event.json` comme `demo-event` dans le répertoire de travail actuel :

```
$ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
```

Pour obtenir la liste des options à utiliser avec la sous-commande `get`, consultez [sam remote test-event get](sam-cli-command-reference-remote-test-event-get.md). Vous pouvez également exécuter les opérations suivantes depuis AWS SAM CLI :

```
$ sam remote test-event get --help
```

### Liste d'événements de test partageables
<a name="using-sam-cli-remote-test-event-use-list"></a>

Vous pouvez répertorier tous les événements de test partageables pour une fonction Lambda spécifique à partir du registre de schémas. Utilisez la sous-commande `list` en indiquant :
+ un ID acceptable pour la fonction Lambda associée aux événements ;
+ Si vous fournissez l'ID logique de la fonction Lambda, vous devez également fournir le nom de CloudFormation pile associé à la fonction Lambda.

Voici un exemple qui permet d'obtenir une liste de tous les événements de test partageables associés à la fonction Lambda `HelloWorldFunction` de la pile `sam-app` :

```
$ sam remote test-event list HelloWorldFunction --stack-name sam-app
```

Pour obtenir la liste des options à utiliser avec la sous-commande `list`, consultez [sam remote test-event list](sam-cli-command-reference-remote-test-event-list.md). Vous pouvez également exécuter les opérations suivantes depuis AWS SAM CLI :

```
$ sam remote test-event list --help
```

### Enregistrement d'événements de test partageables
<a name="using-sam-cli-remote-test-event-use-put"></a>

Vous pouvez enregistrer des événements de test partageables dans le registre des EventBridge schémas. Utilisez la sous-commande `put` en indiquant :
+ un ID acceptable pour la fonction Lambda associée à l'événement de test partageable ;
+ un nom d'événement de test partageable ;
+ le chemin du fichier et le nom de l'événement local à charger.

Voici un exemple qui enregistre l'événement local `demo-event.json` comme `demo-event` et qui l'associe à la fonction Lambda `HelloWorldFunction` de la pile `sam-app` :

```
$ sam remote test-event put HelloWorldFunction --stack-name sam-app --name demo-event --file demo-event.json
```

Si un événement de test partageable portant le même nom existe dans le registre du EventBridge schéma, il ne le AWS SAM CLI remplacera pas. Pour le remplacer, ajoutez l'option `--force` à votre commande.

Pour obtenir la liste des options à utiliser avec la sous-commande `put`, consultez [sam remote test-event put](sam-cli-command-reference-remote-test-event-put.md). Vous pouvez également exécuter les opérations suivantes depuis AWS SAM CLI :

```
$ sam remote test-event put --help
```

## Utilisation des événements de test partageables
<a name="using-sam-cli-remote-test-event-invoke"></a>

Utilisez des événements de test partageables pour tester vos fonctions Lambda dans AWS Cloud la commande. `sam remote invoke` Pour en savoir plus, veuillez consulter la section [Transmettre des événements de test partageables à une fonction Lambda dans le cloud](using-sam-cli-remote-invoke.md#using-sam-cli-remote-invoke-shareable).

## Gestion des événements de test partageables
<a name="using-sam-cli-remote-test-event-manage"></a>

Cette rubrique contient des exemples de gestion et d'utilisation d'événements de test partageables.

### Obtenir un événement de test partageable, le modifier et l'utiliser
<a name="using-sam-cli-remote-test-event-manage-example1"></a>

Vous pouvez obtenir un événement de test partageable depuis le registre des EventBridge schémas, le modifier localement et utiliser l'événement de test local avec votre fonction Lambda dans le. AWS Cloud Voici un exemple :

1. **Récupérer l'événement de test partageable** – Utilisez la sous-commande `sam remote test-event get` pour récupérer un événement de test partageable pour une fonction Lambda spécifique et l’enregistrer localement :

   ```
   $ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
   ```

1. **Modifier l'événement de test partageable** – Utilisez l'éditeur de texte de votre choix pour modifier l'événement de test partageable.

1. **Utiliser l'événement de test partageable** – Utilisez la commande `sam remote invoke` et indiquez le chemin et le nom du fichier de l'événement avec `--event-file` :

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json
   ```

### Obtenir un événement de test partageable, le modifier, le charger et l'utiliser
<a name="using-sam-cli-remote-test-event-manage-example2"></a>

Vous pouvez obtenir un événement de test partageable à partir du registre des EventBridge schémas, le modifier localement et le télécharger. Vous pouvez ensuite transmettre l'événement de test partageable directement à votre fonction Lambda dans l' AWS Cloud. Voici un exemple :

1. **Récupérer l'événement de test partageable** – Utilisez la sous-commande `sam remote test-event get` pour récupérer un événement de test partageable pour une fonction Lambda spécifique et l’enregistrer localement :

   ```
   $ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
   ```

1. **Modifier l'événement de test partageable** – Utilisez l'éditeur de texte de votre choix pour modifier l'événement de test partageable.

1. **Télécharger l'événement de test partageable** : utilisez la `sam remote test-event put` sous-commande pour télécharger et enregistrer l'événement de test partageable dans le registre du EventBridge schéma. Dans cet exemple, nous utilisons l'option `--force` pour remplacer une ancienne version de notre test partageable :

   ```
   $ sam remote test-event put HelloWorldFunction --stack-name sam-app --name demo-event --file demo-event.json --force
   ```

1. **Transmettre l'événement de test partageable à votre fonction Lambda** – Utilisez la commande `sam remote invoke` pour transmettre l'événement de test partageable directement à votre fonction Lambda dans l' AWS Cloud :

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event
   ```

# Présentation des tests dans le cloud avec sam remote invoke
<a name="using-sam-cli-remote-invoke"></a>

Utilisez la AWS Serverless Application Model commande Command Line Interface (AWS SAM CLI) `sam remote invoke` pour interagir avec les AWS ressources prises en charge dans le AWS Cloud. Vous pouvez utiliser `sam remote invoke` pour appeler les ressources suivantes :
+ **Amazon Kinesis Data** Streams : envoyez des enregistrements de données aux applications Kinesis Data Streams.
+ **AWS Lambda**— Invoquez et transmettez des événements à vos fonctions Lambda.
+ **Amazon Simple Queue Service (Amazon SQS**) — Envoyez des messages aux files d'attente Amazon SQS.
+ **AWS Step Functions**— Invoquez les machines d'état Step Functions pour démarrer l'exécution.

Pour une introduction à la AWS SAMCLI, voir [Qu'est-ce que c'est AWS SAMCLI ?](what-is-sam-overview.md#what-is-sam-cli)

Pour un exemple d'utilisation de `sam remote invoke` dans le cadre d'un flux de travail de développement classique, consultez [Étape 5 : Interagissez avec votre fonction dans AWS Cloud](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-remote-invoke).

**Topics**
+ [Utilisation de la même commande d'invocation à distance](#using-sam-cli-remote-invoke-use)
+ [Utilisation des options de commande sam remote invoke](#using-sam-cli-remote-invoke-options)
+ [Configurez le fichier de configuration de votre projet](#using-sam-cli-remote-invoke-configure)
+ [Exemples](#using-sam-cli-remote-invoke-examples)
+ [Liens connexes](#using-sam-cli-remote-invoke-links)

## Conditions préalables
<a name="using-sam-cli-remote-invoke-prerequisites"></a>

Pour utiliser `sam remote invoke`, installez la CLI AWS SAM en procédant comme suit :
+ [AWS SAM prérequis](prerequisites.md).
+ [Installer la CLI  AWS SAM](install-sam-cli.md).

Nous vous recommandons également de passer à la dernière version du AWS SAMCLI. Pour en savoir plus, veuillez consulter la section [Mise à niveau de la CLI  AWS SAM en cours](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Avant d'utiliser `sam remote invoke`, nous vous recommandons d'avoir des connaissances de base sur les points suivants :
+ [Configuration de la CLI  AWS SAM](using-sam-cli-configure.md).
+ [Créez votre application dans AWS SAM](using-sam-cli-init.md).
+ [Initiation à la construction avec AWS SAM](using-sam-cli-build.md).
+ [Présentation du déploiement avec AWS SAM](using-sam-cli-deploy.md).
+ [Présentation de l'utilisation sam sync de la synchronisation avec AWS Cloud](using-sam-cli-sync.md).

## Utilisation de la même commande d'invocation à distance
<a name="using-sam-cli-remote-invoke-use"></a>

Avant d'utiliser cette commande, votre ressource doit être déployée sur  AWS Cloud.

Utilisez la structure de commande suivante et exécutez-la à partir du répertoire racine de votre projet :

```
$ sam remote invoke <arguments> <options>
```

**Note**  
Cette page affiche les options proposées à l'invite de commande. Vous pouvez également configurer les options dans le fichier de configuration de votre projet au lieu de les transmettre à l'invite de commandes. Pour en savoir plus, consultez [Configuration des paramètres de projet](using-sam-cli-configure.md#using-sam-cli-configure-project).

Pour une description des `sam remote invoke` arguments et des options, consultez[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Utilisation avec Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-use-kinesis"></a>

Vous pouvez envoyer des enregistrements de données à une application Kinesis Data Streams. Il AWS SAM CLI enverra votre enregistrement de données et renverra un identifiant de partition et un numéro de séquence. Voici un exemple :

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world
	
	Putting record to Kinesis data stream KinesisStream                                                             
	Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide
	a JSON string as event                                                                                          
	{
	  "ShardId": "shardId-000000000000",
	  "SequenceNumber": "49646251411914806775980850790050483811301135051202232322"
	}%
```

**Pour envoyer un enregistrement de données**

1. Entrez une valeur d'ID de ressource comme argument pour votre application Kinesis Data Streams. Pour plus d'informations sur une ressource valide IDs, consultez la section [Identifiant de ressource](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Fournissez l'enregistrement de données sous forme d'événement à envoyer à votre application Kinesis Data Streams. Vous pouvez fournir l'événement sur la ligne de commande à l'aide de l'`--event`option, ou à partir d'un fichier à l'aide de`--event-file`. Si vous ne fournissez aucun événement, AWS SAM CLI envoie un événement vide.

### Utilisation avec les fonctions Lambda
<a name="using-sam-cli-remote-invoke-use-lambda"></a>

Vous pouvez appeler une fonction Lambda dans le cloud et transmettre un événement vide ou fournir un événement sur la ligne de commande ou à partir d'un fichier. Il AWS SAM CLI invoquera votre fonction Lambda et renverra sa réponse. Voici un exemple :

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app

Invoking Lambda Function HelloWorldFunction                                       
START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST
END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9
REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9  Duration: 6.62 ms       Billed Duration: 7 ms     Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 164.06 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

**Pour appeler une fonction Lambda**

1. Fournissez une valeur d'ID de ressource comme argument pour votre fonction Lambda. Pour plus d'informations sur une ressource valide IDs, consultez la section [Identifiant de ressource](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Fournissez un événement à envoyer à votre fonction Lambda. Vous pouvez fournir l'événement sur la ligne de commande à l'aide de l'`--event`option, ou à partir d'un fichier à l'aide de`--event-file`. Si vous ne fournissez aucun événement, AWS SAM CLI envoie un événement vide.

#### Fonctions Lambda configurées avec le streaming de réponses
<a name="using-sam-cli-remote-invoke-invoke-stream"></a>

La commande `sam remote invoke` prend en charge les fonctions Lambda configurées pour diffuser les réponses. Vous pouvez configurer une fonction Lambda pour diffuser les réponses à l'aide de la `FunctionUrlConfig` propriété de vos AWS SAM modèles. Lorsque vous utilisez `sam remote invoke`, la CLI  AWS SAM détecte automatiquement votre configuration Lambda et l'invoque avec le streaming des réponses.

Pour obtenir un exemple, consultez [Configuration d'une fonction Lambda pour le streaming des réponses](#using-sam-cli-remote-invoke-examples-lambda-stream).

#### Transmettre des événements de test partageables à une fonction Lambda dans le cloud
<a name="using-sam-cli-remote-invoke-shareable"></a>

Les événements de test partageables sont des événements de test que vous pouvez partager avec d'autres personnes dans le même Compte AWS. Pour en savoir plus, consultez la rubrique relative aux [événements de test partageables](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) dans le *Guide du développeur AWS Lambda *.

##### Accès et gestion des événements de test partageables
<a name="using-sam-cli-remote-invoke-shareable-access"></a>

Vous pouvez utiliser la AWS SAM CLI `sam remote test-event` commande pour accéder aux événements de test partageables et les gérer. Par exemple, vous pouvez utiliser `sam remote test-event` pour effectuer les opérations suivantes :
+ Récupérez les événements de test partageables depuis le registre des EventBridge schémas Amazon.
+ Modifiez les événements de test partageables localement et téléchargez-les dans le registre des EventBridge schémas.
+ Supprimez les événements de test partageables du registre des EventBridge schémas.

Pour en savoir plus, veuillez consulter la section [Présentation des tests dans le cloud avec sam remote test-event](using-sam-cli-remote-test-event.md).

##### Transmettre un événement de test partageable à une fonction Lambda dans le cloud
<a name="using-sam-cli-remote-invoke-shareable-pass"></a>

Pour transmettre un événement de test partageable du registre de EventBridge schémas à votre fonction Lambda dans le cloud, utilisez l'option et `--test-event-name` indiquez le nom de l'événement de test partageable. Voici un exemple :

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event
```

Si vous enregistrez l'événement de test partageable localement, vous pouvez utiliser l'option `--event-file` et fournir le chemin et le nom du fichier de l'événement de test local. Voici un exemple :

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json
```

### Utilisation d’ avec Amazon SQS
<a name="using-sam-cli-remote-invoke-use-sqs"></a>

Vous pouvez envoyer des messages aux files d'attente Amazon SQS. Le résultat AWS SAM CLI renvoie ce qui suit :
+ ID de message
+ MD5 du corps du message
+ Métadonnées de réponse

 Voici un exemple :

```
$ sam remote invoke MySqsQueue --stack-name sqs-example -event hello

Sending message to SQS queue MySqsQueue                                                                         
{
  "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592",
  "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652"
}%
```

**Pour envoyer un message**

1. Fournissez une valeur d'ID de ressource comme argument pour la file d'attente Amazon SQS. Pour plus d'informations sur une ressource valide IDs, consultez la section [Identifiant de ressource](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Indiquez un événement à envoyer à votre file d'attente Amazon SQS. Vous pouvez fournir l'événement sur la ligne de commande à l'aide de l'`--event`option, ou à partir d'un fichier à l'aide de`--event-file`. Si vous ne fournissez aucun événement, AWS SAM CLI envoie un événement vide.

### Utilisation avec Step Functions
<a name="using-sam-cli-remote-invoke-use-sf"></a>

Vous pouvez appeler une machine d'état Step Functions pour démarrer l'exécution. AWS SAM CLIAttendra que le flux de travail de la machine à états soit terminé et renverra un résultat de la dernière étape de l'exécution. Voici un exemple :

```
$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example --event '{"is_developer": true}'

Invoking Step Function HelloWorldStateMachine                                                                   
"Hello Developer World"%
```

**Pour invoquer une machine à états**

1. Fournissez une valeur d'ID de ressource comme argument pour la machine d'état Step Functions. Pour plus d'informations sur une ressource valide IDs, consultez la section [Identifiant de ressource](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Fournissez un événement à envoyer à votre machine d'état. Vous pouvez fournir l'événement sur la ligne de commande à l'aide de l'`--event`option, ou à partir d'un fichier à l'aide de`--event-file`. Si vous ne fournissez aucun événement, AWS SAM CLI envoie un événement vide.

## Utilisation des options de commande sam remote invoke
<a name="using-sam-cli-remote-invoke-options"></a>

Cette section décrit certaines des principales options que vous pouvez utiliser avec la `sam remote invoke` commande. Pour une liste complète des options, voir[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Transférez un événement à votre ressource
<a name="using-sam-cli-remote-invoke-options-event"></a>

Utilisez les options suivantes pour transmettre des événements à vos ressources dans le cloud :
+ `--event`— Passez un événement sur la ligne de commande.
+ `--event-file`— Transmet un événement depuis un fichier.

#### Exemples Lambda
<a name="using-sam-cli-remote-invoke-options-event-lambda-examples"></a>

**`--event`À utiliser pour transmettre un événement sur la ligne de commande sous forme de valeur de chaîne :**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event '{"message": "hello!"}'

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Version: $LATEST
END RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab
REPORT RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab  Duration: 16.41 ms      Billed Duration: 17 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 185.96 ms
{"statusCode":200,"body":"{\"message\":\"hello!\"}"}%
```

**`--event-file`À utiliser pour transmettre un événement depuis un fichier et fournir le chemin d'accès au fichier :**

```
$ cat event.json
			
{"message": "hello from file"}%    
			
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file event.json       

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Version: $LATEST
END RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9
REPORT RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9  Duration: 21.15 ms      Billed Duration: 22 ms  Memory Size: 128 MB     Max Memory Used: 67 MB
{"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%
```

**Réussissez un événement en utilisant `stdin` :**

```
$ cat event.json
			
{"message": "hello from file"}%    
                                                                       
$ cat event.json | sam remote invoke HelloWorldFunction --stack-name sam-app --event-file -

Reading event from stdin (you can also pass it from file with --event-file)                               
Invoking Lambda Function HelloWorldFunction                                                               
START RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Version: $LATEST
END RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a
REPORT RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a  Duration: 1.36 ms       Billed Duration: 2 ms   Memory Size: 128 MB       Max Memory Used: 67 MB
{"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%
```

### Configuration de la sortie de AWS SAMCLI réponse
<a name="using-sam-cli-remote-invoke-options-output"></a>

Lorsque vous invoquez une ressource prise en charge avec`sam remote invoke`, le AWS SAMCLI renvoie une réponse contenant les éléments suivants :
+ **Métadonnées de la demande** : métadonnées associées à la demande. Cela inclut un ID de demande et l'heure de début de la demande.
+ **Réponse de la ressource** : réponse de votre ressource après avoir été invoquée dans le cloud.

Vous pouvez utiliser `--output` cette option pour configurer la réponse AWS SAM CLI de sortie. Les valeurs suivantes sont disponibles avec :
+ `json`— Les métadonnées et la réponse aux ressources sont renvoyées dans une JSON structure. La réponse contient le résultat complet SDK.
+ `text`— Les métadonnées sont renvoyées sous forme de structure de texte. La réponse de la ressource est renvoyée dans le format de sortie de la ressource.

Voici un exemple de résultat `json` :

```
$ sam remote invoke --stack-name sam-app --output json

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
{
  "ResponseMetadata": {
    "RequestId": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "date": "Mon, 19 Jun 2023 17:15:46 GMT",
      "content-type": "application/json",
      "content-length": "57",
      "connection": "keep-alive",
      "x-amzn-requestid": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41",
      "x-amzn-remapped-content-length": "0",
      "x-amz-executed-version": "$LATEST",
      "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==",
      "x-amzn-trace-id": "root=1-64908d42-17dab270273fcc6b527dd6b8;sampled=0;lineage=2301f8dc:0"
    },
    "RetryAttempts": 0
  },
  "StatusCode": 200,
  "LogResult": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==",
  "ExecutedVersion": "$LATEST",
  "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}"
}%
```

Lorsque vous spécifiez un résultat `json`, la réponse complète est renvoyée à `stdout`. Voici un exemple :

```
$ sam remote invoke --stack-name sam-app --output json 1> stdout.log

Invoking Lambda Function HelloWorldFunction           
                                                                                                                                                                                                          
$ cat stdout.log
			
{
  "ResponseMetadata": {
    "RequestId": "d30d280f-8188-4372-bc94-ce0f1603b6bb",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "date": "Mon, 19 Jun 2023 17:35:56 GMT",
      "content-type": "application/json",
      "content-length": "57",
      "connection": "keep-alive",
      "x-amzn-requestid": "d30d280f-8188-4372-bc94-ce0f1603b6bb",
      "x-amzn-remapped-content-length": "0",
      "x-amz-executed-version": "$LATEST",
      "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=",
      "x-amzn-trace-id": "root=1-649091fc-771473c7778689627a6122b7;sampled=0;lineage=2301f8dc:0"
    },
    "RetryAttempts": 0
  },
  "StatusCode": 200,
  "LogResult": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=",
  "ExecutedVersion": "$LATEST",
  "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}"
}%
```

Voici un exemple de résultat `text` :

```
$ sam remote invoke --stack-name sam-app --output text

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Version: $LATEST
END RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6
REPORT RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6  Duration: 9.13 ms       Billed Duration: 10 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 165.50 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

Lorsque vous spécifiez un résultat `text`, la sortie d'exécution de la fonction Lambda (par exemple, les journaux) est renvoyée vers `stderr`. La charge utile de la fonction Lambda est renvoyée à `stdout`. Voici un exemple :

```
$ sam remote invoke --stack-name sam-app --output text 2> stderr.log

{"statusCode":200,"body":"{\"message\":\"hello world\"}"}% 
                                                                                                                                                                                                     
$ cat stderr.log

Invoking Lambda Function HelloWorldFunction
START RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Version: $LATEST
END RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891
REPORT RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891  Duration: 40.62 ms      Billed Duration: 41 ms  Memory Size: 128 MB     Max Memory Used: 68 MB

$ sam remote invoke --stack-name sam-app --output text 1> stdout.log
 
Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Version: $LATEST
END RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd
REPORT RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd  Duration: 2.31 ms       Billed Duration: 3 ms   Memory Size: 128 MB     Max Memory Used: 67 MB

$ cat stdout.log

{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

### Personnaliser les paramètres Boto3
<a name="using-sam-cli-remote-invoke-options-boto3"></a>

En `sam remote invoke` effet, il AWS SAM CLI utilise le AWS SDK pour Python (Boto3) afin d'interagir avec vos ressources dans le cloud. Vous pouvez utiliser l’option `--parameter` pour personnaliser les paramètres Boto3. Pour obtenir la liste des paramètres pris en charge que vous pouvez personnaliser, reportez-vous à la section `--parameter`.

#### Exemples
<a name="using-sam-cli-remote-invoke-options-boto3-examples"></a>

**Appelez une fonction Lambda pour valider les valeurs des paramètres et vérifier les autorisations :**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="DryRun"
```

**Utilisez l'`--parameter`option plusieurs fois dans une seule commande pour fournir plusieurs paramètres :**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="Event" --parameter LogType="None"
```

### Autres options
<a name="using-sam-cli-remote-invoke-options-other"></a>

Pour obtenir la liste complète des options `sam remote invoke`, consultez la section [sam remote invoke](sam-cli-command-reference-remote-invoke.md).

## Configurez le fichier de configuration de votre projet
<a name="using-sam-cli-remote-invoke-configure"></a>

Pour configurer `sam remote invoke` dans votre fichier de configuration, utilisez `remote_invoke` dans votre tableau. Voici un exemple de fichier `samconfig.toml` qui configure les valeurs par défaut de la commande `sam remote invoke`.

```
...
version =0.1

[default]
...
[default.remote_invoke.parameters]
stack_name = "cloud-app"
event = '{"message": "Hello!"}'
```

## Exemples
<a name="using-sam-cli-remote-invoke-examples"></a>

Pour un exemple d'utilisation de base`sam remote invoke`, consultez la section [Tester des AWS Lambda fonctions AWS SAM à distance](https://aws.amazon.com/blogs/compute/testing-aws-lambda-functions-with-aws-sam-remote-invoke/) dans le *AWS Compute Blog*.

### Exemples de Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-examples-kinesis"></a>

#### Exemples de base
<a name="using-sam-cli-remote-invoke-examples-kinesis-basic"></a>

**Envoyez un enregistrement de données à une application Kinesis Data Streams à partir d'un fichier. L'application Kinesis Data Streams est identifiée en fournissant un ARN pour l'ID de ressource :**

```
$ sam remote invoke arn:aws:kinesis:us-west-2:01234567890:stream/kinesis-example-KinesisStream-BgnLcAey4xUQ --event-file event.json
```

**Envoyez un événement fourni sur la ligne de commande à une application Kinesis Data Streams :**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world

Putting record to Kinesis data stream KinesisStream                                                             
Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide
a JSON string as event                                                                                          
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980903986194508740483329854174920706"
}%
```

**Obtenez l'identifiant physique de l'application Kinesis Data Streams. Indiquez ensuite un événement sur la ligne de commande :**

```
$ sam list resources --stack-name kinesis-example --output json

[
  {
    "LogicalResourceId": "KinesisStream",
    "PhysicalResourceId": "kinesis-example-KinesisStream-ZgnLcQey4xUQ"
  }
]

$ sam remote invoke kinesis-example-KinesisStream-ZgnLcQey4xUQ --event hello

Putting record to Kinesis data stream KinesisStream                                                             
Auto converting value 'hello' into JSON '"hello"'. If you don't want auto-conversion, please provide a JSON     
string as event                                                                                                 
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904340716841045751814812900261890"
}%
```

**Fournissez une chaîne JSON sur la ligne de commande en tant qu'événement :**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"method": "GET", "body": ""}'                      

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904492868617924990209230536441858"
}%
```

**Envoyez un événement vide à l'application Kinesis Data Streams :**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904866469008589597168190416224258"
}%
```

**Renvoie la AWS SAM CLI réponse au format JSON :**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980905078409420803696667195489648642",
  "ResponseMetadata": {
    "RequestId": "ebbbd307-3e9f-4431-b67c-f0715e9e353e",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "ebbbd307-3e9f-4431-b67c-f0715e9e353e",
      "x-amz-id-2": "Q3yBcgTwtPaQTV26IKclbECmZikUYOzKY+CzcxA84ZHgCkc5T2N/ITWg6RPOQcWw8Gn0tNPcEJBEHyVVqboJAPgCritqsvCu",
      "date": "Thu, 09 Nov 2023 18:13:10 GMT",
      "content-type": "application/x-amz-json-1.1",
      "content-length": "110"
    },
    "RetryAttempts": 0
  }
}%
```

**Renvoyez la sortie JSON à stdout :**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json 1> stdout.log

Putting record to Kinesis data stream KinesisStream                                                             

$ cat stdout.log
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980906397777867595039988349006774274",
  "ResponseMetadata": {
    "RequestId": "f4290006-d84b-b1cd-a9ee-28306eeb2939",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "f4290006-d84b-b1cd-a9ee-28306eeb2939",
      "x-amz-id-2": "npCqz+IBKpoL4sQ1ClbUmxuJlbeA24Fx1UgpIrS6mm2NoIeV2qdZSN5AhNurdssykXajBrXaC9anMhj2eG/h7Hnbf+bPuotU",
      "date": "Thu, 09 Nov 2023 18:33:26 GMT",
      "content-type": "application/x-amz-json-1.1",
      "content-length": "110"
    },
    "RetryAttempts": 0
  }
}%
```

### Exemples Lambda
<a name="using-sam-cli-remote-invoke-examples-lambda"></a>

#### Exemples de base
<a name="using-sam-cli-remote-invoke-examples-lambda-basic"></a>

**Invoquez une fonction Lambda en fournissant l'ARN comme ID de ressource :**

```
$ sam remote invoke arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-ohRFEn2RuAvp
```

**Invoquez une fonction Lambda en fournissant l'identifiant logique en tant qu'ID de ressource :**

Vous devez également fournir le nom de la CloudFormation pile à l'aide de l'`--stack-name`option. Voici un exemple :

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app
```

Si votre application contient une seule fonction Lambda, vous n'avez pas à spécifier son ID logique. Vous pouvez uniquement fournir l’option `--stack-name`. Voici un exemple :

```
$ sam remote invoke --stack-name sam-app
```

**Invoquez une fonction Lambda en fournissant l'identifiant physique en tant qu'identifiant de ressource :**

L'identifiant physique est créé lorsque vous déployez à l'aide de CloudFormation.

```
$ sam remote invoke sam-app-HelloWorldFunction-TZvxQRFNv0k4
```

**Invoquez une fonction Lambda d'une pile enfant :**

Pour cet exemple, notre application contient la structure de répertoires suivante :

```
lambda-example
├── childstack
│   ├── function
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── template.yaml
├── events
│   └── event.json
├── samconfig.toml
└── template.yaml
```

Pour appeler la fonction Lambda de notre`childstack`, nous exécutons ce qui suit :

```
$ sam remote invoke ChildStack/HelloWorldFunction --stack-name lambda-example

Invoking Lambda Function HelloWorldFunction                                                                     
START RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Version: $LATEST
END RequestId: 207a864b-e67c-4307-8478-365b004d4bcd
REPORT RequestId: 207a864b-e67c-4307-8478-365b004d4bcd  Duration: 1.27 ms       Billed Duration: 2 ms   Memory Size: 128 MB     Max Memory Used: 36 MB  Init Duration: 111.07 ms
{"statusCode": 200, "body": "{\"message\": \"Hello\", \"received_event\": {}}"}%
```

#### Configuration d'une fonction Lambda pour le streaming des réponses
<a name="using-sam-cli-remote-invoke-examples-lambda-stream"></a>

Dans cet exemple, nous utilisons la CLI  AWS SAM pour initialiser une nouvelle application sans serveur qui contient une fonction Lambda configurée pour diffuser sa réponse. Nous déployons notre application sur le AWS Cloud et l'utilisons `sam remote invoke` pour interagir avec notre fonction dans le cloud.

Nous commençons par exécuter la commande `sam init` pour créer une nouvelle application sans serveur. Nous sélectionnons le modèle de démarrage rapide **Lambda Response Streaming** et nommons notre application. **lambda-streaming-nodejs-app**

```
$ sam init
	
	You can preselect a particular runtime or package type when using the `sam init` experience.
	Call `sam init --help` to learn more.
	
	Which template source would you like to use?
	        1 - AWS Quick Start Templates
	        2 - Custom Template Location
	Choice: 1
	
	Choose an AWS Quick Start application template
	        1 - Hello World Example
	        ...
	        9 - Lambda Response Streaming
	        ...
	        15 - Machine Learning
	Template: 9
	
	Which runtime would you like to use?
	        1 - go (provided.al2)
	        2 - nodejs18.x
	        3 - nodejs16.x
	Runtime: 2
	
	Based on your selections, the only Package type available is Zip.
	We will proceed to selecting the Package type as Zip.
	
	Based on your selections, the only dependency manager available is npm.
	We will proceed copying the template using npm.
	
	Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER
	
	Would you like to enable monitoring using CloudWatch Application Insights?
	For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER
	
	Project name [sam-app]: lambda-streaming-nodejs-app
	
	    -----------------------
	    Generating application:
	    -----------------------
	    Name: lambda-streaming-nodejs-app
	    Runtime: nodejs18.x
	    Architectures: x86_64
	    Dependency Manager: npm
	    Application Template: response-streaming
	    Output Directory: .
	    Configuration file: lambda-streaming-nodejs-app/samconfig.toml
	    
	    Next steps can be found in the README file at lambda-streaming-nodejs-app/README.md
	        
	
	Commands you can use next
	=========================
	[*] Create pipeline: cd lambda-streaming-nodejs-app && sam pipeline init --bootstrap
	[*] Validate SAM template: cd lambda-streaming-nodejs-app && sam validate
	[*] Test Function in the Cloud: cd lambda-streaming-nodejs-app && sam sync --stack-name {stack-name} --watch
```

 AWS SAMCLICela crée notre projet avec la structure suivante :

```
lambda-streaming-nodejs-app
	├── README.md
	├── __tests__
	│   └── unit
	│       └── index.test.js
	├── package.json
	├── samconfig.toml
	├── src
	│   └── index.js
	└── template.yaml
```

Voici un exemple de code de fonction Lambda :

```
exports.handler = awslambda.streamifyResponse(
	  async (event, responseStream, context) => {
	    const httpResponseMetadata = {
	      statusCode: 200,
	      headers: {
	        "Content-Type": "text/html",
	        "X-Custom-Header": "Example-Custom-Header"
	      }
	    };
	
	    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
	    // It's recommended to use a `pipeline` over the `write` method for more complex use cases.
	    // Learn more: https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html
	    responseStream.write("<html>");
	    responseStream.write("<p>First write!</p>");
	
	    responseStream.write("<h1>Streaming h1</h1>");
	    await new Promise(r => setTimeout(r, 1000));
	    responseStream.write("<h2>Streaming h2</h2>");
	    await new Promise(r => setTimeout(r, 1000));
	    responseStream.write("<h3>Streaming h3</h3>");
	    await new Promise(r => setTimeout(r, 1000));
	
	    // Long strings will be streamed
	    const loremIpsum1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.";
	    responseStream.write(`<p>${loremIpsum1}</p>`);
	    await new Promise(r => setTimeout(r, 1000));
	
	    responseStream.write("<p>DONE!</p>");
	    responseStream.write("</html>");
	    responseStream.end();
	  }
	);
```

Voici un exemple de fichier `template.yaml`. Le streaming des réponses pour notre fonction Lambda est configuré à l'aide de la propriété `FunctionUrlConfig`.

```
AWSTemplateFormatVersion: '2010-09-09'
	Transform: AWS::Serverless-2016-10-31
	
	Description: >
	  Sample SAM Template for lambda-streaming-nodejs-app
	  
	Resources:
	  StreamingFunction:
	    Type: AWS::Serverless::Function
	    Properties:
	      CodeUri: src/
	      Handler: index.handler
	      Runtime: nodejs18.x
	      Architectures:
	        - x86_64
	      Timeout: 10
	      FunctionUrlConfig:
	        AuthType: AWS_IAM
	        InvokeMode: RESPONSE_STREAM
	
	Outputs:
	  StreamingFunction:
	    Description: "Streaming Lambda Function ARN"
	    Value: !GetAtt StreamingFunction.Arn
	  StreamingFunctionURL:
	    Description: "Streaming Lambda Function URL"
	    Value: !GetAtt StreamingFunctionUrl.FunctionUrl
```

Généralement, vous pouvez utiliser `sam build` et `sam deploy --guided` pour créer et déployer une application de production. Dans cet exemple, nous allons utiliser un environnement de développement et utiliser la `sam sync` commande pour créer et déployer notre application.

**Note**  
La commande `sam sync` est recommandée pour les environnements de développement. Pour en savoir plus, veuillez consulter la section [Présentation de l'utilisation sam sync de la synchronisation avec AWS Cloud](using-sam-cli-sync.md).

Avant de lancer `sam sync`, nous vérifions que notre projet est correctement configuré dans notre fichier `samconfig.toml`. Plus important encore, nous vérifions les valeurs de `stack_name` et `watch`. Ces valeurs étant spécifiées dans notre fichier de configuration, nous n'avons pas à les fournir sur la ligne de commande.

```
version = 0.1
	
	[default]
	[default.global.parameters]
	stack_name = "lambda-streaming-nodejs-app"
	
	[default.build.parameters]
	cached = true
	parallel = true
	
	[default.validate.parameters]
	lint = true
	
	[default.deploy.parameters]
	capabilities = "CAPABILITY_IAM"
	confirm_changeset = true
	resolve_s3 = true
	s3_prefix = "lambda-streaming-nodejs-app"
	region = "us-west-2"
	image_repositories = []
	
	[default.package.parameters]
	resolve_s3 = true
	
	[default.sync.parameters]
	watch = true
	
	[default.local_start_api.parameters]
	warm_containers = "EAGER"
	
	[default.local_start_lambda.parameters]
	warm_containers = "EAGER"
```

Ensuite, nous exécutons `sam sync` pour déployer notre application. Comme l'option `--watch` est configurée dans notre fichier de configuration, la CLI  AWS SAM créera notre application, la déploiera et surveillera les modifications.

```
$ sam sync
	
	The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code   
	without                                                                                                   
	performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.               
	**The sync command should only be used against a development stack**.                                     
	                                                                                                          
	Queued infra sync. Waiting for in progress code syncs to complete...                                      
	Starting infra sync.                                                                                      
	Building codeuri:                                                                                         
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture: x86_64 functions: StreamingFunction  
	package.json file not found. Continuing the build without dependencies.                                   
	Running NodejsNpmBuilder:CopySource                                                                       
	
	Build Succeeded
	
	Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp.
	Execute the following command to deploy the packaged template
	sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp --stack-name <YOUR STACK NAME>
	
	
	        Deploying with following values
	        ===============================
	        Stack name                   : lambda-streaming-nodejs-app
	        Region                       : us-west-2
	        Disable rollback             : False
	        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
	        Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
	        Parameter overrides          : {}
	        Signing Profiles             : null
	
	Initiating deployment
	=====================
	
	
	2023-06-20 12:11:16 - Waiting for stack create/update to complete
	
	CloudFormation events from stack operations (refresh every 0.5 seconds)
	-----------------------------------------------------------------------------------------------------
	ResourceStatus            ResourceType              LogicalResourceId         ResourceStatusReason    
	-----------------------------------------------------------------------------------------------------
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   lambda-streaming-         Transformation          
	                          ack                       nodejs-app                succeeded               
	CREATE_IN_PROGRESS        AWS::IAM::Role            StreamingFunctionRole     -                       
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   AwsSamAutoDependencyLay   -                       
	                          ack                       erNestedStack                                     
	CREATE_IN_PROGRESS        AWS::IAM::Role            StreamingFunctionRole     Resource creation       
	                                                                              Initiated               
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   AwsSamAutoDependencyLay   Resource creation       
	                          ack                       erNestedStack             Initiated               
	CREATE_COMPLETE           AWS::IAM::Role            StreamingFunctionRole     -                       
	CREATE_COMPLETE           AWS::CloudFormation::St   AwsSamAutoDependencyLay   -                       
	                          ack                       erNestedStack                                     
	CREATE_IN_PROGRESS        AWS::Lambda::Function     StreamingFunction         -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Function     StreamingFunction         Resource creation       
	                                                                              Initiated               
	CREATE_COMPLETE           AWS::Lambda::Function     StreamingFunction         -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Url          StreamingFunctionUrl      -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Url          StreamingFunctionUrl      Resource creation       
	                                                                              Initiated               
	CREATE_COMPLETE           AWS::Lambda::Url          StreamingFunctionUrl      -                       
	CREATE_COMPLETE           AWS::CloudFormation::St   lambda-streaming-         -                       
	                          ack                       nodejs-app                                        
	-----------------------------------------------------------------------------------------------------
	
	CloudFormation outputs from deployed stack
	-------------------------------------------------------------------------------------------------------
	Outputs                                                                                               
	-------------------------------------------------------------------------------------------------------
	Key                 StreamingFunction                                                                 
	Description         Streaming Lambda Function ARN                                                     
	Value               arn:aws:lambda:us-west-2:012345678910:function:lambda-streaming-nodejs-app-       
	StreamingFunction-gUmhO833A0vZ                                                                        
	
	Key                 StreamingFunctionURL                                                              
	Description         Streaming Lambda Function URL                                                     
	Value               https://wxgkcc2dyntgtrwhf2dgdcvylu0rnnof.lambda-url.us-west-2.on.aws/             
	-------------------------------------------------------------------------------------------------------
	
	                                                                                                          
	Stack creation succeeded. Sync infra completed.                                                           
	                                                                                                          
	Infra sync completed.
```

Maintenant que notre fonction est déployée dans le cloud, nous pouvons utiliser `sam remote invoke` pour interagir avec notre fonction. La CLI  AWS SAM détecte automatiquement que notre fonction est configurée pour le streaming des réponses et commence immédiatement à générer une réponse diffusée de notre fonction en temps réel.

```
$ sam remote invoke StreamingFunction
	
	Invoking Lambda Function StreamingFunction                                              
	{"statusCode":200,"headers":{"Content-Type":"text/html","X-Custom-Header":"Example-Custom-Header"}}<html><p>First write!</p><h1>Streaming h1</h1><h2>Streaming h2</h2><h3>Streaming h3</h3><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.</p><p>DONE!</p></html>START RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Version: $LATEST
	END RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4
	REPORT RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4  Duration: 4088.66 ms    Billed Duration: 4089 ms        Memory Size: 128 MB     Max Memory Used: 68 MB  Init Duration: 168.45 ms
```

Lorsque nous modifions notre code de fonction, la CLI  AWS SAM détecte et déploie instantanément nos modifications. Voici un exemple de réponse générée par la CLI  AWS SAM après que des modifications ont été apportées à notre code de fonction :

```
Syncing Lambda Function StreamingFunction...                                             
	Building codeuri:                                                                        
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture:    
	x86_64 functions: StreamingFunction                                                      
	package.json file not found. Continuing the build without dependencies.                  
	Running NodejsNpmBuilder:CopySource                                                      
	Finished syncing Lambda Function StreamingFunction.                                      
	Syncing Layer StreamingFunctione9cfe924DepLayer...                                       
	SyncFlow [Layer StreamingFunctione9cfe924DepLayer]: Skipping resource update as the      
	content didn't change                                                                    
	Finished syncing Layer StreamingFunctione9cfe924DepLayer.
```

Nous pouvons à présent utiliser `sam remote invoke` à nouveau pour interagir avec notre fonction dans le cloud et tester nos modifications.

### Exemples SQS
<a name="using-sam-cli-remote-invoke-examples-sqs"></a>

#### Exemples de base
<a name="using-sam-cli-remote-invoke-examples-sqs-basic"></a>

**Appelez une file d'attente Amazon SQS en fournissant l'ARN comme ID de ressource :**

```
$ sam remote invoke arn:aws:sqs:us-west-2:01234567890:sqs-example-4DonhBsjsW1b --event '{"hello": "world"}' --output json

Sending message to SQS queue MySqsQueue                                                                         
{
  "MD5OfMessageBody": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9",
  "MessageId": "4f464cdd-15ef-4b57-bd72-3ad225d80adc",
  "ResponseMetadata": {
    "RequestId": "95d39377-8323-5ef0-9223-ceb198bd09bd",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "95d39377-8323-5ef0-9223-ceb198bd09bd",
      "date": "Wed, 08 Nov 2023 23:27:26 GMT",
      "content-type": "application/x-amz-json-1.0",
      "content-length": "106",
      "connection": "keep-alive"
    },
    "RetryAttempts": 0
  }
}%
```

### Exemples de Step Functions
<a name="using-sam-cli-remote-invoke-examples-sf"></a>

#### Exemples de base
<a name="using-sam-cli-remote-invoke-examples-sf-basic"></a>

**Invoquez une machine à états en fournissant son identifiant physique en tant qu'identifiant de ressource :**

Tout d'abord, nous utilisons `sam list resources` pour obtenir notre identifiant physique :

```
$ sam list resources --stack-name state-machine-example --output json

[
  {
    "LogicalResourceId": "HelloWorldStateMachine",
    "PhysicalResourceId": "arn:aws:states:us-west-2:513423067560:stateMachine:HelloWorldStateMachine-z69tFEUx0F66"
  },
  {
    "LogicalResourceId": "HelloWorldStateMachineRole",
    "PhysicalResourceId": "simple-state-machine-HelloWorldStateMachineRole-PduA0BDGuFXw"
  }
]
```

Ensuite, nous invoquons notre machine à états en utilisant l'identifiant physique comme identifiant de ressource. Nous transmettons un événement en ligne de commande avec l'`--event`option :

```
$ sam remote invoke arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 --event '{"is_developer": true}'

Invoking Step Function arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66   
"Hello Developer World"%
```

**Invoquez une machine à états en transmettant un événement vide :**

```
$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example

Invoking Step Function HelloWorldStateMachine                                                                   
"Hello World"%
```

## Liens connexes
<a name="using-sam-cli-remote-invoke-links"></a>

Pour la documentation relative à `sam remote invoke` et à l'utilisation du AWS SAMCLI, consultez les rubriques suivantes :
+ [sam remote invoke](sam-cli-command-reference-remote-invoke.md)
+ [Résolution des problèmes de la CLI AWS SAM](sam-cli-troubleshooting.md)

# Automatisez les tests d'intégration locaux avec AWS SAM
<a name="serverless-sam-cli-using-automated-tests"></a>

Bien que vous puissiez l'utiliser [Présentation des tests avec sam local invoke](using-sam-cli-local-invoke.md) pour tester le code manuellement, il vous permet AWS SAM également de tester votre code à l'aide de tests d'intégration automatisés. Les tests d'intégration vous aident à détecter les problèmes au début du cycle de développement, à améliorer la qualité de votre code et à gagner du temps tout en réduisant les coûts.

Pour créer des tests d'intégration automatisés dans AWS SAM, vous devez d'abord exécuter des tests sur des fonctions Lambda locales avant de les déployer dans le AWS Cloud. La [Présentation des tests avec sam local start-lambda](using-sam-cli-local-start-lambda.md) commande démarre un point de terminaison local qui émule le point de terminaison d'appel Lambda. Vous pouvez l'appeler à partir de vos tests automatisés. Comme ce point de terminaison émule le point de terminaison Lambda Invoke, vous pouvez écrire des tests une seule fois, puis les exécuter (sans aucune modification) sur la fonction Lambda locale ou sur une fonction Lambda déployée. Vous pouvez également exécuter les mêmes tests sur une AWS SAM pile déployée dans votre CI/CD pipeline. 

Voici comment fonctionne le processus :

1. Démarrez le point de terminaison Lambda local.

   Démarrez le point de terminaison Lambda local en exécutant la commande suivante dans le répertoire contenant votre AWS SAM modèle :

   ```
   sam local start-lambda
   ```

   Cette commande démarre un point de terminaison local sur `http://127.0.0.1:3001` qui émule AWS Lambda. Vous pouvez exécuter des tests automatisés par rapport à ce point de terminaison Lambda local. Lorsque vous appelez ce point de terminaison à l'aide du SDK AWS CLI ou, il exécute localement la fonction Lambda spécifiée dans la demande et renvoie une réponse.

1. Exécutez un test d'intégration sur le point de terminaison Lambda local.

   Lors de votre test d'intégration, vous pouvez utiliser le AWS SDK pour appeler votre fonction Lambda avec les données de test, attendre une réponse et vérifier que la réponse est conforme à vos attentes. Pour exécuter le test d'intégration en local, vous devez configurer le SDK AWS pour envoyer l'appel d'API de Lambda au point de terminaison Lambda local démarré à l'étape précédente.

   Voici un exemple en Python (les quatre AWS SDKs autres langages ont des configurations similaires) :

   ```
   import boto3
   import botocore
   
   # Set "running_locally" flag if you are running the integration test locally
   running_locally = True
   
   if running_locally:
   
       # Create Lambda SDK client to connect to appropriate Lambda endpoint
       lambda_client = boto3.client('lambda',
           region_name="us-west-2",
           endpoint_url="http://127.0.0.1:3001",
           use_ssl=False,
           verify=False,
           config=botocore.client.Config(
               signature_version=botocore.UNSIGNED,
               read_timeout=15,
               retries={'max_attempts': 0},
           )
       )
   else:
       lambda_client = boto3.client('lambda')
   
   
   # Invoke your Lambda function as you normally usually do. The function will run
   # locally if it is configured to do so
   response = lambda_client.invoke(FunctionName="HelloWorldFunction")
   
   # Verify the response
   assert response == "Hello World"
   ```

   Vous pouvez utiliser ce code pour tester les fonctions Lambda déployées en définissant `running_locally` sur `False`. Cela permet de configurer le AWS SDK auquel se connecter AWS Lambda dans le AWS cloud.

# Générez des exemples de charges utiles d'événements avec AWS SAM
<a name="serverless-sam-cli-using-generate-event"></a>

Pour tester vos fonctions Lambda, vous pouvez générer et personnaliser des exemples de charges utiles d'événements qui imitent les données que vos fonctions Lambda recevront lorsqu'elles seront déclenchées par d'autres services. AWS Cela inclut des services tels que API Gateway CloudFormation, Amazon S3, etc.

La génération d'exemples de charges utiles d'événements vous permet de tester le comportement de votre fonction Lambda à l'aide de différentes entrées sans avoir à travailler dans un environnement réel. Cette approche permet également de gagner du temps par rapport à la création manuelle d'échantillons d'événements de AWS service pour tester les fonctions. 

Pour obtenir la liste complète des services pour lesquels vous pouvez générer des exemples de charges utiles d'événements, utilisez la commande suivante :

```
sam local generate-event --help
```

Pour obtenir la liste des options que vous pouvez utiliser pour un service particulier, utilisez la commande suivante :

```
sam local generate-event [SERVICE] --help
```

Exemples :

```
#Generates the event from S3 when a new object is created
sam local generate-event s3 put

# Generates the event from S3 when an object is deleted
sam local generate-event s3 delete
```

# Tester et déboguer des fonctions durables
<a name="test-and-debug-durable-functions"></a>

Le test et le débogage de fonctions durables en local fonctionnent de la même manière que les fonctions Lambda classiques, avec une prise en charge automatique du point de contrôle et de la rediffusion. Ce guide couvre les scénarios de test courants et les techniques de dépannage.

## Flux de travail de test local
<a name="test-and-debug-durable-functions-workflow"></a>

Lorsque vous testez des fonctions durables localement, le flux de travail diffère des fonctions Lambda classiques :

**Flux de travail de test de fonctionnement durable**

1. Créez votre application :

   ```
   $ sam build
   ```

1. Invoquez votre fonction durable :

   ```
   $ sam local invoke MyDurableFunction --durable-execution-name test 
   ```

1. Vérifiez l'historique des exécutions si nécessaire :

   ```
   $ sam local execution history execution-id
   ```

## Scénarios de test courants
<a name="test-and-debug-durable-functions-scenarios"></a>

### Tester le comportement des points de contrôle
<a name="test-and-debug-durable-functions-scenarios-checkpoints"></a>

Pour vérifier que votre fonction fonctionne correctement, les points de contrôle indiquent :

```
# Example Python durable function
def handler(event, context):
    # This will create a checkpoint
    context.wait(10)  # Wait 10 seconds
    
    # Function resumes here after wait
    return {"message": "Function resumed after wait"}
```

Lorsque vous appelez cette fonction localement, le délai d'attente est géré automatiquement.

### Tester des scénarios de rappel
<a name="test-and-debug-durable-functions-scenarios-callbacks"></a>

Pour les fonctions qui attendent des rappels externes :

1. Démarrez votre fonction durable qui attend un rappel

1. Dans un autre terminal, résolvez le rappel :

   ```
   $ sam local callback succeed callback-id
   ```

1. Observez l'exécution de la fonction reprendre

## Résolution des problèmes
<a name="test-and-debug-durable-functions-troubleshooting"></a>

### La fonction durable ne s'exécute pas correctement
<a name="test-and-debug-durable-functions-troubleshooting-config"></a>

**Problème :** La fonction ne se comporte pas comme une fonction durable.

**Solutions :**
+ Vérifiez que cela `DurableConfig` est défini dans votre modèle SAM
+ Assurez-vous que votre code de fonction utilise des méthodes durables du SDK de fonctions (par exemple,`context.wait()`)
+ Vérifiez que vous utilisez un environnement d'exécution compatible (TypeScript, JavaScript, Python)

### Impossible de récupérer l'historique des exécutions
<a name="test-and-debug-durable-functions-troubleshooting-history"></a>

**Problème :** La `local execution history` commande ne renvoie aucun résultat.

**Solutions :**
+ Vérifiez que l'ID d'exécution est correct
+ Vérifiez que la fonction a été invoquée au moins une fois

### Les commandes de rappel ne fonctionnent pas
<a name="test-and-debug-durable-functions-troubleshooting-callbacks"></a>

**Problème :** les commandes de rappel ne résolvent pas les opérations en attente.

**Solutions :**
+ Vérifiez que l'identifiant de rappel est correct
+ Assurez-vous que la fonction attend réellement un rappel
+ Vérifiez que vous utilisez la bonne syntaxe de commande de rappel

## Conseils de débogage
<a name="test-and-debug-durable-functions-debugging"></a>
+ **Utiliser l'historique des exécutions** : passez en revue l'historique des exécutions pour comprendre le flux de votre fonction durable
+ **Testez de manière incrémentielle** : commencez par de simples opérations d'attente avant d'ajouter une logique complexe
+ **Utiliser la journalisation détaillée - Activez la journalisation** détaillée pour suivre le flux d'exécution

## En savoir plus
<a name="test-and-debug-durable-functions-learn"></a>

Pour plus d'informations sur les tests et le débogage, voir :
+ [Présentation des tests avec sam local invoke](using-sam-cli-local-invoke.md)- Documentation d'appel local
+ [sam local execution history](sam-cli-command-reference-sam-local-execution-history.md)- Historique d'exécution