

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 el comando sam local
<a name="using-sam-cli-local"></a>

Utilice el AWS Serverless Application Model comando Command Line Interface (AWS SAMCLI) `sam local` para probar localmente las aplicaciones sin servidor.

Para obtener una introducción al AWS SAMCLI, consulte[¿Qué es el? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli).

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

Para usar `sam local`, 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`, 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 del comando sam local
<a name="using-sam-cli-local-command"></a>

Usa el comando `sam local` con cualquiera de sus subcomandos para realizar diferentes tipos de testeo local para tu aplicación.

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

Para obtener más información acerca de cada subcomando, consulta lo siguiente:
+ **[Introducción a sam local generate-event](using-sam-cli-local-generate-event.md)**— Genere Servicio de AWS eventos para las pruebas locales.
+ **[Introducción a sam local invoke](using-sam-cli-local-invoke.md)**: inicie una invocación única local de un recurso de función de AWS Lambda .
+ **[Introducción a sam local start-api](using-sam-cli-local-start-api.md)**: ejecuta las funciones de Lambda mediante un servidor HTTP local.
+ **[Introducción a sam local start-lambda](using-sam-cli-local-start-lambda.md)**— Ejecute las funciones de Lambda mediante un servidor HTTP local para usarlas con o. AWS CLI SDKs

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

Utilice el AWS Serverless Application Model `sam local generate-event` subcomando Command Line Interface (AWS SAMCLI) para generar muestras de carga útil de eventos compatibles. Servicios de AWS A continuación, puede modificar estos eventos y transferirlos a los recursos locales para probarlos.
+ Para obtener una introducción al, consulte AWS SAMCLI [¿Qué es el? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Para ver una lista de opciones de comandos `sam local generate-event`, consulta [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Un *evento* es un objeto JSON que se genera cuando un Servicio de AWS realiza una acción o tarea. Estos eventos contienen información específica, como los datos que se procesaron o la marca de tiempo del evento. La mayoría de Servicios de AWS generan eventos y los eventos de cada servicio tienen un formato exclusivo para su servicio.

Los eventos generados por un servicio se transfieren a otros servicios como *fuente de eventos*. Por ejemplo, un artículo colocado en un bucket de Amazon Simple Storage Service (Amazon S3) puede generar un evento. A continuación, este evento se puede utilizar como fuente de eventos para que una función de AWS Lambda siga procesando los datos.

Los eventos con `sam local generate-event` los que se generan tienen el mismo formato que los eventos reales creados por el AWS servicio. Puede modificar el contenido de estos eventos y usarlos para probar los recursos de la aplicación.

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

Para usar `sam local generate-event`, 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 generate-event`, 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).

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

Utilice el AWS SAMCLI `sam local generate-event` subcomando para generar los eventos compatibles. Servicios de AWS

**Para ver una lista de los compatibles Servicios de AWS**

1. Ejecuta lo siguiente:

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

1. Aparecerá la lista de compatibles Servicios de AWS . A continuación, se muestra un ejemplo:

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

**Para generar un evento local**

1. Ejecute `sam local generate-event` y proporciona el nombre del servicio compatible. Esto mostrará una lista de tipos de eventos que puede generar. A continuación, se muestra un ejemplo:

   ```
   $ 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 generar el evento de muestra `sam local generate-event`, ejecuta e indique el servicio y el tipo de evento.

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

   A continuación, se muestra un ejemplo:

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

Estos eventos de ejemplo contienen valores de marcador de posición. Puede modificar estos valores para que hagan referencia a los recursos reales de la aplicación o a los valores para facilitar las testeo local.

**Para modificar un evento de muestra**

1. Puede modificar eventos de ejemplo en la línea de comandos. Para ver sus opciones, ejecuta lo siguiente:

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

   A continuación, se muestra un ejemplo:

   ```
   $ 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. Utiliza cualquiera de estas opciones en la línea de comandos para modificar la carga útil del evento de muestra. A continuación, se muestra un ejemplo:

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

## Utiliza los eventos generados para realizar testeo local
<a name="using-sam-cli-local-generate-event-use"></a>

Guarde los eventos generados localmente y utiliza otros subcomandos `sam local` para realizar las pruebas.

**Para guardar los eventos generados localmente**
+ Ejecuta lo siguiente:

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

  El siguiente es un ejemplo de un evento que se guarda como un archivo `s3.json` en la carpeta `events` de nuestro proyecto.

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

**Para usar un evento generado para realizar testeo local**
+ Pase el evento con otros subcomandos `sam local` mediante la opción `--event`.

  A continuación, se muestra un ejemplo del uso del evento `s3.json` para invocar la función de Lambda de forma local:

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

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

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

Para ver una demostración del uso de `sam local`, consulta [Desarrollo local con AWS SAM . Probando Nube de AWS recursos de entornos de desarrollo locales](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) en la *serie Serverless Land Sessions with SAM en YouTube* adelante.

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

