

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

# 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).