Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Introducción a las pruebas con sam local invoke
Utiliza el subcomando sam local invoke
de la interfaz de la línea de comandos de AWS Serverless Application Model (CLI de AWS SAM) para iniciar una invocación única de una función de AWS Lambda de forma local.
-
Para obtener una introducción a la CLI de AWS SAM, consulta ¿Qué es la AWS SAM CLI?.
-
Para ver una lista de opciones de comandos
sam local invoke
, consulta sam local invoke. -
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.
Para usar sam local invoke
, completa lo siguiente para instalar la CLI de AWS SAM:
Antes de usar sam local invoke
, se recomienda tener conocimientos básicos de lo siguiente:
Invocar una función de Lambda localmente
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
-
Desde el directorio raíz del proyecto, ejecuta lo siguiente:
$
sam local invoke
<options>
-
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
-
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
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
Transferencia de eventos personalizados para invocar la función de Lambda
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.
Pase variables de entorno al invocar la función de Lambda
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 tu 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
Para especificar una plantilla a la que CLI de AWS SAM haga referencia, utiliza la opción --template
. La CLI de AWS SAM cargará solo esa plantilla de AWS SAM 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
Utiliza la opción --hook-name
para probar localmente las funciones de Lambda de sus proyectos Terraform. Para obtener más información, consulta Usando el AWS SAM CLI por Terraform para la depuración y las pruebas locales.
A continuación, se muestra un ejemplo:
$
sam local invoke --hook-name terraform --beta-features
Prácticas recomendadas
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 para acelerar los flujos de trabajo de pruebas en la nube.
Ejemplos
Genere un evento de muestra de Amazon API Gateway y utilícelo para invocar una función de Lambda localmente
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
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\"}"}%events/apigateway_event.json
Pasar variables de entorno al invocar una función de Lambda localmente
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 plantilla AWS SAM:
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
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":"{}"}getAllItemsFunction
--env-varslocals.json
Más información
Para obtener una lista de todas las opciones sam local invoke
, consulta sam local invoke.
Para ver una demostración del uso de sam local
, consulta Desarrollo local con AWS SAM. Probando recursos de entornos de desarrollo locales en Nube de AWS