Utilice el AWS Serverless Application Model `sam local invoke` subcomando Command Line Interface (AWS SAMCLI) para iniciar una única invocación local de una AWS Lambda función.
+ Para obtener una introducción a la, consulte AWS SAMCLI [¿Qué es el? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Para ver una lista de opciones de comandos `sam local invoke`, consulta [sam local invoke](sam-cli-command-reference-sam-local-invoke.md).
+ Para ver un ejemplo de uso de `sam local invoke` 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**  
No se recomienda utilizar las capacidades de invocación local de la CLI de SAM en código que no sea de confianza. Para tener un aislamiento completo del entorno local, ejecute el código directamente en el servicio Lambda.

**nota**  
`sam local invoke`admite funciones duraderas con funciones automáticas de puntos de control y reproducción. Al invocar funciones duraderas de forma local, el estado de ejecución se gestiona automáticamente.

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

Para usar `sam local invoke`, 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 invoke`, 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).

## Invocar una función de Lambda localmente
<a name="using-sam-cli-local-invoke-use"></a>

De forma predeterminada, cuando ejecuta `sam local invoke`, 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 invocar una función de Lambda de forma local**

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

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

1. Si la aplicación contiene más de una función, proporciona el identificador lógico de la función. A continuación, se muestra un ejemplo:

   ```
   $ sam local invoke HelloWorldFunction
   ```

1. La CLI de AWS SAM compila su función en un contenedor local utilizando Docker. Luego invoca la función y genera la respuesta de su función.

   A continuación, se muestra un ejemplo:

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

### Administración de registros de
<a name="using-sam-cli-local-invoke-logs"></a>

Cuando se usa `sam local invoke`, la salida del tiempo de ejecución de la función de Lambda (por ejemplo, los registros) se envía a `stderr` y el resultado de la función de Lambda se envía a `stdout`.

A continuación, se muestra un ejemplo de una función de Lambda básica:

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

Puede guardar estas salidas estándar. A continuación, se muestra un ejemplo:

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

Puedes utilizar estos resultados estándar para automatizar aún más sus procesos de desarrollo local.

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

### Transferencia de eventos personalizados para invocar la función de Lambda
<a name="using-sam-cli-local-invoke-options-events"></a>

Para pasar un evento a la función de Lambda, utiliza la opción `--event`. A continuación, se muestra un ejemplo:

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

Puede crear eventos con el subcomando `sam local generate-event`. Para obtener más información, consulta [Introducción a las pruebas con sam local generate-event](using-sam-cli-local-generate-event.md).

### Pase variables de entorno al invocar la función de Lambda
<a name="using-sam-cli-local-invoke-options-env"></a>

Si la función de Lambda usa variables de entorno, puede pasarlas durante las testeo local con la opción `--env-vars`. Esta es una excelente forma de probar una función de Lambda localmente con los servicios de su aplicación que ya están implementados en la nube. A continuación, se muestra un ejemplo:

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

### Especifica una plantilla o función
<a name="using-sam-cli-local-invoke-options-specify"></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.

Para invocar una función de una aplicación o pila anidada, proporciona el identificador lógico de la aplicación o pila junto con el identificador lógico de la función. A continuación, se muestra un ejemplo:

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

### Pruebe una función de Lambda de su proyecto Terraform
<a name="using-sam-cli-local-invoke-options-terraform"></a>

Utiliza la opción `--hook-name` para probar localmente las funciones de Lambda de sus proyectos Terraform. Para obtener más información, consulta [Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales](using-samcli-terraform.md).

A continuación, se muestra un ejemplo:

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

## Prácticas recomendadas
<a name="using-sam-cli-local-invoke-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 invoke` 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.

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

### Genere un evento de muestra de Amazon API Gateway y utilícelo para invocar una función de Lambda localmente
<a name="using-sam-cli-local-invoke-examples-api"></a>

En primer lugar, generamos una carga útil de eventos API HTTP de API Gateway y la guardamos en la carpeta `events`.

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

A continuación, modificamos la función de Lambda para que devuelva un valor de parámetro del evento.

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

A continuación, invocamos localmente la función de Lambda y proporcionamos un 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\"}"}%
```

### Pasar variables de entorno al invocar una función de Lambda localmente
<a name="using-sam-cli-local-invoke-examples-env"></a>

Esta aplicación tiene una función de Lambda que utiliza una variable de entorno como nombre de tabla de Amazon DynamoDB. El siguiente es un ejemplo de la función definida en la AWS SAM plantilla:

```
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 probar localmente la función de Lambda mientras interactúa con la tabla de DynamoDB en la nube. Para ello, creamos un archivo de variables de entorno y lo guardamos en el directorio raíz del proyecto como `locals.json`. El valor se proporciona aquí para las referencias del `SAMPLE_TABLE` de la tabla de DynamoDB en la nube.

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

A continuación, ejecutamos `sam local invoke` y transferimos la variables de entorno con la opción `--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":"{}"}
```

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

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

Para ver una demostración del uso de `sam local`, consulta [Desarrollo local con AWS SAM . Probando Nube de AWS recursos de entornos de desarrollo locales](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) en la *serie Serverless Land Sessions with SAM en YouTube* adelante.

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

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

Utilice el AWS SAMCLI subcomando `sam local start-lambda` para invocar la función Lambda mediante y. AWS CLI SDKs Este comando inicia un punto de conexión local que emula Lambda.
+ Para obtener una introducción a la, consulte AWS SAMCLI [¿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-lambda`, consulta [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

**nota**  
`sam local start-lambda`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 Lambda local.

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

Para usar `sam local start-lambda`, 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-lambda`, 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).

## Utilizando sam local start-lambda
<a name="using-sam-cli-local-start-lambda-use"></a>

De forma predeterminada, cuando ejecuta `sam local start-lambda`, 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 usar sam local start-lambda**

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

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

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

   ```
   $ 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. Utilice AWS CLI o SDKs para invocar la función Lambda localmente.

   A continuación, se muestra un ejemplo mediante la AWS CLI:

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

   A continuación, se muestra un ejemplo en el que se utiliza para AWS SDK: Python

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

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

### Especificar plantilla
<a name="using-sam-cli-local-start-lambda-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-lambda --template myTemplate.yaml
```

Para obtener más información sobre AWS SAM las plantillas, consulte[AWS SAM anatomía de la plantilla](sam-specification-template-anatomy.md).

## Prácticas recomendadas
<a name="using-sam-cli-local-start-lambda-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-lambda` 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-lambda-learn"></a>

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