

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Teste seu aplicativo sem servidor com AWS SAM
<a name="serverless-test-and-debug"></a>

Depois de escrever e criar a aplicação, tudo estará pronto para testá-la e verificar se ela funciona corretamente. Com a interface de linha de AWS SAM comando (CLI), você pode testar localmente seu aplicativo sem servidor antes de enviá-lo para a nuvem. AWS Testar a aplicação ajuda na confirmação da funcionalidade, da confiabilidade e do desempenho da aplicação, ao mesmo tempo que identifica problemas (bugs) que precisarão ser resolvidos.

Esta seção fornece orientação sobre práticas comuns que você pode seguir para testar a aplicação. Os tópicos desta seção se concentram principalmente nos testes locais que você pode fazer antes da implantação na AWS nuvem. Testar antes da implantação ajuda na identificação de problemas de forma proativa, reduzindo os custos desnecessários associados aos problemas de implantação. Cada tópico desta seção descreve um teste que você pode realizar, diz ao yoxi include href? Conheça as vantagens de usá-lo e inclui exemplos que mostram como realizar o teste. Depois de testar a aplicação, tudo estará pronto para a depuração de quaisquer problemas encontrados.

**Topics**
+ [Introdução ao testes com o comando sam local](using-sam-cli-local.md)
+ [Invoque localmente as funções do Lambda com AWS SAM](serverless-sam-cli-using-invoke.md)
+ [Execute localmente o API Gateway com AWS SAM](serverless-sam-cli-using-start-api.md)
+ [Introdução aos testes em nuvem com sam remote test-event](using-sam-cli-remote-test-event.md)
+ [Introdução aos testes na nuvem com sam remote invoke](using-sam-cli-remote-invoke.md)
+ [Automatize os testes de integração local com AWS SAM](serverless-sam-cli-using-automated-tests.md)
+ [Gere amostras de cargas úteis de eventos com AWS SAM](serverless-sam-cli-using-generate-event.md)
+ [Testando e depurando funções duráveis](test-and-debug-durable-functions.md)

# Introdução ao testes com o comando sam local
<a name="using-sam-cli-local"></a>

Use o AWS Serverless Application Model comando Command Line Interface (AWS SAMCLI) `sam local` para testar seus aplicativos sem servidor localmente.

Para obter uma introdução ao AWS SAMCLI, consulte[O que é o AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli).

## Pré-requisitos
<a name="using-sam-cli-local-prerequisites"></a>

Para usar o `sam local`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Antes de usar `sam local`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).

## Usar o comando sam local
<a name="using-sam-cli-local-command"></a>

Use o comando `sam local` com qualquer um de seus subcomandos para realizar diferentes tipos de testes locais para seu aplicativo.

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

Para obter mais informações sobre cada subcomando, veja o seguinte:
+ **[Introdução a sam local generate-event](using-sam-cli-local-generate-event.md)**— Gere AWS service (Serviço da AWS) eventos para testes locais.
+ **[Introdução a sam local invoke](using-sam-cli-local-invoke.md)** – Inicie uma invocação única de uma função AWS Lambda localmente.
+ **[Introdução a sam local start-api](using-sam-cli-local-start-api.md)** – Execute suas funções do Lambda usando um servidor HTTP local.
+ **[Introdução a sam local start-lambda](using-sam-cli-local-start-lambda.md)**— Execute suas funções do Lambda usando um servidor HTTP local para uso com o AWS CLI ou. SDKs

# Introdução aos testes com sam local generate-event
<a name="using-sam-cli-local-generate-event"></a>

