

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejecute API Gateway de forma local con AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

La ejecución local de Amazon API Gateway puede tener diversas ventajas. Por ejemplo, ejecutar API Gateway de forma local te permite probar los puntos finales de la API de forma local antes de implementarlos AWS en la nube. Si primero realiza las pruebas a nivel local, a menudo puede reducir las pruebas y el desarrollo en la nube, lo que puede ayudar a reducir los costos. Además, las pruebas locales facilitan la depuración. 

Para iniciar una instancia local de API Gateway que puedas usar para probar la funcionalidad de solicitud/respuesta HTTP, usa el comando. `sam local start-api` AWS SAMCLI Esta funcionalidad incluye la recarga en caliente para que pueda desarrollar e iterar rápidamente sus características.

**nota**  
La *recarga en caliente* se produce cuando solo se actualizan los archivos que se han modificado y el estado de la aplicación sigue siendo el mismo. Por el contrario, la *recarga en tiempo real* se produce cuando se actualiza toda la aplicación y se pierde su estado.

Para obtener instrucciones sobre cómo utilizar el comando `sam local start-api`, consulta [Introducción a las pruebas con sam local start-api](using-sam-cli-local-start-api.md).

De forma predeterminada, AWS SAM usa integraciones de AWS Lambda proxy y es compatible con ambos `HttpApi` tipos de recursos. `Api` Para obtener más información sobre las integraciones de proxy para los tipos de `HttpApi` recursos, consulte Cómo [trabajar con integraciones de AWS Lambda proxy para HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) en la Guía para *desarrolladores de API Gateway*. Para obtener más información sobre las integraciones de proxy para los tipos de recursos `Api`, consulta [Cómo trabajar con integraciones de proxy Lambda de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy) en la *Guía para desarrolladores de API Gateway*.

**Ejemplo:**

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

AWS SAM busca automáticamente todas las funciones de la AWS SAM plantilla que tengan definidas las fuentes de `Api` eventos `HttpApi` o las fuentes de eventos. A continuación, monta la función en las rutas HTTP definidas.

En el ejemplo de `Api` siguiente, la función `Ratings` monta `ratings.py:handler()` en `/ratings` para las solicitudes `GET`.

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

Aquí tienes un ejemplo de `Api` de respuesta:

```
// 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"
    });
}
```

Si modifica el código de la función, ejecuta el comando `sam build` para `sam local start-api` para detectar los cambios.

## Archivo de variables de entorno
<a name="serverless-sam-cli-using-start-api-environment-variable"></a>

Para declarar localmente las variables de entorno que anulan los valores definidos en las plantillas, haga lo siguiente:

1. Cree un archivo JSON que contenga las variables de entorno que desee anular.

1. Usa el argumento `--env-vars` para anular los valores definidos en sus plantillas.

### Declaración de variables de entorno
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Para declarar variables de entorno que se apliquen globalmente a todos los recursos, especifica un objeto `Parameters` como el siguiente:

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

Para declarar variables de entorno diferentes para cada recurso, especifica objetos para cada recurso de la siguiente manera:

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

Al especificar objetos para cada recurso, puede utilizar los siguientes identificadores, enumerados en orden de mayor a menor prioridad:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identificador de ruta completo

Puedes utilizar los dos métodos anteriores para declarar variables de entorno juntos en un único archivo. Al hacerlo, las variables de entorno que haya proporcionado para recursos específicos tienen prioridad sobre las variables de entorno globales.

Guarde las variables de entorno en un archivo JSON, como `env.json`.

### Anulación de valores de variables de entorno
<a name="serverless-sam-cli-using-start-api-environment-file-override"></a>

Para anular las variables de entorno por las definidas en el archivo JSON, utiliza el argumento `--env-vars` con los comandos **invoke** o **start-api**. Por ejemplo:

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

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

Si tu aplicación incluye capas, para obtener información sobre cómo depurar los problemas con las capas de su host local, consulta [Aumente la eficiencia con las capas Lambda con AWS SAM](serverless-sam-cli-layers.md).