使用测试简介 sam local generate-event - AWS Serverless Application Model

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用测试简介 sam local generate-event

使用 AWS Serverless Application Model 命令行界面 (AWS SAM CLI) sam local generate-event 子命令用于生成支持 AWS 服务的事件有效载荷样本。然后,您可以修改这些事件并将其传递给本地资源进行测试。

事件是在 AWS 服务 执行操作或任务时生成的JSON对象。这些事件包含特定信息,例如,已处理的数据或事件的时间戳。大多数 AWS 服务 都会生成事件,并且每项服务的事件都采用该服务独有的格式。

由某项服务生成的事件会作为事件源传递给其他服务。例如,置于 Amazon Simple Storage Service (Amazon S3) 存储桶中的项目可以生成事件。然后,可以将此事件用作 AWS Lambda 函数的事件源,以进一步处理数据。

使用生成的事件的格式与sam local generate-event AWS 服务创建的实际事件的结构相同。您可以修改这些事件的内容,并使用它们来测试应用程序中的资源。

要使用sam local generate-event,请安装 AWS SAM CLI 通过完成以下操作:

我们建议您在使用 sam local generate-event 之前初步了解以下主题:

生成示例事件

使用 AWS SAM CLI sam local generate-event用于生成受支持 AWS 服务的事件的子命令。

查看支持的列表 AWS 服务
  1. 运行以下命令:

    $ sam local generate-event
  2. AWS 服务 将显示支持的列表。以下是示例:

    $ sam local generate-event ... Commands: alb alexa-skills-kit alexa-smart-home apigateway appsync batch cloudformation ...
生成本地事件
  1. 运行 sam local generate-event 并提供受支持服务的名称。这将显示可生成的事件类型的列表。以下是示例:

    $ 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
  2. 要生成示例事件,请运行 sam local generate-event,并提供服务和事件类型。

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

    以下是示例:

    $ 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": "amzn-s3-demo-bucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::amzn-s3-demo-bucket" }, "object": { "key": "test/key", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }

这些示例事件包含占位符值。您可以修改这些值以引用应用程序中的实际资源,也可以修改这些值以帮助进行本地测试。

修改示例事件
  1. 您可以在命令提示符处修改示例事件。要查看选项,请运行以下命令:

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

    以下是示例:

    $ 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.
  2. 在命令提示符处使用这些选项中的任何一个来修改示例事件有效负载。以下是示例:

    $ sam local generate-event s3 put--bucket amzn-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": "amzn-s3-demo-bucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::amzn-s3-demo-bucket" }, "object": { "key": "test/key", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }

使用生成的事件进行本地测试

将生成的事件保存在本地,然后使用其他 sam local 子命令进行测试。

将生成的事件保存在本地
  • 运行以下命令:

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

    以下示例说明了如何将事件另存为项目的 events 文件夹中的 s3.json 文件。

    sam-app$ sam local generate-event s3 put --bucket amzn-s3-demo-bucket > events/s3.json
使用生成的事件进行本地测试
  • 使用 --event 选项将事件与其他 sam local 子命令一起传递。

    以下示例说明了如何使用 s3.json 事件在本地调用 Lambda 函数:

    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

了解更多

有关全部 sam local generate-event 选项的列表,请参阅 sam local generate-event

有关使用 sam local 的演示,请参阅用于本地开发的AWS SAM 。在 Serverless Land Sessions 中@@ 测试来自本地开发环境的 AWS Cloud 资源,并附有以下SAM系列 YouTube.