

# Invocar uma função do Lambda de modo assíncrono
<a name="invocation-sync"></a>

Quando você invoca uma função de forma síncrona, o Lambda executa a função e aguarda uma resposta. Quando a função é concluída, o Lambda retorna a resposta do código da função com dados adicionais, como a versão da função que foi invocada. Para invocar uma função de forma síncrona com o AWS CLI, use o comando `invoke`.

```
aws lambda invoke --function-name my-function \
    --cli-binary-format raw-in-base64-out \
    --payload '{ "key": "value" }' response.json
```

A opção **cli-binary-format** será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute `aws configure set cli-binary-format raw-in-base64-out`. Para obter mais informações, consulte [A AWS CLI comporta opções de linha de comando globais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) no *Guia do usuário da AWS Command Line Interface versão 2*.

A seguinte saída deverá ser mostrada:

```
{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}
```

O diagrama a seguir mostra clientes invocando uma função do Lambda do de forma síncrona. O Lambda envia os eventos diretamente para a função e envia a resposta da função de volta para o invocador.

![\[\]](http://docs.aws.amazon.com/pt_br/lambda/latest/dg/images/invocation-sync.png)


O `payload` é uma string que contém um evento no formato JSON. O nome do arquivo em que o AWS CLI grava a resposta da função é `response.json`. Se a função retornar um objeto ou um erro, o corpo da resposta será o objeto ou o erro no formato JSON. Se a função for encerrada sem erros, o corpo da resposta será `null`.

**nota**  
O Lambda não espera a conclusão das extensões externas para enviar a resposta. As extensões externas são executadas como processos independentes no ambiente de execução e continuam em execução após a conclusão da invocação da função. Para ter mais informações, consulte [Ampliar funções do Lambda usando extensões do Lambda](lambda-extensions.md).

A saída do comando, que é exibida no terminal, inclui informações de cabeçalhos na resposta do Lambda. Isso inclui a versão que processou o evento (útil quando você usa [aliases](configuration-aliases.md)) e o código de status retornado pelo Lambda. Se o Lambda foi capaz de executar a função, o código de status é 200, mesmo que a função tenha retornado um erro.

**nota**  
Para funções com um longo tempo limite, o cliente pode ser desconectado durante a invocação síncrona enquanto aguarda por uma resposta. Configure seu cliente HTTP, SDK, firewall, proxy ou sistema operacional para permitir conexões longas com tempo limite ou configurações de ativação.

Se o Lambda não for capaz de executar a função, o erro será exibido na saída.

```
aws lambda invoke --function-name my-function \
    --cli-binary-format raw-in-base64-out \
    --payload value response.json
```

A seguinte saída deverá ser mostrada:

```
An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"value"; line: 1, column: 11]
```

O AWS CLI é uma ferramenta de código aberto que permite interagir com os serviços do AWS usando comandos no shell da linha de comando. Para concluir as etapas desta seção, você deve ter a [versão 2 da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Você pode usar a [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para recuperar logs de uma invocação usando a opção de comando `--log-type`. A resposta contém um campo `LogResult` com até 4 KB de logs codificados em base64 obtidos da invocação.

**Example recuperar um ID de log**  
O exemplo a seguir mostra como recuperar um *ID de log* do campo `LogResult` para uma função chamada `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
A seguinte saída deverá ser mostrada:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example decodificar os logs**  
No mesmo prompt de comando, use o utilitário `base64` para decodificar os logs. O exemplo a seguir mostra como recuperar logs codificados em base64 de `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
```
A opção **cli-binary-format** será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute `aws configure set cli-binary-format raw-in-base64-out`. Para obter mais informações, consulte [A AWS CLI comporta opções de linha de comando globais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) no *Guia do usuário da AWS Command Line Interface versão 2*.  
A seguinte saída deverá ser mostrada:  

```
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB
```
O utilitário `base64` está disponível no Linux, macOS e [Ubuntu no Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Os usuários do macOS precisam usar `base64 -D`.

Para obter mais informações sobre a API `Invoke`, incluindo uma lista completa de parâmetros, cabeçalhos e erros, consulte [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html).

Quando invocar uma função diretamente, você poderá verificar a resposta quanto a erros e tentar novamente. A AWS CLI e o AWS SDK também realizam automaticamente novas tentativas em erros de serviço, controle de utilização e tempo limite do cliente. Para ter mais informações, consulte [Compreender o comportamento de novas tentativas no Lambda](invocation-retries.md).