

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.

# Introducción a las pruebas con sam local start-api
<a name="using-sam-cli-local-start-api"></a>

Utilice el AWS Serverless Application Model `sam local start-api` subcomando Command Line Interface (AWS SAMCLI) para ejecutar AWS Lambda las funciones de forma local y realizar pruebas a través de un servidor HTTP local. Este tipo de pruebas resulta útil para las funciones de Lambda que invocan un punto de conexión de Amazon API Gateway.
+ Para obtener una introducción al AWS SAMCLI, consulte [¿Qué es el? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Para ver una lista de opciones de comandos `sam local start-api`, consulta [sam local start-api](sam-cli-command-reference-sam-local-start-api.md).
+ Para ver un ejemplo de uso de `sam local start-api` durante un flujo de trabajo de desarrollo típico, consulta [Paso 7: (opcional) probar tu aplicación localmente](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**nota**  
`sam local start-api`admite funciones duraderas con funciones automáticas de puntos de control y reproducción. Las funciones duraderas funcionan a la perfección con el punto final API Gateway local.

## Requisitos previos
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Para usar `sam local start-api`, completa lo siguiente para instalar la CLI de AWS SAM:
+ [AWS SAM requisitos previos](prerequisites.md).
+ [Instala la AWS SAM CLI](install-sam-cli.md).

Antes de usar `sam local start-api`, se recomienda tener conocimientos básicos de lo siguiente:
+ [Configuración de la AWS SAM de CLI](using-sam-cli-configure.md).
+ [Crea tu aplicación en AWS SAM](using-sam-cli-init.md).
+ [Introducción a la construcción con AWS SAM](using-sam-cli-build.md).
+ [Introducción a la implementación con AWS SAM](using-sam-cli-deploy.md).

## Uso de una API de inicio local
<a name="using-sam-cli-local-start-api-use"></a>

De forma predeterminada, cuando ejecuta `sam local start-api`, la CLI de AWS SAM asume que su directorio de trabajo actual es el directorio raíz del proyecto. Primero la CLI de AWS SAM buscará un archivo `template.[yaml|yml]` dentro de una subcarpeta `.aws-sam`. Si no lo encuentra, la CLI de AWS SAM buscará un archivo `template.[yaml|yml]` en su directorio de trabajo actual.

**Para iniciar un servidor HTTP local**

1. Desde el directorio raíz del proyecto, ejecuta lo siguiente:

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

1. La CLI de AWS SAM compila las funciones de Lambda en un contenedor local Docker. A continuación, genera la dirección local del punto de conexión del servidor HTTP. A continuación, se muestra un ejemplo:

   ```
   $ 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. Puedes invocar la función de Lambda mediante el navegador o la línea de comandos. A continuación, se muestra un ejemplo:

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

1. Al realizar cambios en el código de la función de Lambda, tenga en cuenta lo siguiente para actualizar el servidor HTTP local:
   + Si la aplicación no tiene un directorio `.aws-sam` y la función utiliza un lenguaje interpretado, la CLI de AWS SAM actualizará automáticamente la función creando un nuevo contenedor y alojándolo.
   + Si la aplicación tiene un directorio `.aws-sam`, debe ejecutar `sam build` para actualizar la función. A continuación, ejecuta nuevamente `sam local start-api` para alojar la función.
   + Si la función utiliza un lenguaje compilado o si el proyecto requiere un soporte de empaquetado complejo, ejecuta su propia solución de compilación para actualizar la función. A continuación, ejecuta nuevamente `sam local start-api` para alojar la función.

### Funciones de Lambda que utilizan autorizadores de Lambda
<a name="using-sam-cli-local-start-api-authorizers"></a>

**nota**  
Esta característica es nueva en la versión 1.80.0 de la CLI de AWS SAM. Para actualizar, consulta [Actualización de AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

En el caso de las funciones de Lambda configuradas para utilizar autorizadores de Lambda, la CLI de AWS SAM invocará automáticamente la función de Lambda antes de invocar el punto de conexión de la función de Lambda.

A continuación, se muestra un ejemplo de cómo iniciar un servidor HTTP local para una función que utiliza un 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
```

Al invocar el punto de conexión de la función de Lambda a través del servidor HTTP local, el primero invoca el autorizador Lambda de la CLI de AWS SAM. Si la autorización se realiza correctamente, la CLI de AWS SAM invocará el punto de conexión de la función de Lambda. A continuación, se muestra un ejemplo:

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

## Opciones
<a name="using-sam-cli-local-start-api-options"></a>

### Reutiliza los contenedores de forma continua para acelerar las invocaciones de funciones locales
<a name="using-sam-cli-local-start-api-options-warm"></a>

De forma predeterminada, la CLI de AWS SAM crea un contenedor nuevo cada vez que se invoca la función a través del servidor HTTP local. Utiliza la opción `--warm-containers` de reutilizar automáticamente el contenedor para las invocaciones de funciones. Esto acelera el tiempo que tarda la CLI de AWS SAM en preparar la función de Lambda para la invocación local. Puede personalizar aún más esta opción proporcionando el argumento `eager` o `lazy`.
+ `eager`: los contenedores de todas las funciones se cargan al inicio y se conservan entre las invocaciones.
+ `lazy`: los contenedores solo se cargan cuando se invoca cada función por primera vez. A continuación, se conservan para realizar más invocaciones.

A continuación, se muestra un ejemplo:

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

Al utilizar `--warm-containers` y modificar el código de la función de Lambda:
+ Si la aplicación tiene un directorio `.aws-sam`, ejecuta `sam build` para actualizar el código de función en los artefactos de compilación de la aplicación.
+ Cuando se detecta un cambio en el código, la CLI de AWS SAM cierra automáticamente el contenedor de funciones de Lambda.
+ Cuando vuelva a invocar la función, la CLI de AWS SAM crea automáticamente un nuevo contenedor.

### Especifica una imagen de contenedor para utilizarla en las funciones de Lambda
<a name="using-sam-cli-local-start-api-options-specify"></a>

De forma predeterminada, la CLI de AWS SAM utiliza imágenes base de Lambda de Amazon Elastic Container Registry (Amazon ECR) para invocar sus funciones de forma local. Utiliza la opción `--invoke-image` para hacer referencia a una imagen de contenedor personalizada. A continuación, se muestra un ejemplo:

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

Puedes especificar la función que se va a utilizar con la imagen de contenedor personalizada. A continuación, se muestra un ejemplo:

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

### Especifica una plantilla para probarla localmente
<a name="using-sam-cli-local-start-api-options-template"></a>

Para especificar una plantilla a la que CLI de AWS SAM haga referencia, utiliza la opción `--template`. AWS SAMCLICargará solo esa AWS SAM plantilla y los recursos a los que apunta. A continuación, se muestra un ejemplo:

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

### Especifica el entorno de desarrollo del host de su función de Lambda
<a name="using-sam-cli-local-start-api-options-dev"></a>

De forma predeterminada, el subcomando `sam local start-api` crea un servidor HTTP `localhost` con una dirección IP `127.0.0.1`. Puede personalizar estos valores si su entorno de desarrollo local está aislado de su máquina local.

Utiliza la opción `--container-host` para especificar un host. A continuación, se muestra un ejemplo:

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

Utiliza la opción `--container-host-interface` para especificar un la dirección IP del host de la red a la que deben enlazarse los puertos del contenedor. A continuación, se muestra un ejemplo:

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

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

Si la aplicación tiene un directorio `.aws-sam` desde el que se ejecuta `sam build`, asegúrese de ejecutar `sam build` cada vez que actualice el código de la función. A continuación, ejecuta `sam local start-api` para probar localmente el código de función actualizado.

El testeo local son una excelente solución para desarrollar y probar rápidamente antes de implementarlas en la nube. Sin embargo, las testeo local no lo validan todo, como los permisos entre los recursos de la nube. En la medida de lo posible, pruebe sus aplicaciones en la nube. Te recomendamos que [utiliza `sam sync`](using-sam-cli-sync.md) para acelerar los flujos de trabajo de pruebas en la nube.

## Más información
<a name="using-sam-cli-local-start-api-learn"></a>

Para obtener una lista de todas las opciones `sam local start-api`, consulta [sam local start-api](sam-cli-command-reference-sam-local-start-api.md).