

# Configurar a invocação assíncrona da função do Lambda do backend
<a name="set-up-lambda-integration-async"></a>

Na integração não proxy do Lambda (personalizada), a função do Lambda do backend é invocada de forma síncrona por padrão. Este é o comportamento desejado para a maioria das operações da API REST. No entanto, alguns aplicativos exigem que o trabalho seja executado de forma assíncrona (como uma operação em lote ou uma operação de longa latência), normalmente por um componente de backend separado. Nesse caso, a função de backend do Lambda é invocada de forma assíncrona, o método da API REST do front-end não retorna o resultado.

É possível configurar a função do Lambda para que uma integração não proxy do Lambda seja invocada de forma assíncrona especificando `'Event'` como o [tipo de invocação do ](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html). Isso é feito da seguinte forma:

## Configurar a invocação assíncrona do Lambda no console do API Gateway
<a name="asynchronous-invocation-console-examples"></a>

Para que todas as invocações sejam assíncronas:
+ Em **Solicitação de integração**, adicione um cabeçalho `X-Amz-Invocation-Type` com um valor estático de `'Event'`.

Para que os clientes decidam se as invocações são assíncronas ou síncronas:

1. Em **Solicitação de método**, adicione um cabeçalho `InvocationType`.

1. Em **Solicitação de integração**, adicione um cabeçalho `X-Amz-Invocation-Type` com uma expressão de mapeamento de `method.request.header.InvocationType`.

1. Os clientes podem incluir o cabeçalho `InvocationType: Event` em solicitações de API para chamadas assíncronas ou `InvocationType: RequestResponse` para chamadas síncronas.

## Configurar a invocação assíncrona do Lambda usando o OpenAPI
<a name="asynchronous-invocation-OpenAPI-examples"></a>

Para que todas as invocações sejam assíncronas:
+  Adicione o cabeçalho `X-Amz-Invocation-Type` à seção **x-amazon-apigateway-integration**.

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

Para que os clientes decidam se as invocações são assíncronas ou síncronas:

1.  Adicione o cabeçalho a seguir em qualquer [objeto de item de caminho do OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#pathItemObject). 

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

1.  Adicione o cabeçalho `X-Amz-Invocation-Type` à seção **x-amazon-apigateway-integration**.

   ```
   "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.  Os clientes podem incluir o cabeçalho `InvocationType: Event` em solicitações de API para chamadas assíncronas ou `InvocationType: RequestResponse` para chamadas síncronas. 

## Configurar a invocação assíncrona do Lambda usando o CloudFormation
<a name="asynchronous-invocation-cfn-examples"></a>

Os modelos CloudFormation a seguir mostram como configurar o `AWS::ApiGateway::Method` para invocações assíncronas.

Para que todas as invocações sejam assíncronas:

```
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'
```

Para que os clientes decidam se as invocações são assíncronas ou síncronas:

```
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'
```

 Os clientes podem incluir o cabeçalho `InvocationType: Event` em solicitações de API para chamadas assíncronas ou `InvocationType: RequestResponse` para chamadas síncronas. 