使用 sam local generate-event - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 sam local generate-event

使用 Amazon Serverless Application Model 命令行界面 (Amazon SAM CLI) sam local generate-event 子命令可为受支持的 Amazon Web Services 生成事件负载示例。然后,您可以修改这些事件并将其传递给本地资源进行测试。

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

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

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

要使用 sam local generate-event,请完成以下操作安装 Amazon SAM CLI。

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

生成示例事件

使用 Amazon SAM CLI sam local generate-event 子命令为受支持的 Amazon Web Services 生成事件。

查看受支持 Amazon Web Services 的列表
  1. 运行以下命令:

    $ sam local generate-event
  2. 将显示受支持 Amazon Web Services 的列表。以下是 示例:

    $ 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": "example-bucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::example-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 MyBucket { "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": "MyBucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::MyBucket" }, "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 MyBucket > 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 的演示,请参阅用于本地开发的 Amazon SAM。YouTube 上 Serverless Land“使用 SAM 的会话”系列中的测试本地开发环境中的 Amazon Web Services 云 资源