

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.

# Pruebe su aplicación sin servidor con AWS SAM
<a name="serverless-test-and-debug"></a>

Tras escribir y compilar la aplicación, estará preparado para probarla y comprobar que funciona correctamente. Con la interfaz de línea de AWS SAM comandos (CLI), puede probar localmente su aplicación sin servidor antes de subirla a la AWS nube. Probar la aplicación le ayuda a confirmar su funcionalidad, fiabilidad y rendimiento, al mismo tiempo que identifica los problemas (errores) que deberán abordarse.

En esta sección se proporciona orientación sobre las prácticas habituales que puede seguir para probar su aplicación. Los temas de esta sección se centran principalmente en las pruebas locales que puede realizar antes de implementarla en la AWS nube. Probar antes de la implementación le ayuda a identificar los problemas de forma proactiva, lo que reduce los costos innecesarios asociados a los problemas de implementación. Cada tema de esta sección describe una prueba que puede realizar, ¿le dice a yoxi include href? u explica las ventajas de su uso e incluye ejemplos que muestran cómo realizar la prueba. Tras probar la aplicación, estará preparado para depurar cualquier problema que haya encontrado.

**Topics**
+ [Introducción a las pruebas con el comando sam local](using-sam-cli-local.md)
+ [Invoque funciones Lambda localmente con AWS SAM](serverless-sam-cli-using-invoke.md)
+ [Ejecute API Gateway de forma local con AWS SAM](serverless-sam-cli-using-start-api.md)
+ [Introducción a las pruebas en la nube con sam remote test-event](using-sam-cli-remote-test-event.md)
+ [Introducción a las pruebas en la nube con sam remote invoke](using-sam-cli-remote-invoke.md)
+ [Automatice las pruebas de integración local con AWS SAM](serverless-sam-cli-using-automated-tests.md)
+ [Genere cargas útiles de eventos de muestra con AWS SAM](serverless-sam-cli-using-generate-event.md)
+ [Prueba y depuración de funciones duraderas](test-and-debug-durable-functions.md)

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

# Invoque funciones Lambda localmente con AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

La invocación local de una función de Lambda antes de probarla o implementarla en la nube puede tener diversas ventajas. Le permite probar la lógica de la función con mayor rapidez. Probar primero a nivel local reduce la probabilidad de identificar problemas al realizar las pruebas en la nube o durante la implementación, lo que puede ayudarle a evitar costos innecesarios. Además, las pruebas locales facilitan la depuración.

Puede invocar la función de Lambda de forma local mediante el comando [sam local invoke](sam-cli-command-reference-sam-local-invoke.md) y proporcionando el ID lógico de la función y un archivo de eventos. **sam local invoke** también acepta `stdin` como evento. Para más información, consulta [Evento](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event) en la *Guía para desarrolladores de AWS Lambda *. Para obtener información sobre los formatos de mensajes de eventos de distintos AWS servicios, consulte [Utilización AWS Lambda con otros servicios](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html) en la Guía para *AWS Lambda desarrolladores*.

**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**  
El **sam local invoke** comando corresponde al comando AWS Command Line Interface [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html)(AWS CLI). Puedes utilizar cualquiera de los comandos para invocar una función de Lambda.

Debes ejecutar el comando **sam local invoke** en el directorio del proyecto que contiene la función que desea invocar.

 Ejemplos:

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

## Archivo de variables de entorno
<a name="serverless-sam-cli-using-invoke-environment-file"></a>

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

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

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

La `--env-vars` opción admite dos formatos de archivo. El formato del archivo se detecta automáticamente en función del contenido del archivo.

### Declarar variables de entorno con JSON
<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`.

### Declarar variables de entorno con archivos.env
<a name="serverless-sam-cli-using-invoke-environment-file-dotenv"></a>

También puede usar un `.env` archivo para declarar variables de entorno. Las variables declaradas en un `.env` archivo se aplican globalmente a todas las funciones, lo que equivale al `Parameters` objeto en formato JSON.

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

El `.env` formato admite comentarios (líneas que comienzan por`#`) y valores entre comillas.

**nota**  
El `.env` formato solo admite variables de entorno globales. Para declarar variables de entorno específicas de una función, utilice el formato JSON.

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

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

```
# Using a JSON file
sam local invoke --env-vars env.json

# Using a .env file
sam local invoke --env-vars .env
```

## Capas
<a name="serverless-sam-cli-using-invoke-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).

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

