

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.

# Configuration d’un appel asynchrone de la fonction Lambda du backend
<a name="set-up-lambda-integration-async"></a>

Dans l’intégration autre que de proxy (personnalisée) Lambda, la fonction Lambda du backend est, par défaut, invoquée de façon synchrone. Il s’agit du comportement souhaité pour la plupart des opérations d’API REST. Dans certaines applications, toutefois, les appels doivent avoir lieu de façon asynchrone (sous la forme d’une opération par lots ou d’une opération à latence longue), généralement par un autre composant du backend. Dans ce cas, la fonction Lambda du backend est invoquée de façon asynchrone et la méthode d’API REST frontale ne renvoie aucun résultat.

Vous pouvez également configurer la fonction Lambda pour une intégration Lambda autre que de proxy de sorte qu’elle soit invoquée de façon asynchrone en spécifiant `'Event'` en tant que [type d’appel](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html). La procédure à suivre est expliquée ci-après :

## Configuration de l’appel asynchrone Lambda dans la console API Gateway
<a name="asynchronous-invocation-console-examples"></a>

Pour que tous les appels soient asynchrones :
+ Dans **Requête d’intégration**, ajoutez un en-tête `X-Amz-Invocation-Type` avec une valeur statique de `'Event'`.

Pour que les clients décident si les appels sont asynchrones ou synchrones :

1. Dans **Requête de méthode**, ajoutez un en-tête `InvocationType`.

1. Dans **Requête d’intégration**, ajoutez un en-tête `X-Amz-Invocation-Type` avec une expression de mappage de `method.request.header.InvocationType`.

1. Les clients peuvent inclure l’en-tête `InvocationType: Event` dans les requêtes API pour les appels asynchrones, ou `InvocationType: RequestResponse` pour les appels synchrones.

## Configuration de l’appel asynchrone de Lambda à l’aide d’OpenAPI
<a name="asynchronous-invocation-OpenAPI-examples"></a>

Pour que tous les appels soient asynchrones :
+  Ajoutez l'`X-Amz-Invocation-Type`en-tête à la **x-amazon-apigateway-integration**section.

  ```
  "x-amazon-apigateway-integration" : {
            "type" : "aws",
            "httpMethod" : "POST",
            "uri" : "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:123456789012:function:my-function/invocations",
            "responses" : {
              "default" : {
                "statusCode" : "200"
              }
            },
            "requestParameters" : {
              "integration.request.header.X-Amz-Invocation-Type" : "'Event'"
            },
            "passthroughBehavior" : "when_no_match",
            "contentHandling" : "CONVERT_TO_TEXT"
          }
  ```

Pour que les clients décident si les appels sont asynchrones ou synchrones :

1.  Ajoutez l’en-tête suivant sur tout [objet d’élément de chemin OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#pathItemObject). 

   ```
   "parameters" : [ {
   "name" : "InvocationType",
   "in" : "header",
   "schema" : {
     "type" : "string"
   }
   } ]
   ```

1.  Ajoutez l'`X-Amz-Invocation-Type`en-tête à la **x-amazon-apigateway-integration**section.

   ```
   "x-amazon-apigateway-integration" : {
             "type" : "aws",
             "httpMethod" : "POST",
             "uri" : "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:123456789012:function:my-function/invocations",
             "responses" : {
               "default" : {
                 "statusCode" : "200"
               }
             },
             "requestParameters" : {
               "integration.request.header.X-Amz-Invocation-Type" : "method.request.header.InvocationType"
             },
             "passthroughBehavior" : "when_no_match",
             "contentHandling" : "CONVERT_TO_TEXT"
           }
   ```

1.  Les clients peuvent inclure l’en-tête `InvocationType: Event` dans les requêtes API pour les appels asynchrones, ou `InvocationType: RequestResponse` pour les appels synchrones. 

## Configurer l'appel asynchrone Lambda à l'aide de CloudFormation
<a name="asynchronous-invocation-cfn-examples"></a>

Les CloudFormation modèles suivants montrent comment configurer les `AWS::ApiGateway::Method` appels asynchrones.

Pour que tous les appels soient asynchrones :

```
AsyncMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref AsyncResource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: AWS
        RequestParameters:
          integration.request.header.X-Amz-Invocation-Type: "'Event'"
        IntegrationResponses:
            - StatusCode: '200'
        IntegrationHttpMethod: POST
        Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myfunction.Arn}$/invocations
      MethodResponses:
        - StatusCode: '200'
```

Pour que les clients décident si les appels sont asynchrones ou synchrones :

```
AsyncMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref AsyncResource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      RequestParameters:
        method.request.header.InvocationType: false
      Integration:
        Type: AWS
        RequestParameters:
          integration.request.header.X-Amz-Invocation-Type: method.request.header.InvocationType
        IntegrationResponses:
            - StatusCode: '200'
        IntegrationHttpMethod: POST
        Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myfunction.Arn}$/invocations
      MethodResponses:
        - StatusCode: '200'
```

 Les clients peuvent inclure l’en-tête `InvocationType: Event` dans les requêtes API pour les appels asynchrones, ou `InvocationType: RequestResponse` pour les appels synchrones. 