Use o AWS Serverless Application Model `sam local generate-event` subcomando Command Line Interface (AWS SAMCLI) para gerar amostras de carga útil de eventos para suporte. Serviços da AWS Em seguida, você pode modificar e passar esses eventos para os recursos locais para testes.
+ Para obter uma introdução ao AWS SAMCLI, consulte [O que é o AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Para obter uma lista de opções de comando `sam local generate-event`, consulte [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Um *evento* é um objeto JSON que é gerado quando um AWS service (Serviço da AWS) executa uma ação ou tarefa. Esses eventos contêm informações específicas, como os dados que foram processados ou a data e hora do evento. A maioria Serviços da AWS gera eventos e os eventos de cada serviço são formatados exclusivamente para seu serviço.

Os eventos gerados por um serviço são passados para outros serviços como uma *fonte de eventos*. Por exemplo, um item colocado em um bucket do Amazon Simple Storage Service (Amazon S3) pode gerar um evento. Esse evento pode então ser usado como fonte de eventos para que uma AWS Lambda função processe ainda mais os dados.

Os eventos que você gera com `sam local generate-event` são formatados na mesma estrutura dos eventos reais criados pelo AWS serviço. Você pode modificar o conteúdo desses eventos e usá-los para testar recursos em seu aplicativo.

## Pré-requisitos
<a name="using-sam-cli-local-generate-event-prerequisites"></a>

Para usar o `sam local generate-event`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Antes de usar `sam local generate-event`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).

## Gere eventos de exemplo
<a name="using-sam-cli-local-generate-event-generate"></a>

Use o AWS SAMCLI `sam local generate-event` subcomando para gerar eventos para suporte Serviços da AWS.

**Para ver uma lista de opções suportadas Serviços da AWS**

1. Execute o seguinte:

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

1. A lista de compatíveis Serviços da AWS será exibida. Este é um exemplo:

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

**Para gerar um evento local**

1. Execute `sam local generate-event` e forneça o nome do serviço suportado. Isso exibirá uma lista de tipos de eventos que você pode gerar. Este é um exemplo:

   ```
   $ 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. Para gerar o evento de amostra, execute `sam local generate-event`, fornecendo o serviço e o tipo de evento.

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

   Este é um exemplo:

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

Esses exemplos de eventos contêm valores de espaço reservado. Você pode modificar esses valores para referenciar recursos reais em seu aplicativo ou valores para ajudar nos testes locais.

**Para modificar um evento de amostra**

1. Você pode modificar eventos de amostra no prompt de comando. Para ver suas opções, execute o seguinte:

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

   Este é um exemplo:

   ```
   $ 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. Use qualquer uma dessas opções no prompt de comando para modificar a carga útil do evento de amostra. Este é um exemplo:

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

## Use eventos gerados para testes locais
<a name="using-sam-cli-local-generate-event-use"></a>

Salve seus eventos gerados localmente e use outros subcomandos `sam local` para testar.

**Para salvar seus eventos gerados localmente**
+ Execute o seguinte:

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

  Veja a seguir um exemplo de um evento sendo salvo como um `s3.json` arquivo na `events` pasta do nosso projeto.

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

**Para usar um evento gerado para testes locais**
+ Passe o evento com outros subcomandos `sam local` usando a opção `--event`.

  Veja a seguir um exemplo de uso do evento `s3.json` para invocar nossa função do Lambda localmente:

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

## Saiba mais
<a name="using-sam-cli-local-generate-event-learn"></a>

Para obter uma lista de todas as opções `sam local generate-event`, consulte [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Para uma demonstração do uso `sam local`, consulte [AWS SAM para desenvolvimento local. Testando Nuvem AWS recursos de ambientes de desenvolvimento local](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) na *série Serverless Land Sessions with SAM on*. YouTube

# Introdução aos testes com sam local invoke
<a name="using-sam-cli-local-invoke"></a>

Use o AWS Serverless Application Model `sam local invoke` subcomando Command Line Interface (AWS SAMCLI) para iniciar localmente uma invocação única de uma função. AWS Lambda 
+ Para obter uma introdução ao AWS SAMCLI, consulte [O que é o AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Para obter uma lista de opções de comando `sam local invoke`, consulte [sam local invoke](sam-cli-command-reference-sam-local-invoke.md).
+ Para obter um exemplo de uso do `sam local invoke` durante um fluxo de trabalho de desenvolvimento típico, consulte [Etapa 7: (opcional) Teste seu aplicativo localmente](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**nota**  
Não é recomendável usar os recursos de invocação local do SAM CLI em código não confiável. Para ter um isolamento completo do seu ambiente local, execute o código diretamente no serviço Lambda.

**nota**  
`sam local invoke`suporta funções duráveis com recursos automáticos de verificação e repetição. Ao invocar funções duráveis localmente, o estado de execução é gerenciado automaticamente.

## Pré-requisitos
<a name="using-sam-cli-local-invoke-prerequisites"></a>

Para usar o `sam local invoke`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Antes de usar `sam local invoke`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).

## Invocar uma função do Lambda localmente
<a name="using-sam-cli-local-invoke-use"></a>

Quando você executa `sam local invoke`, AWS SAMCLI pressupõe que seu diretório de trabalho atual seja o diretório raiz do seu projeto. O AWS SAM CLI, primeiro procurará um arquivo `template.[yaml|yml]` dentro de uma subpasta `.aws-sam`. Se não for encontrado, o AWS SAMCLI procurará um arquivo `template.[yaml|yml]` em seu diretório de trabalho atual.

**Invocar uma função do Lambda localmente**

1. No diretório raiz do seu projeto, execute o seguinte:

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

1. Se seu aplicativo contiver mais de uma função, forneça o ID lógico da função. Este é um exemplo:

   ```
   $ sam local invoke HelloWorldFunction
   ```

1. O AWS SAMCLI constrói sua função em um contêiner local Docker. Em seguida, ele invoca sua função e gera a resposta da sua função.

   Este é um exemplo:

   ```
   $ 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\"}"}%
   ```

### Gerenciar logs do
<a name="using-sam-cli-local-invoke-logs"></a>

Ao usar `sam local invoke`, a saída de tempo de execução da função do Lambda (por exemplo, registros) é enviada para `stderr` e o resultado da função do Lambda é enviado para `stdout`.

Veja a seguir um exemplo de uma função do Lambda básica:

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

Você pode salvar essas saídas padrão. Este é um exemplo:

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

Você pode usar essas saídas padrão para automatizar ainda mais seus processos de desenvolvimento local.

## Opções
<a name="using-sam-cli-local-invoke-options"></a>

### Passe eventos personalizados para invocar a função do Lambda
<a name="using-sam-cli-local-invoke-options-events"></a>

Para passar um evento para a função do Lambda, use a opção `--event`. Este é um exemplo:

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

Você pode criar eventos com o subcomando `sam local generate-event`. Para saber mais, consulte [Introdução aos testes com sam local generate-event](using-sam-cli-local-generate-event.md).

### Passe variáveis de ambiente ao invocar sua função do Lambda
<a name="using-sam-cli-local-invoke-options-env"></a>

Se sua função do Lambda usa variáveis de ambiente, você pode passá-las durante o teste local com a opção `--env-vars`. Essa é uma ótima maneira de testar uma função do Lambda localmente com serviços da aplicação que já estão implantados na nuvem. Este é um exemplo:

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

### Especificar um modelo ou função
<a name="using-sam-cli-local-invoke-options-specify"></a>

Para especificar um modelo para o AWS SAMCLI para referência, use a opção `--template`. Eles AWS SAMCLI carregarão apenas esse AWS SAM modelo e os recursos para os quais ele aponta.

Para invocar uma função de um aplicativo ou pilha aninhada, forneça o ID lógico do aplicativo ou da pilha junto com o ID lógico da função. Este é um exemplo:

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

### Testar uma função do Lambda no seu projeto Terraform
<a name="using-sam-cli-local-invoke-options-terraform"></a>

Use a opção `--hook-name` de testar localmente as funções do Lambda em seus projetos Terraform. Para saber mais, consulte [Usando o AWS SAMCLI with Terraform para depuração e teste locais](using-samcli-terraform.md).

Este é um exemplo:

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

## Práticas recomendadas
<a name="using-sam-cli-local-invoke-best"></a>

Se seu aplicativo tiver um diretório `.aws-sam` executando `sam build`, certifique-se de executar o `sam build` sempre que atualizar o código da função. Em seguida, execute o `sam local invoke` para testar localmente seu código de função atualizado.

O teste local é uma ótima solução para desenvolvimento e teste rápidos antes da implantação na nuvem. No entanto, os testes locais não validam tudo, como permissões entre seus recursos na nuvem. Tanto quanto possível, teste seus aplicativos na nuvem. Recomendamos [usar o `sam sync`](using-sam-cli-sync.md) para acelerar seus fluxos de trabalho de testes na nuvem.

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

### Gere um evento de amostra do Amazon API Gateway e use-o para invocar uma função do Lambda localmente
<a name="using-sam-cli-local-invoke-examples-api"></a>

Primeiro, geramos uma carga útil de evento de API HTTP do API Gateway e a salvamos em nossa pasta `events`.

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

Em seguida, modificamos nossa função do Lambda para retornar um valor de parâmetro do evento.

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

Em seguida, invocamos localmente nossa função do Lambda e fornecemos nosso evento personalizado.

```
$ 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\"}"}%
```

### Passe variáveis de ambiente ao invocar uma função do Lambda localmente
<a name="using-sam-cli-local-invoke-examples-env"></a>

Esse aplicativo tem uma função do Lambda que usa uma variável de ambiente para o nome de uma tabela do Amazon DynamoDB. Veja a seguir um exemplo da função definida no AWS SAM modelo:

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

Queremos testar localmente nossa função do Lambda enquanto ela interage com nossa tabela do DynamoDB na nuvem. Para fazer isso, criamos nosso arquivo de variáveis de ambiente e o salvamos no diretório raiz do nosso projeto como `locals.json`. O valor fornecido aqui `SAMPLE_TABLE` faz referência à nossa tabela do DynamoDB na nuvem.

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

Em seguida, executamos `sam local invoke` e passamos nossas variáveis de ambiente com a opção `--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":"{}"}
```

## Saiba mais
<a name="using-sam-cli-local-invoke-learn"></a>

Para obter uma lista de todas as opções `sam local invoke`, consulte [sam local invoke](sam-cli-command-reference-sam-local-invoke.md).

Para uma demonstração do uso `sam local`, consulte [AWS SAM para desenvolvimento local. Testando Nuvem AWS recursos de ambientes de desenvolvimento local](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) na *série Serverless Land Sessions with SAM on*. YouTube

# Introdução aos testes com sam local start-api
<a name="using-sam-cli-local-start-api"></a>

Use o AWS Serverless Application Model `sam local start-api` subcomando Command Line Interface (AWS SAMCLI) para executar suas AWS Lambda funções localmente e testar por meio de um host de servidor HTTP local. Esse tipo de teste é útil para funções do Lambda invocadas por um endpoint do Amazon API Gateway.
+ Para uma introdução ao AWS SAMCLI, consulte [O que é o AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Para obter uma lista de opções de comando `sam local start-api`, consulte [sam local start-api](sam-cli-command-reference-sam-local-start-api.md).
+ Para obter um exemplo de uso do `sam local start-api` durante um fluxo de trabalho de desenvolvimento típico, consulte [Etapa 7: (opcional) Teste seu aplicativo localmente](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**nota**  
`sam local start-api`suporta funções duráveis com recursos automáticos de verificação e repetição. As funções duráveis funcionam perfeitamente com o endpoint local do API Gateway.

## Pré-requisitos
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Para usar o `sam local start-api`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Antes de usar `sam local start-api`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).

## Usando SAM API de inicialização local
<a name="using-sam-cli-local-start-api-use"></a>

Quando você executa `sam local start-api`, AWS SAMCLI pressupõe que seu diretório de trabalho atual seja o diretório raiz do seu projeto. O AWS SAM CLI, primeiro procurará um arquivo `template.[yaml|yml]` dentro de uma subpasta `.aws-sam`. Se não for encontrado, o AWS SAMCLI procurará um arquivo `template.[yaml|yml]` em seu diretório de trabalho atual.

**Para iniciar um servidor HTTP local**

1. No diretório raiz do seu projeto, execute o seguinte:

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

1. O AWS SAMCLI cria suas funções do Lambda em um contêiner local Docker. Em seguida, ele envia o endereço local para o endpoint do servidor HTTP. Este é um exemplo:

   ```
   $ 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. Você pode invocar sua função do Lambda por meio do navegador ou do prompt de comando. Este é um exemplo:

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

1. Ao fazer alterações no código da função do Lambda, considere o seguinte para atualizar seu servidor HTTP local:
   + Se seu aplicativo não tiver um diretório `.aws-sam` e sua função usar uma linguagem interpretada, os AWS SAMCLI atualizarão automaticamente sua função criando um novo contêiner e hospedando-o.
   + Se seu aplicativo tiver um diretório `.aws-sam`, você precisará executar `sam build` para atualizar sua função. Em seguida, execute `sam local start-api` novamente para hospedar a função.
   + Se sua função usa uma linguagem compilada ou se seu projeto requer suporte a pacotes complexos, execute sua própria solução de compilação para atualizar sua função. Em seguida, execute `sam local start-api` novamente para hospedar a função.

### Funções Lambda que usam autorizadores Lambda
<a name="using-sam-cli-local-start-api-authorizers"></a>

**nota**  
Esse atributo é novo na versão 1.80.0 do AWS SAM CLI. Para atualizar, consulte [Atualizar o AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Para funções Lambda que usam autorizadores Lambda, os AWS SAMCLI invocarão automaticamente seu autorizador Lambda antes de invocar seu endpoint de função do Lambda.

Veja a seguir um exemplo de como iniciar um servidor HTTP local para uma função que usa um autorizador 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
```

Quando você invoca seu endpoint da função do Lambda por meio do servidor HTTP local, o AWS SAMCLI invoca primeiro seu autorizador Lambda. Se a autorização for bem-sucedida, AWS SAM e CLI invocarão seu endpoint da função do Lambda. Este é um exemplo:

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

## Opções
<a name="using-sam-cli-local-start-api-options"></a>

### Reutilize continuamente os contêineres para acelerar as invocações de funções locais
<a name="using-sam-cli-local-start-api-options-warm"></a>

Por padrão, o AWS SAMCLI cria um novo contêiner toda vez que sua função é invocada por meio do servidor HTTP local. Use a opção `--warm-containers` de reutilizar automaticamente seu contêiner para invocações de funções. Isso acelera o tempo necessário para AWS SAMCLI preparar sua função do Lambda para invocação local. Você pode personalizar ainda mais essa opção fornecendo o argumento `eager` ou `lazy`.
+ `eager` – Os contêineres para todas as funções são carregados na inicialização e persistem entre as invocações.
+ `lazy` – Os contêineres são carregados somente quando cada função é invocada pela primeira vez. Eles então persistem para invocações adicionais.

Este é um exemplo:

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

Ao usar `--warm-containers` e modificar o código da função do Lambda:
+ Se seu aplicativo tiver um diretório `.aws-sam`, execute `sam build` para atualizar o código da função nos artefatos de construção do seu aplicativo.
+ Quando uma alteração de código é detectada, o AWS SAMCLI desliga automaticamente o contêiner da função do Lambda.
+ Quando você invoca a função novamente, o AWS SAMCLI cria automaticamente um novo contêiner.

### Especifique uma imagem de contêiner para usar em suas funções do Lambda
<a name="using-sam-cli-local-start-api-options-specify"></a>

Por padrão, o AWS SAMCLI usa imagens de base do Lambda do Amazon Elastic Container Registry (Amazon ECR) para invocar suas funções no local. Use a opção `--invoke-image` para referenciar uma imagem de contêiner personalizada. Este é um exemplo:

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

Você pode especificar a função a ser usada com a imagem personalizada do contêiner. Este é um exemplo:

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

### Especifique um modelo para testar localmente
<a name="using-sam-cli-local-start-api-options-template"></a>

Para especificar um modelo para o AWS SAMCLI para referência, use a opção `--template`. Eles AWS SAMCLI carregarão apenas esse AWS SAM modelo e os recursos para os quais ele aponta. Este é um exemplo:

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

### Especifique o ambiente de desenvolvimento do host da sua função do Lambda
<a name="using-sam-cli-local-start-api-options-dev"></a>

Por padrão, o subcomando `sam local start-api` cria um servidor HTTP usando `localhost` com endereço IP `127.0.0.1`. Você pode personalizar esses valores se o ambiente de desenvolvimento local estiver isolado da máquina local.

Use a opção `--container-host` para especificar um host. Este é um exemplo:

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

Use a opção `--container-host-interface` para especificar o endereço IP da rede host à qual as portas do contêiner devem se vincular. Este é um exemplo:

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

## Práticas recomendadas
<a name="using-sam-cli-local-start-api-best"></a>

Se seu aplicativo tiver um diretório `.aws-sam` executando `sam build`, certifique-se de executar o `sam build` sempre que atualizar o código da função. Em seguida, execute o `sam local start-api` para testar localmente seu código de função atualizado.

O teste local é uma ótima solução para desenvolvimento e teste rápidos antes da implantação na nuvem. No entanto, os testes locais não validam tudo, como permissões entre seus recursos na nuvem. Tanto quanto possível, teste seus aplicativos na nuvem. Recomendamos [usar o `sam sync`](using-sam-cli-sync.md) para acelerar seus fluxos de trabalho de testes na nuvem.

## Saiba mais
<a name="using-sam-cli-local-start-api-learn"></a>

Para obter uma lista de todas as opções `sam local start-api`, consulte [sam local start-api](sam-cli-command-reference-sam-local-start-api.md).

# Introdução aos testes com sam local start-lambda
<a name="using-sam-cli-local-start-lambda"></a>

Use o AWS SAMCLI subcomando `sam local start-lambda` para invocar sua função Lambda por meio do e. AWS CLI SDKs Esse comando inicia um endpoint local que emula o Lambda.
+ Para obter uma introdução ao AWS SAMCLI, consulte [O que é o AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Para obter uma lista de opções de comando `sam local start-lambda`, consulte [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

**nota**  
`sam local start-lambda`suporta funções duráveis com recursos automáticos de verificação e repetição. As funções duráveis funcionam perfeitamente com o endpoint Lambda local.

## Pré-requisitos
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Para usar o `sam local start-lambda`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Antes de usar `sam local start-lambda`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).

## Usando o Local do SAM start-lambda
<a name="using-sam-cli-local-start-lambda-use"></a>

Quando você executa `sam local start-lambda`, AWS SAMCLI pressupõe que seu diretório de trabalho atual seja o diretório raiz do seu projeto. O AWS SAM CLI, primeiro procurará um arquivo `template.[yaml|yml]` dentro de uma subpasta `.aws-sam`. Se não for encontrado, o AWS SAMCLI procurará um `template.[yaml|yml]` arquivo em seu diretório de trabalho atual.

**Para usar o Local do SAM start-lambda**

1. No diretório raiz do seu projeto, execute o seguinte:

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

1. O AWS SAMCLI cria suas funções do Lambda em um contêiner Docker local. Em seguida, ele envia o endereço local para o endpoint do servidor HTTP. Este é um exemplo:

   ```
   $ 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. Use o AWS CLI ou SDKs para invocar sua função Lambda localmente.

   Veja a seguir um exemplo de como usar a AWS CLI:

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

   Veja a seguir um exemplo usando o AWS SDK forPython:

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

## Opções
<a name="using-sam-cli-local-start-lambda-options"></a>

### Especificar um modelo
<a name="using-sam-cli-local-start-lambda-options-template"></a>

Para especificar um modelo para o AWS SAMCLI para referência, use a opção `--template`. Eles AWS SAMCLI carregarão apenas esse AWS SAM modelo e os recursos para os quais ele aponta. Este é um exemplo:

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

Para obter mais informações sobre AWS SAM modelos, consulte[AWS SAM anatomia do modelo](sam-specification-template-anatomy.md).

## Práticas recomendadas
<a name="using-sam-cli-local-start-lambda-best"></a>

Se seu aplicativo tiver um diretório `.aws-sam` executando `sam build`, certifique-se de executar o `sam build` sempre que atualizar o código da função. Em seguida, execute o `sam local start-lambda` para testar localmente seu código de função atualizado.

O teste local é uma ótima solução para desenvolvimento e teste rápidos antes da implantação na nuvem. No entanto, os testes locais não validam tudo, como permissões entre seus recursos na nuvem. Tanto quanto possível, teste seus aplicativos na nuvem. Recomendamos [usar o `sam sync`](using-sam-cli-sync.md) para acelerar seus fluxos de trabalho de testes na nuvem.

## Saiba mais
<a name="using-sam-cli-local-start-lambda-learn"></a>

Para obter uma lista de todas as opções `sam local start-lambda`, consulte [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

# Invoque localmente as funções do Lambda com AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

A invocação de uma função do Lambda localmente antes de testes ou implantações na nuvem pode ter vários benefícios. Isso permite que você teste a lógica da função mais rapidamente. Testar primeiro localmente reduz a probabilidade da identificação de problemas ao testar na nuvem ou durante a implantação, o que pode ajudar a evitar custos desnecessários. Além disso, os testes locais facilitam a depuração.

Você pode invocar a função do Lambda localmente usando o comando [sam local invoke](sam-cli-command-reference-sam-local-invoke.md) e fornecendo o ID lógico da função e um arquivo de eventos. **sam local invoke** também aceita `stdin` como evento. Para obter mais informações eventos, consulte [Eventos](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event) no *Guia do desenvolvedor do AWS Lambda *. Para obter informações sobre formatos de mensagens de eventos de diferentes AWS serviços, consulte [Usando AWS Lambda com outros serviços](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html) no *Guia do AWS Lambda desenvolvedor*.

**nota**  
Não é recomendável usar os recursos de invocação local do SAM CLI em código não confiável. Para ter um isolamento completo do seu ambiente local, execute o código diretamente no serviço Lambda.

**nota**  
O **sam local invoke** comando corresponde ao comando 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). Você pode usar qualquer um dos comandos para invocar uma função do Lambda.

Você deve executar o comando **sam local invoke** no diretório do projeto que contém a função que seja invocar.

 Exemplos:

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

## Arquivo de variável de ambiente
<a name="serverless-sam-cli-using-invoke-environment-file"></a>

Para declarar localmente variáveis de ambiente que substituem os valores definidos em seus modelos, faça o seguinte:

1. Crie um JSON ou `.env` arquivo que contenha as variáveis de ambiente a serem substituídas.

1. Use o argumento `--env-vars` para substituir os valores definidos em seus modelos.

A `--env-vars` opção oferece suporte a dois formatos de arquivo. O formato do arquivo é detectado automaticamente com base no conteúdo do arquivo.

### Declarando variáveis de ambiente com JSON
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Para declarar variáveis de ambiente que se aplicam globalmente a todos os recursos, especifique um objeto `Parameters` como o seguinte:

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

Para declarar variáveis de ambiente diferentes para cada recurso, especifique objetos para cada recurso da seguinte forma:

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

Ao especificar objetos para cada recurso, você pode usar os seguintes identificadores, listados na ordem da maior para a menor precedência:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identificador de caminho completo

Você pode usar os dois métodos anteriores para declarar variáveis de ambiente juntos em um único arquivo. Ao fazer isso, as variáveis de ambiente que você forneceu para recursos específicos têm precedência sobre as variáveis de ambiente globais.

Salve suas variáveis de ambiente em um arquivo JSON, como `env.json`.

### Declarando variáveis de ambiente com arquivos.env
<a name="serverless-sam-cli-using-invoke-environment-file-dotenv"></a>

Você também pode usar um `.env` arquivo para declarar variáveis de ambiente. As variáveis declaradas em um `.env` arquivo se aplicam globalmente a todas as funções, equivalentes ao `Parameters` objeto no formato JSON.

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

O `.env` formato suporta comentários (linhas começando com`#`) e valores entre aspas.

**nota**  
O `.env` formato só oferece suporte a variáveis de ambiente globais. Para declarar variáveis de ambiente específicas da função, use o formato JSON.

### Substituindo valores de variáveis de ambiente
<a name="serverless-sam-cli-using-invoke-environment-file-override"></a>

Para substituir as variáveis de ambiente pelas definidas em seu arquivo de variáveis de ambiente, use o `--env-vars` argumento com os **start-api** comandos **invoke** ou. Por exemplo:

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

Se seu aplicativo incluir camadas, para obter informações sobre como depurar problemas com camadas em seu host local, consulte [Aumente a eficiência usando camadas Lambda com AWS SAM](serverless-sam-cli-layers.md).

## Saiba mais
<a name="serverless-sam-cli-using-invoke-learn"></a>

Para obter um exemplo prático de invocar funções localmente, consulte o [Módulo 2 - Executar localmente](https://s12d.com/sam-ws-en-local) no *The* Complete Workshop. AWS SAM 

# Execute localmente o API Gateway com AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

A execução do Amazon API Gateway localmente pode ter vários benefícios. Por exemplo, executar o API Gateway localmente permite que você teste os endpoints da API localmente antes da implantação na AWS nuvem. Se você testar primeiro no local, muitas vezes poderá reduzir os testes e o desenvolvimento na nuvem, o que pode ajudar a reduzir os custos. Além disso, a execução no local facilita a depuração. 

Para iniciar uma instância local do API Gateway que você pode usar para testar a funcionalidade de solicitação/resposta HTTP, use o comando. `sam local start-api` AWS SAMCLI Essa funcionalidade apresenta recarregamento a quente para que você possa desenvolver e iterar rapidamente suas funções.

**nota**  
O *recarregamento a quente* ocorre quando somente os arquivos alterados são atualizados e o estado do aplicativo permanece o mesmo. Por outro lado, o *recarregamento dinâmico* ocorre quando todo o aplicativo é atualizado e o estado do aplicativo é perdido.

Para obter instruções sobre como usar o comando `sam local start-api`, consulte [Introdução aos testes com sam local start-api](using-sam-cli-local-start-api.md).

Por padrão, AWS SAM usa integrações de AWS Lambda proxy e oferece suporte a ambos `HttpApi` e aos tipos de `Api` recursos. Para obter mais informações sobre integrações de proxy para tipos de `HttpApi` recursos, consulte Como [trabalhar com integrações de AWS Lambda proxy para HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) no Guia do *desenvolvedor do API Gateway*. Para obter mais informações sobre integrações de proxy com tipos de recursos `Api`, consulte [Compreender a integração de proxy do Lambda do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy) no *Guia do desenvolvedor do API Gateway*.

**Exemplo:**

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

AWS SAM encontra automaticamente todas as funções em seu AWS SAM modelo que tenham fontes `HttpApi` de `Api` eventos definidas. Em seguida, ele monta a função nos caminhos HTTP definidos.

No exemplo de `Api` abaixo, a função `Ratings` pode montar `ratings.py:handler()` em `/ratings` para solicitações `GET`.

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

Este é um exemplo de resposta `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"
    });
}
```

Se você modificar o código da sua função, execute o comando `sam build` para `sam local start-api` detectar suas alterações.

## Arquivo de variável de ambiente
<a name="serverless-sam-cli-using-start-api-environment-variable"></a>

Para declarar localmente variáveis de ambiente que substituem os valores definidos em seus modelos, faça o seguinte:

1. Crie um arquivo JSON que contenha as variáveis de ambiente a serem substituídas.

1. Use o argumento `--env-vars` para substituir os valores definidos em seus modelos.

### Declarar variáveis de ambiente
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Para declarar variáveis de ambiente que se aplicam globalmente a todos os recursos, especifique um objeto `Parameters` como o seguinte:

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

Para declarar variáveis de ambiente diferentes para cada recurso, especifique objetos para cada recurso da seguinte forma:

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

Ao especificar objetos para cada recurso, você pode usar os seguintes identificadores, listados na ordem da maior para a menor precedência:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identificador de caminho completo

Você pode usar os dois métodos anteriores para declarar variáveis de ambiente juntos em um único arquivo. Ao fazer isso, as variáveis de ambiente que você forneceu para recursos específicos têm precedência sobre as variáveis de ambiente globais.

Salve suas variáveis de ambiente em um arquivo JSON, como `env.json`.

### Substituindo valores de variáveis de ambiente
<a name="serverless-sam-cli-using-start-api-environment-file-override"></a>

Para substituir as variáveis de ambiente pelas definidas em seu arquivo JSON, use o argumento `--env-vars` com os comandos **invoke** ou **start-api**. Por exemplo:

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

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

Se seu aplicativo incluir camadas, para obter informações sobre como depurar problemas com camadas em seu host local, consulte [Aumente a eficiência usando camadas Lambda com AWS SAM](serverless-sam-cli-layers.md).

# Introdução aos testes em nuvem com sam remote test-event
<a name="using-sam-cli-remote-test-event"></a>

Use o AWS Serverless Application Model comando Command Line Interface (AWS SAM CLI) `sam remote test-event` para acessar e gerenciar eventos de teste compartilháveis para suas AWS Lambda funções.

Para saber mais sobre eventos de teste compartilháveis, consulte [Eventos de teste compartilháveis](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) no *Guia do desenvolvedor do AWS Lambda *.

**Topics**
+ [Configure a AWS SAM CLI para usar o sam remote test-event](#using-sam-cli-remote-test-event-setup)
+ [Usar o comando sam remote test-event](#using-sam-cli-remote-test-event-use)
+ [Usando eventos de teste compartilháveis](#using-sam-cli-remote-test-event-invoke)
+ [Usando eventos de teste compartilháveis](#using-sam-cli-remote-test-event-manage)

## Pré-requisitos
<a name="using-sam-cli-remote-test-event-prerequisites"></a>

Para usar o `sam remote test-event`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Se você já tem o AWS SAM CLI instalado, recomendamos atualizar para a versão mais recente da AWS SAMCLI versão. Para saber mais, consulte [Atualizar o AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Antes de usar `sam remote test-event`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).
+ [Introdução ao uso sam sync para sincronizar com Nuvem AWS](using-sam-cli-sync.md).

## Configure a AWS SAM CLI para usar o sam remote test-event
<a name="using-sam-cli-remote-test-event-setup"></a>

Conclua as seguintes etapas de configuração para usar o AWS SAM CLI `sam remote test-event` comando:

1. **Configure o AWS SAM CLI para usar seu Conta da AWS** — Os eventos de teste compartilháveis do Lambda podem ser acessados e gerenciados por usuários dentro do mesmo. Conta da AWS Para configurar o AWS SAM CLI para usar o seu Conta da AWS, consulte[Configurando o AWS SAM CLI](using-sam-cli-configure.md).

1. **Configurar permissões para eventos de teste compartilháveis** – Para acessar e gerenciar eventos de teste compartilháveis, você deve ter as permissões adequadas. Para saber mais, consulte [Eventos de teste compartilháveis](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) no *Guia do desenvolvedor do AWS Lambda *.

## Usar o comando sam remote test-event
<a name="using-sam-cli-remote-test-event-use"></a>

O AWS SAM CLI `sam remote test-event` comando fornece os seguintes subcomandos que você pode usar para acessar e gerenciar seus eventos de teste compartilháveis:
+ `delete`— Exclua um evento de teste compartilhável do registro de EventBridge esquemas da Amazon.
+ `get`— Obtenha um evento de teste compartilhável do registro do EventBridge esquema.
+ `list`— Liste os eventos de teste compartilháveis existentes para uma função do registro do EventBridge esquema.
+ `put`— Salve um evento de um arquivo local no registro do EventBridge esquema.

Para listar esses subcomandos usando o AWS SAM CLI, execute o seguinte:

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

### Excluindo eventos de teste compartilháveis
<a name="using-sam-cli-remote-test-event-use-delete"></a>

Você pode excluir um evento de teste compartilhável usando o subcomando `delete` junto com o seguinte:
+ Forneça o nome do evento compartilhável de teste a ser excluído.
+ Forneça uma identificação aceitável da função do Lambda associada ao evento.
+ Se você estiver fornecendo o ID lógico da função Lambda, também deverá fornecer o nome da AWS CloudFormation pilha associado à função Lambda.

Este é um exemplo:

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

Para obter uma lista de opções a serem usadas com o subcomando `delete`, consulte [sam remote test-event delete](sam-cli-command-reference-remote-test-event-delete.md). Você também pode executar o seguinte a partir do AWS SAM CLI:

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

### Obtendo eventos de teste compartilháveis
<a name="using-sam-cli-remote-test-event-use-get"></a>

Você pode obter um evento de teste compartilhável do registro do EventBridge esquema usando o `get` subcomando junto com o seguinte:
+ Forneça o nome do evento de teste compartilhável a ser obtido.
+ Forneça uma identificação aceitável da função do Lambda associada ao evento.
+ Se você estiver fornecendo o ID lógico da função Lambda, também deverá fornecer o nome da AWS CloudFormation pilha associado à função Lambda.

Veja a seguir um exemplo que obtém um evento de teste compartilhável chamado `demo-event` associado à função do Lambda `HelloWorldFunction` da pilha `sam-app`. Esse comando imprimirá o evento em seu console.

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

Para obter um evento de teste compartilhável e salvá-lo em sua máquina local, use a opção `--output-file` e forneça um nome e um caminho de arquivo. Veja a seguir um exemplo que salva `demo-event` como `demo-event.json` no diretório de trabalho atual:

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

Para obter uma lista de opções a serem usadas com o subcomando `get`, consulte [sam remote test-event get](sam-cli-command-reference-remote-test-event-get.md). Você também pode executar o seguinte a partir do AWS SAM CLI:

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

### Listando eventos de teste compartilháveis
<a name="using-sam-cli-remote-test-event-use-list"></a>

Você pode listar todos os eventos de teste compartilháveis para uma função do Lambda específica no registro do esquema. Use o subcomando `list` junto com o seguinte:
+ Forneça um ID aceitável da função do Lambda associada aos eventos.
+ Se você estiver fornecendo o ID lógico da função Lambda, também deverá fornecer o nome da CloudFormation pilha associado à função Lambda.

Veja a seguir um exemplo que obtém uma lista de todos os eventos de teste compartilháveis associados à função do Lambda `HelloWorldFunction` da pilha `sam-app`:

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

Para obter uma lista de opções a serem usadas com o subcomando `list`, consulte [sam remote test-event list](sam-cli-command-reference-remote-test-event-list.md). Você também pode executar o seguinte a partir do AWS SAM CLI:

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

### Salvando eventos de teste compartilháveis
<a name="using-sam-cli-remote-test-event-use-put"></a>

Você pode salvar eventos de teste compartilháveis no registro do EventBridge esquema. Use o subcomando `put` junto com o seguinte:
+ Forneça uma ID aceitável da função do Lambda associada ao evento de teste compartilhável.
+ Forneça um nome para o evento compartilhável de teste.
+ Forneça o caminho e o nome do arquivo para o evento local a ser carregado.

Veja a seguir um exemplo que salva o evento local `demo-event.json` como `demo-event` e o associa à função do Lambda `HelloWorldFunction` da pilha `sam-app`:

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

Se existir um evento de teste compartilhável com o mesmo nome no registro do EventBridge esquema, AWS SAM CLI ele não o substituirá. Para sobrescrever, adicione a opção `--force` ao seu comando.

Para obter uma lista de opções a serem usadas com o subcomando `put`, consulte [sam remote test-event put](sam-cli-command-reference-remote-test-event-put.md). Você também pode executar o seguinte a partir do AWS SAM CLI:

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

## Usando eventos de teste compartilháveis
<a name="using-sam-cli-remote-test-event-invoke"></a>

Use eventos de teste compartilháveis para testar suas funções do Lambda com Nuvem AWS `sam remote invoke` o comando. Para saber mais, consulte [Transmita eventos de teste compartilháveis para uma função do Lambda na nuvem](using-sam-cli-remote-invoke.md#using-sam-cli-remote-invoke-shareable).

## Usando eventos de teste compartilháveis
<a name="using-sam-cli-remote-test-event-manage"></a>

Este tópico contém exemplos de como você pode gerenciar e usar eventos de teste compartilháveis.

### Obtenha um evento de teste compartilhável, modifique-o e use-o
<a name="using-sam-cli-remote-test-event-manage-example1"></a>

Você pode obter um evento de teste compartilhável do registro do EventBridge esquema, modificá-lo localmente e usar o evento de teste local com sua função Lambda no. Nuvem AWS Este é um exemplo:

1. **Recupere o evento de teste compartilhável** – Use o subcomando `sam remote test-event get` para recuperar um evento de teste compartilhável para uma função do Lambda específica e salvá-lo localmente:

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

1. **Modificar o evento de teste compartilhável** – Use um editor de texto de sua escolha para modificar o evento de teste compartilhável.

1. **Use o evento de teste compartilhável** – Use o comando `sam remote invoke` e forneça o caminho do arquivo e o nome do evento com `--event-file`:

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

### Obtenha um evento de teste compartilhável, modifique-o, carregue-o e use-o
<a name="using-sam-cli-remote-test-event-manage-example2"></a>

Você pode obter um evento de teste compartilhável do registro do EventBridge esquema, modificá-lo localmente e carregá-lo. Em seguida, você pode passar o evento de teste compartilhável diretamente para sua função do Lambda no Nuvem AWS. Este é um exemplo:

1. **Recupere o evento de teste compartilhável** – Use o subcomando `sam remote test-event get` para recuperar um evento de teste compartilhável para uma função do Lambda específica e salvá-lo localmente:

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

1. **Modificar o evento de teste compartilhável** – Use um editor de texto de sua escolha para modificar o evento de teste compartilhável.

1. **Carregar o evento de teste compartilhável** — Use o `sam remote test-event put` subcomando para carregar e salvar o evento de teste compartilhável no registro do EventBridge esquema. Neste exemplo, usamos a opção `--force` de sobrescrever uma versão mais antiga do nosso teste compartilhável:

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

1. **Passe o evento de teste compartilhável para sua função do Lambda** – Use o comando `sam remote invoke` para passar o evento de teste compartilhável diretamente para sua função do Lambda no Nuvem AWS:

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

# Introdução aos testes na nuvem com sam remote invoke
<a name="using-sam-cli-remote-invoke"></a>

Use o AWS Serverless Application Model comando Command Line Interface (AWS SAM CLI) `sam remote invoke` para interagir com AWS os recursos suportados no Nuvem AWS. Você pode usar `sam remote invoke` para invocar os seguintes recursos:
+ **Amazon Kinesis Data Streams** – Envie registros de dados para aplicativos do Kinesis Data Streams.
+ **AWS Lambda** - Invoque e transmita eventos para suas funções do Lambda.
+ **Amazon Simple Queue Service (Amazon SQS)** — Envie mensagens para filas do Amazon SQS.
+ **AWS Step Functions** – Invoque máquinas de estado do Step Functions para iniciar a execução.

Para uma introdução ao AWS SAMCLI, consulte [O que é o AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)

Para obter um exemplo de uso do `sam remote invoke` durante um fluxo de trabalho de desenvolvimento típico, consulte [Etapa 5: Interaja com sua função no Nuvem AWS](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-remote-invoke).

**Topics**
+ [Usando o comando de invocação remota do sam](#using-sam-cli-remote-invoke-use)
+ [Usando o comando de invocação remota do sam](#using-sam-cli-remote-invoke-options)
+ [Configure o arquivo de configuração do seu projeto](#using-sam-cli-remote-invoke-configure)
+ [Exemplos](#using-sam-cli-remote-invoke-examples)
+ [Links relacionados](#using-sam-cli-remote-invoke-links)

## Pré-requisitos
<a name="using-sam-cli-remote-invoke-prerequisites"></a>

Para usar `sam remote invoke`, instale o AWS SAM CLI fazendo o seguinte:
+ [AWS SAM pré-requisitos](prerequisites.md).
+ [Instale o AWS SAM CLI](install-sam-cli.md).

Também recomendamos atualizar para a versão mais recente do AWS SAMCLI. Para saber mais, consulte [Atualizar o AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Antes de usar `sam remote invoke`, recomendamos uma compreensão básica do seguinte:
+ [Configurando o AWS SAM CLI](using-sam-cli-configure.md).
+ [Crie seu aplicativo em AWS SAM](using-sam-cli-init.md).
+ [Introdução à construção com AWS SAM](using-sam-cli-build.md).
+ [Introdução à implantação com AWS SAM](using-sam-cli-deploy.md).
+ [Introdução ao uso sam sync para sincronizar com Nuvem AWS](using-sam-cli-sync.md).

## Usando o comando de invocação remota do sam
<a name="using-sam-cli-remote-invoke-use"></a>

Antes de usar esse comando, seu recurso deve ser implantado no Nuvem AWS.

Use a seguinte estrutura de comando e execute no diretório raiz do seu projeto:

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

**nota**  
Esta página mostrará as opções fornecidas no prompt de comando. Você também pode configurar opções no arquivo de configuração do seu projeto em vez de passá-las no prompt de comando. Para saber mais, [Definir configurações do projeto](using-sam-cli-configure.md#using-sam-cli-configure-project).

Para obter uma descrição dos argumentos e opções `sam remote invoke`, consulte [sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Usar com o Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-use-kinesis"></a>

Você pode enviar registros de dados para um aplicativo do Kinesis Data Streams. Eles AWS SAM CLI enviarão seu registro de dados e retornarão um ID de fragmento e um número de sequência. Este é um exemplo:

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

**Para enviar um registro de dados**

1. Forneça um valor de ID de recurso como argumento para seu aplicativo Kinesis Data Streams. Para obter informações sobre recursos válidos IDs, consulte [ID do recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Forneça o registro de dados como um evento para enviar ao seu aplicativo Kinesis Data Streams. Você pode fornecer o evento na linha de comando usando a opção `--event` ou a partir de um arquivo usando `--event-file`. Se você não fornecer um evento, AWS SAM CLI ele enviará um evento vazio.

### Usar com funções do Lambda
<a name="using-sam-cli-remote-invoke-use-lambda"></a>

Você pode invocar uma função do Lambda na nuvem e transmitir um evento vazio ou fornecer um evento na linha de comando ou apartir de um arquivo. Eles AWS SAM CLI invocarão sua função Lambda e retornarão sua resposta. Este é um exemplo:

```
$ 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\"}"}%
```

**Para invocar uma função do Lambda**

1. Forneça um valor de ID de recurso como argumento para sua função do Lambda. Para obter informações sobre recursos válidos IDs, consulte [ID do recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Forneça um evento para enviar para sua função do Lambda. Você pode fornecer o evento na linha de comando usando a opção `--event` ou a partir de um arquivo usando `--event-file`. Se você não fornecer um evento, AWS SAM CLI ele enviará um evento vazio.

#### Funções Lambda configuradas com streaming de resposta
<a name="using-sam-cli-remote-invoke-invoke-stream"></a>

O comando `sam remote invoke` é compatível com funções do Lambda que são configuradas para transmitir respostas. Você pode configurar uma função Lambda para transmitir respostas usando a `FunctionUrlConfig` propriedade em seus AWS SAM modelos. Quando você usa `sam remote invoke`, AWS SAM CLI detecta automaticamente sua configuração do Lambda e invoca com streaming de resposta.

Para ver um exemplo, consulte [Invoque uma função do Lambda configurada para o streaming de respostas](#using-sam-cli-remote-invoke-examples-lambda-stream).

#### Transmita eventos de teste compartilháveis para uma função do Lambda na nuvem
<a name="using-sam-cli-remote-invoke-shareable"></a>

Eventos de teste compartilháveis são eventos de teste que você pode compartilhar com outros na mesma Conta da AWS. Para saber mais, consulte [Eventos de teste compartilháveis](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) no *AWS Lambda Guia do desenvolvedor*.

##### Acessar e gerenciar eventos compartilháveis de teste
<a name="using-sam-cli-remote-invoke-shareable-access"></a>

Você pode usar o AWS SAM CLI `sam remote test-event` comando para acessar e gerenciar eventos de teste compartilháveis. Por exemplo, você pode usar `sam remote test-event` para fazer o seguinte:
+ Recupere eventos de teste compartilháveis do registro de EventBridge esquemas da Amazon.
+ Modifique eventos de teste compartilháveis localmente e carregue-os no registro do EventBridge esquema.
+ Exclua eventos de teste compartilháveis do registro do EventBridge esquema.

Para saber mais, consulte [Introdução aos testes em nuvem com sam remote test-event](using-sam-cli-remote-test-event.md).

##### Transmita um evento de teste compartilhável para uma função do Lambda na nuvem
<a name="using-sam-cli-remote-invoke-shareable-pass"></a>

Para passar um evento de teste compartilhável do registro do EventBridge esquema para sua função Lambda na nuvem, use a `--test-event-name` opção e forneça o nome do evento de teste compartilhável. Este é um exemplo:

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

Se você salvar o evento de teste compartilhável localmente, poderá usar a opção `--event-file` e fornecer o caminho do arquivo e o nome do evento de teste local. Este é um exemplo:

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

### Usar o com o Amazon SQS
<a name="using-sam-cli-remote-invoke-use-sqs"></a>

Você pode enviar mensagens para filas do Amazon SQS. O AWS SAM CLI retorna o seguinte:
+ ID da mensagem
+ MD5 do corpo da mensagem
+ Metadados de resposta

 Este é um exemplo:

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

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

**Para enviar uma mensagem**

1. Forneça um valor de ID de recurso como argumento para a fila do Amazon SQS. Para obter informações sobre recursos válidos IDs, consulte [ID do recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Forneça um evento para enviar para sua fila do Amazon SQS. Você pode fornecer o evento na linha de comando usando a opção `--event` ou a partir de um arquivo usando `--event-file`. Se você não fornecer um evento, AWS SAM CLI ele enviará um evento vazio.

### Usar com o Step Functions
<a name="using-sam-cli-remote-invoke-use-sf"></a>

Você pode invocar uma máquina de estado do Step Functions para iniciar a execução. O AWS SAM CLI aguardará a conclusão do fluxo de trabalho da máquina de estado e retornará uma saída da última etapa da execução. Este é um exemplo:

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

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

**Para invocar uma máquina de estado**

1. Forneça um valor de ID de recurso como argumento para a máquina de estado do Step Functions. Para obter informações sobre recursos válidos IDs, consulte [ID do recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Forneça um evento para enviar para sua máquina estadual. Você pode fornecer o evento na linha de comando usando a opção `--event` ou a partir de um arquivo usando `--event-file`. Se você não fornecer um evento, AWS SAM CLI ele enviará um evento vazio.

## Usando o comando de invocação remota do sam
<a name="using-sam-cli-remote-invoke-options"></a>

Esta seção aborda algumas das principais opções que você pode usar com o comando `sam remote invoke`. Para obter uma lista completa das opções, consulte [sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Passe um evento para seu recurso
<a name="using-sam-cli-remote-invoke-options-event"></a>

Use as seguintes opções para transmitir eventos para seus recursos na nuvem:
+ `--event` - Passe um evento na linha de comando.
+ `--event-file` - Passe um evento de um arquivo.

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

**Use `--event` para passar um evento na linha de comando como um valor de string:**

```
$ 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!\"}"}%
```

**Use `--event-file` para transmitir um evento de um arquivo e fornecer o caminho para o arquivo:**

```
$ 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\"}"}%
```

**Passe um evento usando `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\"}"}%
```

### Configurar a saída da resposta AWS SAM CLI
<a name="using-sam-cli-remote-invoke-options-output"></a>

Quando você invoca um recurso compatível com `sam remote invoke`, AWS SAMCLI retorna uma resposta que contém o seguinte:
+ **Metadados da solicitação** – Metadata associados à solicitação. Isso inclui o ID da solicitação e o horário de início da solicitação.
+ **Resposta do recurso** - A resposta do seu recurso após ser invocado na nuvem.

Você pode usar a `--output` opção para configurar a resposta AWS SAM CLI de saída. Os seguintes valores de opção estão disponíveis:
+ `json` - Os metadados e a resposta do recurso são retornados em uma estrutura JSON. A resposta contém a saída SDK completa.
+ `text` - Os metadados são retornados na estrutura do texto. A resposta do recurso é retornada no formato de saída do recurso.

A seguir, veja um exemplo de uma saída `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\\\"}\"}"
}%
```

Quando você especifica uma saída `json`, toda a resposta é retornada para `stdout`. Este é um exemplo:

```
$ 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\\\"}\"}"
}%
```

A seguir, veja um exemplo de uma saída `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\"}"}%
```

Quando você especifica uma saída `text`, a saída de runtime da função do Lambda (por exemplo, registros) é retornada para `stderr`. A carga útil da função do Lambda é retornada para `stdout`. Este é um exemplo:

```
$ 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\"}"}%
```

### Personalize os parâmetros Boto3
<a name="using-sam-cli-remote-invoke-options-boto3"></a>

Pois`sam remote invoke`, AWS SAM CLI ele utiliza o AWS SDK para Python (Boto3) para interagir com seus recursos na nuvem. Você pode usar a opção `--parameter` para personalizar os parâmetros Boto3. Para ver uma lista dos parâmetros, consulte `--parameter`.

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

**Invoque uma função do Lambda para validar os valores dos parâmetros e verificar as permissões:**

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

**Use a opção `--parameter` várias vezes em um único comando para fornecer vários parâmetros:**

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

### Outras opções
<a name="using-sam-cli-remote-invoke-options-other"></a>

Para obter uma lista completa das opções `sam remote invoke`, consulte [sam remote invoke](sam-cli-command-reference-remote-invoke.md).

## Configure o arquivo de configuração do seu projeto
<a name="using-sam-cli-remote-invoke-configure"></a>

Para configurar `sam remote invoke` em seu arquivo de configuração, use `remote_invoke` em sua tabela. Veja a seguir um exemplo de arquivo `samconfig.toml` que configura valores padrão para o comando `sam remote invoke`.

```
...
version =0.1

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

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

Para ver um exemplo básico de uso`sam remote invoke`, consulte [Teste de AWS Lambda funções com AWS SAM controle remoto](https://aws.amazon.com/blogs/compute/testing-aws-lambda-functions-with-aws-sam-remote-invoke/) no *blog de AWS computação.*

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

#### Exemplos básicos
<a name="using-sam-cli-remote-invoke-examples-kinesis-basic"></a>

**Envie um registro de dados para um aplicativo Kinesis Data Streams a partir de um arquivo. O aplicativo Kinesis Data Streams é identificado fornecendo um ARN para o ID do recurso:**

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

**Envie um evento fornecido na linha de comando para um aplicativo do 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"
}%
```

**Obtenha a ID física do aplicativo Kinesis Data Streams. Em seguida, forneça um evento na linha de comando:**

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

**Forneça uma string JSON na linha de comando como um evento:**

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

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

**Envie um evento vazio para o aplicativo Kinesis Data Streams:**

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

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

**Retorne a AWS SAM CLI resposta no formato 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
  }
}%
```

**Retorne a saída JSON para 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
  }
}%
```

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

#### Exemplos básicos
<a name="using-sam-cli-remote-invoke-examples-lambda-basic"></a>

**Invoque uma função do Lambda fornecendo o ARN como ID do recurso:**

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

**Invoque uma função do Lambda fornecendo a ID lógica como uma ID de recurso:**

Você também deve fornecer o nome da CloudFormation pilha usando a `--stack-name` opção. Este é um exemplo:

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

Se seu aplicativo contiver uma única função do Lambda, você não precisará especificar sua ID lógica. Você pode fornecer somente a opção `--stack-name`. Este é um exemplo:

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

**Invoque uma função do Lambda fornecendo o ID físico como ID do recurso:**

O ID físico é criado quando você implanta usando CloudFormation.

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

**Invoque uma função do Lambda de uma pilha secundária:**

Neste exemplo, nosso aplicativo contém a seguinte estrutura de diretórios:

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

Para invocar a função do Lambda do nosso `childstack`, executamos o seguinte:

```
$ 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\": {}}"}%
```

#### Invoque uma função do Lambda configurada para o streaming de respostas
<a name="using-sam-cli-remote-invoke-examples-lambda-stream"></a>

Neste exemplo, usamos AWS SAM CLI para inicializar um novo aplicativo sem servidor que contém uma função do Lambda configurada para transmitir sua resposta. Implantamos nosso aplicativo no Nuvem AWS e usamos o `sam remote invoke` para interagir com nossa função na nuvem.

Começamos executando o comando `sam init` para criar um novo aplicativo sem servidor. Selecionamos o modelo de início rápido do **Lambda Response Streaming** e nomeamos nosso aplicativo. **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 SAMCLICria nosso projeto com a seguinte estrutura:

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

Veja a seguir um exemplo de nosso código de função do 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();
	  }
	);
```

Este é um exemplo de nosso arquivo `template.yaml`. O streaming de resposta para nossa função do Lambda é configurado usando a propriedade `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
```

Normalmente, você pode usar `sam build` e `sam deploy --guided` criar e implantar um aplicativo de produção. Neste exemplo, assumiremos um ambiente de desenvolvimento e usaremos o comando `sam sync` para criar e implantar nosso aplicativo.

**nota**  
O comando `sam sync` é recomendado para ambientes de desenvolvimento. Para saber mais, consulte [Introdução ao uso sam sync para sincronizar com Nuvem AWS](using-sam-cli-sync.md).

Antes de executar `sam sync`, verificamos se nosso projeto está configurado corretamente em nosso arquivo `samconfig.toml`. Mais importante ainda, verificamos os valores de `stack_name` e `watch`. Com esses valores especificados em nosso arquivo de configuração, não precisamos fornecê-los na linha de comando.

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

Em seguida, executamos `sam sync` para criar e implantar nosso aplicativo. Como a opção `--watch` está configurada em nosso arquivo de configuração, AWS SAMCLI criará o nosso aplicativo, implantará o nosso aplicativo e observará as alterações.

```
$ 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.
```

Agora que nossa função está implantada na nuvem, podemos usar `sam remote invoke` para interagir com nossa função. O AWS SAM  CLI deteca automaticamente que nossa função está configurada para streaming de resposta e imediatamente começa a gerar uma resposta transmitida de nossa função em tempo real.

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

Quando modificamos nosso código de função, AWS SAM CLI detecta instantaneamente e implanta imediatamente nossas alterações. Aqui está um exemplo da saída AWS SAMCLI após as alterações serem feitas em nosso código de função:

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

Agora podemos usar `sam remote invoke` novamente para interagir com nossa função na nuvem e testar nossas alterações.

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

#### Exemplos básicos
<a name="using-sam-cli-remote-invoke-examples-sqs-basic"></a>

**Invoque uma fila do Amazon SQS fornecendo o ARN como ID do recurso:**

```
$ 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
  }
}%
```

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

#### Exemplos básicos
<a name="using-sam-cli-remote-invoke-examples-sf-basic"></a>

**Invoque uma máquina de estado fornecendo sua ID física como ID de recurso:**

Primeiro, usamos `sam list resources` para obter nossa identificação física:

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

Em seguida, invocamos nossa máquina de estado usando o ID físico como ID do recurso. Transmitimos um evento na linha de comando com a opção `--event`:

```
$ 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"%
```

**Invoque uma máquina de estado transmitindo um evento vazio:**

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

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

## Links relacionados
<a name="using-sam-cli-remote-invoke-links"></a>

Para obter a documentação relacionada `sam remote invoke` e o uso do AWS SAMCLI, consulte o seguinte:
+ [sam remote invoke](sam-cli-command-reference-remote-invoke.md)
+ [AWS SAM CLI solução de problemas](sam-cli-troubleshooting.md)

# Automatize os testes de integração local com AWS SAM
<a name="serverless-sam-cli-using-automated-tests"></a>

Embora você possa usar [Introdução aos testes com sam local invoke](using-sam-cli-local-invoke.md) para testar o código manualmente, AWS SAM também permite testar seu código usando testes de integração automatizados. O teste de integração ajuda você a detectar problemas no início do ciclo de desenvolvimento, a melhorar a qualidade do código e a economizar tempo, ao mesmo tempo que reduz os custos.

Para criar testes de integração automatizados AWS SAM, primeiro você executa testes nas funções locais do Lambda antes de implantar na nuvem. AWS O comando [Introdução aos testes com sam local start-lambda](using-sam-cli-local-start-lambda.md) inicia um endpoint local que emula o endpoint de invocação do Lambda. Você pode invocá-lo a partir de seus testes automatizados. Como esse endpoint emula o endpoint de invocação do Lamba, você pode escrever testes uma vez e depois executá-los (sem qualquer modificação) na função do Lambda local ou em uma função do Lambda implantada. Você também pode executar os mesmos testes em uma AWS SAM pilha implantada em seu CI/CD pipeline. 

Como funciona:

1. Inicie o endpoint local do Lambda.

   Inicie o endpoint local do Lambda executando o seguinte comando no diretório que contém seu modelo: AWS SAM 

   ```
   sam local start-lambda
   ```

   Esse comando inicia um endpoint local no `http://127.0.0.1:3001` que emula AWS Lambda. Você pode executar seus testes automatizados nesse endpoint local do Lambda. Quando você invoca esse endpoint usando o AWS CLI ou SDK, ele executa localmente a função Lambda especificada na solicitação e retorna uma resposta.

1. Execute um teste de integração no endpoint Lambda local.

   Em seu teste de integração, você pode usar o AWS SDK para invocar sua função Lambda com dados de teste, aguardar a resposta e verificar se a resposta é o que você espera. Para executar o teste de integração localmente, você deve configurar o AWS SDK para enviar uma chamada de API Lambda Invoke para invocar o endpoint local do Lambda que você iniciou na etapa anterior.

   A seguir está um exemplo de Python (as AWS SDKs outras linguagens têm configurações semelhantes):

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

   Você pode usar esse código para testar as funções do Lambda implantadas configurando `running_locally` como `False`. Isso configura o AWS SDK ao qual se conectar AWS Lambda na AWS nuvem.

# Gere amostras de cargas úteis de eventos com AWS SAM
<a name="serverless-sam-cli-using-generate-event"></a>

Para testar suas funções do Lambda, você pode gerar e personalizar amostras de cargas de eventos que imitam os dados que suas funções do Lambda receberão quando acionadas por outros serviços. AWS Isso inclui serviços como o API Gateway, CloudFormation, Amazon S3 e muito mais.

A geração de exemplos de cargas úteis de eventos ajuda você a testar o comportamento da função do Lambda com uma variedade de entradas diferentes sem precisar trabalhar em um ambiente em tempo real. Essa abordagem também economiza tempo quando comparada à criação manual de amostras AWS de eventos de serviço para testar funções. 

Para ver a lista completa de serviços para os quais você pode gerar amostras de cargas de eventos, use este comando:

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

Para ver a lista de opções que você pode usar para um serviço específico, use este comando:

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

Exemplos:

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

# Testando e depurando funções duráveis
<a name="test-and-debug-durable-functions"></a>

Testar e depurar funções duráveis localmente funcionam de forma semelhante às funções normais do Lambda, com suporte automático para checkpoint e replay. Este guia aborda cenários comuns de teste e técnicas de solução de problemas.

## Fluxo de trabalho de teste local
<a name="test-and-debug-durable-functions-workflow"></a>

Ao testar funções duráveis localmente, o fluxo de trabalho difere das funções normais do Lambda:

**Fluxo de trabalho durável de testes de funções**

1. Crie seu aplicativo:

   ```
   $ sam build
   ```

1. Invoque sua função durável:

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

1. Verifique o histórico de execução, se necessário:

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

## Cenários de teste comuns
<a name="test-and-debug-durable-functions-scenarios"></a>

### Testando o comportamento do checkpoint
<a name="test-and-debug-durable-functions-scenarios-checkpoints"></a>

Para testar se sua função corretamente, os pontos de verificação indicam:

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

Quando você invoca essa função localmente, o período de espera é processado automaticamente.

### Testando cenários de retorno de chamada
<a name="test-and-debug-durable-functions-scenarios-callbacks"></a>

Para funções que aguardam retornos de chamada externos:

1. Inicie sua função durável que aguarda um retorno de chamada

1. Em outro terminal, resolva o retorno de chamada:

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

1. Observe a execução do currículo da função

## Solução de problemas
<a name="test-and-debug-durable-functions-troubleshooting"></a>

### Função durável que não está sendo executada corretamente
<a name="test-and-debug-durable-functions-troubleshooting-config"></a>

**Problema:** a função não se comporta como uma função durável.

**Soluções:**
+ Verifique se `DurableConfig` está definido no seu modelo de SAM
+ Certifique-se de que seu código de função use métodos SDK de função duráveis (por exemplo,`context.wait()`)
+ Verifique se você está usando um tempo de execução compatível (TypeScript, JavaScript, Python)

### Não é possível recuperar o histórico de execução
<a name="test-and-debug-durable-functions-troubleshooting-history"></a>

**Problema:** O `local execution history` comando não retorna resultados.

**Soluções:**
+ Verifique se o ID de execução está correto
+ Verifique se a função foi invocada pelo menos uma vez

### Os comandos de retorno de chamada não funcionam
<a name="test-and-debug-durable-functions-troubleshooting-callbacks"></a>

**Problema:** os comandos de retorno de chamada não resolvem operações pendentes.

**Soluções:**
+ Verifique se o ID de retorno de chamada está correto
+ Verifique se a função está realmente aguardando um retorno de chamada
+ Verifique se você está usando a sintaxe correta do comando de retorno de chamada

## Dicas de depuração
<a name="test-and-debug-durable-functions-debugging"></a>
+ **Use o histórico de execução** - revise o histórico de execução para entender o fluxo de sua função durável
+ **Teste incrementalmente** - comece com operações de espera simples antes de adicionar lógica complexa
+ **Use registro detalhado - Habilite o registro** detalhado para rastrear o fluxo de execução

## Saiba mais
<a name="test-and-debug-durable-functions-learn"></a>

Para obter mais informações sobre testes e depuração, consulte:
+ [Introdução aos testes com sam local invoke](using-sam-cli-local-invoke.md)- Documentação de invocação local
+ [sam local execution history](sam-cli-command-reference-sam-local-execution-history.md)- Histórico de execução