Para ver un ejemplo práctico de cómo invocar funciones de forma local, consulte el [Módulo 2: Ejecutar de forma local](https://s12d.com/sam-ws-en-local) en *The* Complete Workshop. AWS SAM 

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

# Introducción a las pruebas en la nube con sam remote test-event
<a name="using-sam-cli-remote-test-event"></a>

Utilice el AWS Serverless Application Model comando Command Line Interface (AWS SAM CLI) `sam remote test-event` para acceder a los eventos de prueba que se pueden compartir para sus AWS Lambda funciones y gestionarlos.

Para obtener más información sobre los eventos de prueba compartibles, consulta [Eventos de prueba compartibles](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) en la *Guía para desarrolladores de AWS Lambda *.

**Topics**
+ [Configura la CLI de AWS SAM para utilizar sam remote test-event.](#using-sam-cli-remote-test-event-setup)
+ [Uso del comando sam remote test-event](#using-sam-cli-remote-test-event-use)
+ [Uso de eventos de prueba compartibles](#using-sam-cli-remote-test-event-invoke)
+ [Gestion de eventos de prueba compartibles](#using-sam-cli-remote-test-event-manage)

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

Para usar `sam remote test-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).

Si ya la tiene AWS SAM CLI instalada, le recomendamos que la actualice a la última AWS SAMCLI versión. Para obtener más información, consulta [Actualización de AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Antes de usar `sam remote test-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).
+ [Introducción al uso sam sync de la sincronización con Nube de AWS](using-sam-cli-sync.md).

## Configura la CLI de AWS SAM para utilizar sam remote test-event.
<a name="using-sam-cli-remote-test-event-setup"></a>

Complete los siguientes pasos de configuración para usar el AWS SAM CLI `sam remote test-event` comando:

1. **Configure el AWS SAM CLI para usar su Cuenta de AWS**: los usuarios pueden acceder y administrar los eventos de prueba de Lambda que se pueden compartir dentro del mismo. Cuenta de AWS Para configurarlos AWS SAM CLI para que usen los suyos Cuenta de AWS, consulte. [Configuración de la AWS SAM de CLI](using-sam-cli-configure.md)

1. **Configurar los permisos para los eventos de prueba compartibles**: para acceder a los eventos de prueba compartibles y gestionarlos, debe tener los permisos adecuados. Para obtener más información, consulta los [Eventos de prueba que se puedan compartir](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) en la *Guía para desarrolladores de AWS Lambda *.

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

El AWS SAM CLI `sam remote test-event` comando proporciona los siguientes subcomandos que puede usar para acceder a los eventos de prueba que se pueden compartir y administrarlos:
+ `delete`— Eliminar un evento de prueba que se pueda compartir del registro de EventBridge esquemas de Amazon.
+ `get`— Obtenga un evento de prueba que se pueda compartir del registro de EventBridge esquemas.
+ `list`— Listar los eventos de prueba que se pueden compartir existentes para una función del registro del EventBridge esquema.
+ `put`— Guarda un evento de un archivo local en el registro del EventBridge esquema.

Para enumerar estos subcomandos mediante el AWS SAM CLI, ejecute lo siguiente:

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

### Eliminación de eventos de prueba compartibles
<a name="using-sam-cli-remote-test-event-use-delete"></a>

Puede eliminar un evento de prueba compartible usando el subcomando `delete` junto con lo siguiente:
+ Proporciona el nombre del evento de prueba compartible que se va a eliminar.
+ Proporciona un ID aceptable de la función de Lambda asociada al evento.
+ Si proporciona el identificador lógico de la función Lambda, también debe proporcionar el nombre de la AWS CloudFormation pila asociada a la función Lambda.

A continuación, se muestra un ejemplo:

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

Para obtener una lista de las opciones que se pueden usar con el subcomando `delete`, consulta [sam remote test-event delete](sam-cli-command-reference-remote-test-event-delete.md). También puede ejecutar lo siguiente desde: AWS SAM CLI

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

### Obtención de eventos de prueba compartibles
<a name="using-sam-cli-remote-test-event-use-get"></a>

Puede obtener un evento de prueba que se pueda compartir desde el registro del EventBridge esquema mediante el `get` subcomando junto con lo siguiente:
+ Proporciona el nombre del evento de prueba compartible que se desea obtener.
+ Proporciona un ID aceptable de la función de Lambda asociada al evento.
+ Si proporciona el identificador lógico de la función Lambda, también debe proporcionar el nombre de la AWS CloudFormation pila asociada a la función Lambda.

A continuación se muestra un ejemplo en el que se obtiene un evento de prueba compartible llamado `demo-event` que está asociado a la función de Lambda `HelloWorldFunction` de la pila de `sam-app`. Este comando imprimirá el evento en la consola.

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

Para obtener un evento de prueba compartible y guardarlo en su equipo local, utiliza la opción `--output-file` y proporciona una ruta de archivo y un nombre. A continuación se muestra un ejemplo que guarda `demo-event` como `demo-event.json` en el directorio de trabajo actual:

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

Para obtener una lista de las opciones que se pueden usar con el subcomando `get`, consulta [sam remote test-event get](sam-cli-command-reference-remote-test-event-get.md). También puede ejecutar lo siguiente desde: AWS SAM CLI

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

### Enumeración de eventos de prueba compartibles
<a name="using-sam-cli-remote-test-event-use-list"></a>

Puede enumerar todos los eventos de prueba compartibles para una función de Lambda concreta desde el registro de esquemas. Utiliza el subcomando `list` junto con lo siguiente:
+ Proporciona un ID aceptable de la función de Lambda asociada a los eventos.
+ Si proporciona el identificador lógico de la función Lambda, también debe proporcionar el nombre de la CloudFormation pila asociada a la función Lambda.

A continuación se muestra un ejemplo en el que se obtiene una lista de todos los eventos de prueba compartibles asociados con la función de Lambda `HelloWorldFunction` de la pila de `sam-app`.

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

Para obtener una lista de las opciones que se pueden usar con el subcomando `list`, consulta [sam remote test-event list](sam-cli-command-reference-remote-test-event-list.md). También puede ejecutar lo siguiente desde: AWS SAM CLI

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

### Almacenamiento de eventos de prueba compartibles
<a name="using-sam-cli-remote-test-event-use-put"></a>

Puede guardar los eventos de prueba que se pueden compartir en el registro de EventBridge esquemas. Utiliza el subcomando `put` junto con lo siguiente:
+ Proporciona un identificador aceptable de la función de Lambda asociada al evento de prueba compartible.
+ Proporciona un nombre para el evento de prueba compartible.
+ Proporciona la ruta del archivo y el nombre del evento local que desee cargar.

El siguiente es un ejemplo que guarda el evento `demo-event.json` local como `demo-event` y lo asocia a la función de Lambda `HelloWorldFunction` de la pila de `sam-app`:

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

Si existe un evento de prueba que se pueda compartir con el mismo nombre en el registro del EventBridge esquema, no AWS SAM CLI lo sobrescribirá. Para sobrescribir, añada la opción `--force` a su comando.

Para obtener una lista de las opciones que se pueden usar con el subcomando `put`, consulta [sam remote test-event put](sam-cli-command-reference-remote-test-event-put.md). También puede ejecutar lo siguiente desde: AWS SAM CLI

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

## Uso de eventos de prueba compartibles
<a name="using-sam-cli-remote-test-event-invoke"></a>

Utilice eventos de prueba que se puedan compartir para probar las funciones de Lambda en Nube de AWS el comando with `sam remote invoke` the. Para obtener más información, consulte [Transfiera eventos de prueba que se puedan compartir a una función de Lambda en la nube](using-sam-cli-remote-invoke.md#using-sam-cli-remote-invoke-shareable).

## Gestion de eventos de prueba compartibles
<a name="using-sam-cli-remote-test-event-manage"></a>

Este tema contiene ejemplos sobre cómo administrar y usar los eventos de prueba compartibles.

### Obtén un evento de prueba compartible, modifíquelo y úselo
<a name="using-sam-cli-remote-test-event-manage-example1"></a>

Puede obtener un evento de prueba que se pueda compartir del registro del EventBridge esquema, modificarlo localmente y usar el evento de prueba local con la función Lambda en. Nube de AWS A continuación, se muestra un ejemplo:

1. **Recuperar el evento de prueba compartible**: utiliza el subcomando `sam remote test-event get` para recuperar un evento de prueba compartible para una función de Lambda específica y guárdalo localmente:

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

1. **Modifica el evento de prueba compartible**: utiliza un editor de texto de tu elección para modificar el evento de prueba compartible.

1. **Usar el evento de prueba compartible**: usa el `sam remote invoke` comando y proporciona la ruta del archivo y el nombre del evento con: `--event-file`

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

### Obtén un evento de prueba compartible, modifíquelo, cárguelo y úselo
<a name="using-sam-cli-remote-test-event-manage-example2"></a>

Puede obtener un evento de prueba que se pueda compartir del registro del EventBridge esquema, modificarlo localmente y cargarlo. A continuación, puede pasar el evento de prueba compartible directamente a la función de Lambda en la Nube de AWS. A continuación, se muestra un ejemplo:

1. **Recuperar el evento de prueba compartible**: utiliza el subcomando `sam remote test-event get` para recuperar un evento de prueba compartible para una función de Lambda específica y guárdalo localmente:

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

1. **Modifica el evento de prueba compartible**: utiliza un editor de texto de tu elección para modificar el evento de prueba compartible.

1. **Cargue el evento de prueba que se puede compartir**: utilice el `sam remote test-event put` subcomando para cargar y guardar el evento de prueba que se puede compartir en el registro del esquema. EventBridge En este ejemplo, utilizamos la opción `--force` para sobrescribir una versión anterior de nuestra prueba compartible.

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

1. **Pase el evento de prueba compartible a la función de Lambda**: utiliza el comando `sam remote invoke` para pasar el evento de prueba compartible directamente a la función de Lambda en la Nube de AWS:

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

# Introducción a las pruebas en la nube con sam remote invoke
<a name="using-sam-cli-remote-invoke"></a>

Utilice el AWS Serverless Application Model comando Command Line Interface (AWS SAM CLI) `sam remote invoke` para interactuar con AWS los recursos compatibles en Nube de AWS. Puedes utilizar `sam remote invoke` para invocar los recursos siguientes:
+ **Amazon Kinesis Data Streams**: envía registros de datos a las aplicaciones de Kinesis Data Streams.
+ **AWS Lambda**: invoca y pasa eventos a sus funciones de Lambda.
+ **Amazon Simple Queue Service (Amazon SQS)**: envía mensajes a colas de Amazon SQS.
+ **AWS Step Functions**: invoca máquinas de estado de Step Functions para iniciar la ejecución.

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 un ejemplo de uso de `sam remote invoke` durante un flujo de trabajo de desarrollo típico, consulta [Paso 5: Interactúa con tu función en el Nube de AWS](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-remote-invoke).

**Topics**
+ [Uso del comando sam remote invoke](#using-sam-cli-remote-invoke-use)
+ [Uso de las opciones del comando sam remote invoke](#using-sam-cli-remote-invoke-options)
+ [Configura el archivo de configuración de su proyecto](#using-sam-cli-remote-invoke-configure)
+ [Ejemplos](#using-sam-cli-remote-invoke-examples)
+ [Vínculos relacionados](#using-sam-cli-remote-invoke-links)

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

Para usar `sam remote 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).

También recomendamos actualizar a la última versión del AWS SAMCLI. Para obtener más información, consulta [Actualización de AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Antes de usar `sam remote 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).
+ [Introducción al uso sam sync de la sincronización con Nube de AWS](using-sam-cli-sync.md).

## Uso del comando sam remote invoke
<a name="using-sam-cli-remote-invoke-use"></a>

Antes de usar este comando, el recurso debe implementarse en la Nube de AWS.

Usa la siguiente estructura de comandos y ejecútela desde el directorio raíz del proyecto:

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

**nota**  
Esta página mostrará las opciones que se proporcionan en el símbolo del sistema. También puede configurar las opciones en el archivo de configuración del proyecto en lugar de pasarlas por la línea de comandos. Para obtener más información, [Configurar los ajustes del proyecto](using-sam-cli-configure.md#using-sam-cli-configure-project).

Para obtener una descripción de los argumentos `sam remote invoke` y las opciones, consulta [sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Uso con Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-use-kinesis"></a>

Puede enviar registros de datos a una aplicación de Kinesis Data Streams. Le AWS SAM CLI enviará su registro de datos y le devolverá un identificador de fragmento y un número de secuencia. A continuación, se muestra un ejemplo:

```
$ 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 un registro de datos**

1. Proporciona un valor de ID de recurso como argumento para tu aplicación Kinesis Data Streams. Para obtener información sobre un recurso válido IDs, consulte el [ID del recurso.](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id)

1. Proporciona el registro de datos como un evento para enviarlo a la aplicación Kinesis Data Streams. Puedes proporcionar el evento en la línea de comandos mediante la opción `--event` o desde un archivo mediante `--event-file`. Si no proporciona un evento, AWS SAM CLI envía un evento vacío.

### Uso con funciones de Lambda
<a name="using-sam-cli-remote-invoke-use-lambda"></a>

Puedes invocar una función de Lambda en la nube y pasar un evento vacío o proporcionar un evento en la línea de comandos o desde un archivo. AWS SAM CLIInvocará la función Lambda y devolverá su respuesta. A continuación, se muestra un ejemplo:

```
$ 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 una función de Lambda**

1. Proporciona un valor de ID de recurso como argumento para su función de Lambda. Para obtener información sobre un recurso válido IDs, consulte el ID del [recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Proporciona un evento para que lo envía a su función de Lambda. Puedes proporcionar el evento en la línea de comandos mediante la opción `--event` o desde un archivo mediante `--event-file`. Si no proporciona un evento, AWS SAM CLI envía un evento vacío.

#### Funciones de Lambda configuradas con transmisión de respuestas
<a name="using-sam-cli-remote-invoke-invoke-stream"></a>

El comando `sam remote invoke` admite funciones de Lambda que están configuradas para transmitir respuestas. Puede configurar una función Lambda para transmitir las respuestas mediante la `FunctionUrlConfig` propiedad de sus AWS SAM plantillas. Cuando utiliza `sam remote invoke`, la CLI de AWS SAM detectará automáticamente su configuración de Lambda y la invocará con una transmisión de respuesta.

Para ver un ejemplo, consulta [Invocación de una función de Lambda configurada para transmitir respuestas](#using-sam-cli-remote-invoke-examples-lambda-stream).

#### Transfiera eventos de prueba que se puedan compartir a una función de Lambda en la nube
<a name="using-sam-cli-remote-invoke-shareable"></a>

Los eventos de prueba que se pueden compartir son aquellos que puede compartir con otros en la misma Cuenta de AWS. Para obtener más información, consulta los [Eventos de prueba que se puedan compartir](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) en la *Guía para desarrolladores de AWS Lambda *.

##### Acceso y administración de eventos de prueba que se puedan compartir
<a name="using-sam-cli-remote-invoke-shareable-access"></a>

Puede usar el AWS SAM CLI `sam remote test-event` comando para acceder a los eventos de prueba que se pueden compartir y administrarlos. Por ejemplo, puede utilizar `sam remote test-event` para hacer lo siguiente:
+ Recupera eventos de prueba que se pueden compartir del registro de EventBridge esquemas de Amazon.
+ Modifique los eventos de prueba que se pueden compartir de forma local y cárguelos en el registro de EventBridge esquemas.
+ Elimine los eventos de prueba que se puedan compartir del registro de EventBridge esquemas.

Para obtener más información, consulte [Introducción a las pruebas en la nube con sam remote test-event](using-sam-cli-remote-test-event.md).

##### Transfiera un evento de prueba que se pueda compartir a una función de Lambda en la nube
<a name="using-sam-cli-remote-invoke-shareable-pass"></a>

Para pasar un evento de prueba que se pueda compartir del registro de EventBridge esquemas a la función Lambda en la nube, utilice la opción y proporcione `--test-event-name` el nombre del evento de prueba que se puede compartir. A continuación, se muestra un ejemplo:

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

Si guarda el evento de prueba que se puede compartir de forma local, puede usar la opción `--event-file` y proporcionar la ruta del archivo y el nombre del evento de prueba local. A continuación, se muestra un ejemplo:

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

### Uso de con Amazon SQS
<a name="using-sam-cli-remote-invoke-use-sqs"></a>

Puede enviar mensajes a las colas de Amazon SQS. AWS SAM CLIDevuelve lo siguiente:
+ Message ID
+ MD5 del cuerpo del mensaje
+ Metadatos de respuesta

 A continuación, se muestra un ejemplo:

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

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

**Cómo enviar un mensaje**

1. Proporciona un valor de ID de recurso como argumento para la cola de Amazon SQS. Para obtener información sobre un recurso válido IDs, consulte el [identificador del recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Indique un evento para que lo envía a la cola de Amazon SQS. Puedes proporcionar el evento en la línea de comandos mediante la opción `--event` o desde un archivo mediante `--event-file`. Si no proporciona un evento, AWS SAM CLI envía un evento vacío.

### Uso con Step Functions
<a name="using-sam-cli-remote-invoke-use-sf"></a>

Puedes invocar máquinas de estado de Step Functions para iniciar la ejecución. AWS SAM CLIEsperará a que se complete el flujo de trabajo de la máquina de estados y devolverá un resultado del último paso de la ejecución. A continuación, se muestra un ejemplo:

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

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

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

1. Proporciona un valor de ID de recurso como argumento para la máquina de estado de Step Functions. Para obtener información sobre un recurso válido IDs, consulte el [ID del recurso](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Proporciona un evento para enviarlo a su máquina de estado. Puedes proporcionar el evento en la línea de comandos mediante la opción `--event` o desde un archivo mediante `--event-file`. Si no proporciona un evento, AWS SAM CLI envía un evento vacío.

## Uso de las opciones del comando sam remote invoke
<a name="using-sam-cli-remote-invoke-options"></a>

En esta sección se describen algunas de las opciones principales que puede utilizar con el comando `sam remote invoke`. Para obtener una lista completa de opciones, consulta [sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Paso de un evento al recurso
<a name="using-sam-cli-remote-invoke-options-event"></a>

Utiliza las siguientes opciones para transferir los eventos a sus recursos en la nube:
+ `--event`: permite pasar un evento desde la línea de comandos.
+ `--event-file`: permite pasar un evento desde un archivo.

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

**Se utiliza `--event` para pasar un evento a la línea de comandos como un valor de cadena:**

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

**Se utiliza `--event-file` para pasar un evento de un archivo y proporcionar la ruta al archivo:**

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

**Pase un evento mediante `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\"}"}%
```

### Configura la salida de respuesta de la CLI de AWS SAM
<a name="using-sam-cli-remote-invoke-options-output"></a>

Al invocar un recurso compatible con `sam remote invoke`, la CLI de AWS SAM devuelve una respuesta que contiene lo siguiente:
+ **Metadatos de la solicitud**: metadatos asociados a la solicitud. Esto incluye el identificador de la solicitud y la hora de inicio de la solicitud.
+ **Respuesta del recurso**: la respuesta de su recurso tras ser invocado en la nube.

Puede usar la `--output` opción para configurar la respuesta AWS SAM CLI de salida. Los valores siguientes están disponibles:
+ `json`: los metadatos y la respuesta del recurso se devuelven en una estructura JSON. La respuesta contiene el resultado completo del SDK.
+ `text`: los metadatos se devuelven en una estructura de texto. La respuesta del recurso se devuelve en el formato de salida del recurso.

A continuación, se muestra un ejemplo de una salida de `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\\\"}\"}"
}%
```

Al especificar un resultado `json`, se devuelve la respuesta completa a `stdout`. A continuación, se muestra un ejemplo:

```
$ 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 continuación, se muestra un ejemplo de una salida de `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\"}"}%
```

Al especificar un resultado `text`, se devuelve el resultado del tiempo de ejecución de la función de Lambda (por ejemplo, los registros) a `stderr`. Se devuelve la carga útil de la función de Lambda a `stdout`. A continuación, se muestra un ejemplo:

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

### Personalización de los parámetros Boto3
<a name="using-sam-cli-remote-invoke-options-boto3"></a>

Pues`sam remote invoke`, AWS SAM CLI utiliza el AWS SDK para Python (Boto3) para interactuar con sus recursos en la nube. Puedes utilizar la opción `--parameter` para personalizar los parámetros Boto3. Para ver una lista de los parámetros admitidos que puede personalizar, consulta `--parameter`.

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

**Invoque una función de Lambda para validar los valores de los parámetros y verificar los permisos:**

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

**Utiliza la opción `--parameter` varias veces en un solo comando para proporcionar varios parámetros:**

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

### Otras opciones
<a name="using-sam-cli-remote-invoke-options-other"></a>

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

## Configura el archivo de configuración de su proyecto
<a name="using-sam-cli-remote-invoke-configure"></a>

Para configurar `sam remote invoke` en su archivo de configuración, utiliza `remote_invoke` en su tabla. El siguiente es un ejemplo de un archivo `samconfig.toml` que configura los valores predeterminados del comando `sam remote invoke`.

```
...
version =0.1

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

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

*Para ver un ejemplo básico de uso`sam remote invoke`, consulta Cómo [probar AWS Lambda funciones de forma AWS SAM remota](https://aws.amazon.com/blogs/compute/testing-aws-lambda-functions-with-aws-sam-remote-invoke/) en el AWS blog de informática.*

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

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

**Envíe un registro de datos a una aplicación de Kinesis Data Streams desde un achivo. La aplicación Kinesis Data Streams se identifica proporcionando un ARN para el ID del recurso:**

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

**Envíe un evento proporcionado en la línea de comandos a una aplicación de 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"
}%
```

**Obtén el ID físico de la aplicación Kinesis Data Streams. A continuación, proporciona un evento en la línea de comandos:**

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

**Proporciona una cadena JSON en la línea de comandos como un 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"
}%
```

**Envíe un evento vacío a la aplicación Kinesis Data Streams:**

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

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

**Devuelve la AWS SAM CLI respuesta en 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
  }
}%
```

**Devuelva la salida JSON a 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
  }
}%
```

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

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

**Invoque una función de Lambda al proporcionar el ARN como ID de recurso:**

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

**Invoque una función de Lambda al proporcionar el ID lógico como ID de recurso:**

También debes proporcionar el nombre de la CloudFormation pila mediante la `--stack-name` opción. A continuación, se muestra un ejemplo:

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

Si la aplicación contiene una sola función de Lambda, no es necesario que especifica su ID lógico. Solo puedes proporcionar la opción `--stack-name`. A continuación, se muestra un ejemplo:

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

**Para invocar una función de Lambda, proporciona el identificador físico como identificador de recurso:**

El ID físico se crea cuando se implementa utilizando CloudFormation.

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

**Invoque una función de Lambda de una pila secundaria:**

Para este ejemplo, nuestra aplicación contiene la siguiente estructura de directorios:

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

Para invocar la función de Lambda de nuestra `childstack`, ejecutamos lo siguiente:

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

#### Invocación de una función de Lambda configurada para transmitir respuestas
<a name="using-sam-cli-remote-invoke-examples-lambda-stream"></a>

En este ejemplo, utilizamos la CLI de AWS SAM para inicializar una nueva aplicación sin servidor que contiene una función de Lambda configurada para transmitir su respuesta. Implementamos nuestra aplicación en la nube Nube de AWS y la utilizamos `sam remote invoke` para interactuar con nuestra función en la nube.

Para empezar, es necesario ejecutar el comando `sam init` para crear una nueva aplicación sin servidor. Seleccionamos la plantilla de inicio rápido de **Lambda Response Streaming** y asignamos un nombre a nuestra aplicación. **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 SAMCLICrea nuestro proyecto con la siguiente estructura:

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

El siguiente es un ejemplo de nuestro código de la función de 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();
	  }
	);
```

A continuación, se presenta un ejemplo del archivo `template.yaml`. La transmisión de respuestas para nuestra función de Lambda se configura mediante la propiedad `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
```

Por lo general, puede usar `sam build` y `sam deploy --guided` para crear e implementar una aplicación de producción. En este ejemplo, accederemos a un entorno de desarrollo y utilizaremos el comando `sam sync` para crear e implementar nuestra aplicación.

**nota**  
Se recomienda usar el comando `sam sync` para entornos de desarrollo. Para obtener más información, consulta [Introducción al uso sam sync de la sincronización con Nube de AWS](using-sam-cli-sync.md).

Antes de ejecutar `sam sync`, debe verificar que el proyecto esté configurado correctamente en el archivo `samconfig.toml`. Asimismo, recuerde verificar los valores de `stack_name` y `watch`. Con estos valores especificados en el archivo de configuración, no es necesario proporcionarlos en la línea de comandos.

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

A continuación, ejecuta `sam sync` para crear e implementar nuestra aplicación. Como la opción `--watch` está configurada en nuestro archivo de configuración, la CLI de AWS SAM compilará la aplicación, la implementará y estará pendiente de los cambios.

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

Ahora que la función está implementada en la nube, puede utilizar `sam remote invoke` para interactuar con ella. La CLI de AWS SAM detecta automáticamente que la función está configurada para la transmisión de respuestas e inmediatamente comienza a generar una respuesta transmitida de la función en tiempo 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
```

Cuando modificamos el código de la función, la CLI de AWS SAM detecta los cambios realizados al instante y los implementa de inmediato. Este es un ejemplo del resultado de la CLI de AWS SAM después de realizar cambios en el código de nuestra función:

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

Ahora puede volver a utilizar `sam remote invoke` para interactuar con la función en la nube y probar los cambios.

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

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

**Invocar una cola de Amazon SQS al proporcionar el ARN como ID de 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
  }
}%
```

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

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

**Para invocar una máquina de estados, proporciona su ID físico como ID de recurso:**

En primer lugar, usa `sam list resources` para obtener el ID físico:

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

A continuación, invoca la máquina de estados mediante el ID físico como ID de recurso. Transmita un evento en la línea de comandos con la opción `--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 una máquina de estados pasando un evento vacío:**

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

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

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

Para obtener documentación relacionada `sam remote invoke` con el uso del AWS SAMCLI, consulte lo siguiente:
+ [sam remote invoke](sam-cli-command-reference-remote-invoke.md)
+ [Solución de problemas para AWS SAM CLI](sam-cli-troubleshooting.md)

# Automatice las pruebas de integración local con AWS SAM
<a name="serverless-sam-cli-using-automated-tests"></a>

Si bien puede usarlo [Introducción a las pruebas con sam local invoke](using-sam-cli-local-invoke.md) para probar el código manualmente, AWS SAM también le permite probar su código mediante pruebas de integración automatizadas. Las pruebas de integración le ayudan a detectar problemas en las primeras etapas del ciclo de desarrollo, a mejorar la calidad del código, a ahorrar tiempo y, al mismo tiempo, a reducir los costos.

Para crear pruebas de integración automatizadas AWS SAM, primero debe ejecutar pruebas con funciones Lambda locales antes de implementarlas en la AWS nube. El comando [Introducción a las pruebas con sam local start-lambda](using-sam-cli-local-start-lambda.md) inicia un punto de conexión local que emula el punto de conexión de invocación de Lambda. Puedes invocarlo desde sus pruebas automatizadas. Debido a que este punto de conexión emula el punto de conexión de invocación de Lambda, puede escribir pruebas una vez y ejecutarlas (sin ninguna modificación) en la función de Lambda local o en una función de Lambda implementada. También puede ejecutar las mismas pruebas en una AWS SAM pila implementada en su CI/CD proceso. 

Así es como funciona el proceso:

1. Inicie el punto de conexión Lambda local.

   Inicie el punto final Lambda local ejecutando el siguiente comando en el directorio que contiene la plantilla AWS SAM :

   ```
   sam local start-lambda
   ```

   Este comando inicia un punto de conexión local en `http://127.0.0.1:3001` que emula AWS Lambda. Puede ejecutar las pruebas automatizadas en este punto de conexión Lambda local. Al invocar este punto final mediante el SDK AWS CLI o el SDK, ejecuta localmente la función Lambda que se especifica en la solicitud y devuelve una respuesta.

1. Ejecute una prueba de integración en el punto de conexión Lambda local.

   En la prueba de integración, puede usar el AWS SDK para invocar la función Lambda con los datos de la prueba, esperar la respuesta y comprobar que la respuesta es la esperada. Para ejecutar la prueba de integración localmente, debe configurar el SDK de AWS para que envía la llamada a la API invocación de Lambda al punto de conexión local de Lambda iniciado en el paso anterior.

   El siguiente es un ejemplo de Python ( AWS SDKs los otros lenguajes tienen configuraciones similares):

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

   Puede usar este código para probar las funciones de Lambda implementadas configurando `running_locally` en `False`. Esto configura el AWS SDK al que se debe conectar AWS Lambda en la AWS nube.

# Genere cargas útiles de eventos de muestra con AWS SAM
<a name="serverless-sam-cli-using-generate-event"></a>

Para probar las funciones de Lambda, puede generar y personalizar ejemplos de cargas útiles de eventos que imiten los datos que recibirán las funciones de Lambda cuando sean activadas por otros servicios. AWS Esto incluye servicios de como API Gateway, CloudFormation o Amazon S3, entre otros.

La generación de cargas útiles de eventos de muestra le ayuda a probar el comportamiento de la función de Lambda con una variedad de entradas diferentes sin necesidad de trabajar en un entorno en vivo. Este enfoque también ahorra tiempo en comparación con la creación manual de muestras de eventos de AWS servicio para probar las funciones. 

Para ver la lista completa de servicios para los que puede generar cargas útiles de eventos de muestra, utiliza este comando:

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

Para ver la lista de opciones que puede usar para un servicio concreto, utiliza este comando:

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

Ejemplos:

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

# Prueba y depuración de funciones duraderas
<a name="test-and-debug-durable-functions"></a>

Probar y depurar funciones duraderas a nivel local funciona de forma similar a las funciones Lambda normales, con soporte automático para puntos de control y reproducción. Esta guía cubre los escenarios de prueba y las técnicas de solución de problemas más comunes.

## Flujo de trabajo de pruebas locales
<a name="test-and-debug-durable-functions-workflow"></a>

Cuando se prueban funciones duraderas a nivel local, el flujo de trabajo es diferente al de las funciones Lambda normales:

**Flujo de trabajo de pruebas de funciones duradero**

1. Cree su aplicación:

   ```
   $ sam build
   ```

1. Invoque su función duradera:

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

1. Compruebe el historial de ejecución si es necesario:

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

## Escenarios de prueba comunes
<a name="test-and-debug-durable-functions-scenarios"></a>

### Probar el comportamiento de los puntos de control
<a name="test-and-debug-durable-functions-scenarios-checkpoints"></a>

Para comprobar que su funcionamiento es correcto, los puntos de control indican:

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

Al invocar esta función de forma local, el período de espera se gestiona automáticamente.

### Probando escenarios de devolución de llamadas
<a name="test-and-debug-durable-functions-scenarios-callbacks"></a>

Para las funciones que esperan llamadas externas:

1. Inicie su función duradera que espera una devolución de llamada

1. En otro terminal, resuelve la devolución de llamada:

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

1. Observe cómo se reanuda la ejecución de la función

## Resolución de problemas
<a name="test-and-debug-durable-functions-troubleshooting"></a>

### La función duradera no se ejecuta correctamente
<a name="test-and-debug-durable-functions-troubleshooting-config"></a>

**Problema:** la función no se comporta como una función duradera.

**Soluciones:**
+ Comprueba que `DurableConfig` esté configurado en tu plantilla SAM
+ Asegúrese de que el código de su función utilice métodos de SDK de funciones duraderas (por ejemplo,`context.wait()`)
+ Comprueba que estás utilizando un entorno de ejecución compatible (TypeScript, JavaScript, Python)

### No se puede recuperar el historial de ejecución
<a name="test-and-debug-durable-functions-troubleshooting-history"></a>

**Problema:** el `local execution history` comando no devuelve ningún resultado.

**Soluciones:**
+ Compruebe que el identificador de ejecución es correcto
+ Compruebe que la función se haya invocado al menos una vez

### Los comandos callback no funcionan
<a name="test-and-debug-durable-functions-troubleshooting-callbacks"></a>

**Problema:** los comandos de devolución de llamada no resuelven las operaciones pendientes.

**Soluciones:**
+ Compruebe que el identificador de devolución de llamada sea correcto
+ Asegúrese de que la función esté realmente esperando una devolución de llamada
+ Compruebe que está utilizando la sintaxis correcta del comando de devolución de llamada

## Consejos de depuración
<a name="test-and-debug-durable-functions-debugging"></a>
+ **Utilice el historial de ejecución**: revise el historial de ejecución para comprender el flujo de su función duradera
+ **Realice pruebas incrementales**: comience con operaciones de espera sencillas antes de añadir una lógica compleja
+ **Utilice el registro detallado: habilite el registro** detallado para rastrear el flujo de ejecución

## Más información
<a name="test-and-debug-durable-functions-learn"></a>

Para obtener más información sobre las pruebas y la depuración, consulte:
+ [Introducción a las pruebas con sam local invoke](using-sam-cli-local-invoke.md)- Documentación de invocación local
+ [sam local execution history](sam-cli-command-reference-sam-local-execution-history.md)- Historial de ejecuciones