

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

# 使用 sam local generate-event 进行测试简介
<a name="using-sam-cli-local-generate-event"></a>

使用 AWS Serverless Application Model Command Line Interface (AWS SAMCLI) `sam local generate-event` 子命令生成支持 AWS 服务的事件有效载荷示例。然后，您可以修改这些事件并将其传递给本地资源进行测试。
+ 有关简介 AWS SAMCLI，请参阅 [那是什么 AWS SAMCLI？](what-is-sam-overview.md#what-is-sam-cli)
+ 有关 `sam local generate-event` 命令选项的列表，请参阅 [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md)。

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

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

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

## 先决条件
<a name="using-sam-cli-local-generate-event-prerequisites"></a>

要使用 `sam local generate-event`，请完成以下操作安装 AWS SAM CLI。
+ [AWS SAM 先决条件](prerequisites.md).
+ [安装 AWS SAM CLI](install-sam-cli.md).

我们建议您在使用 `sam local generate-event` 之前初步了解以下主题：
+ [配置 AWS SAM CLI](using-sam-cli-configure.md).
+ [在中创建您的应用程序 AWS SAM](using-sam-cli-init.md).
+ [搭建简介 AWS SAM](using-sam-cli-build.md).
+ [使用部署简介 AWS SAM](using-sam-cli-deploy.md).

## 生成示例事件
<a name="using-sam-cli-local-generate-event-generate"></a>

使用 AWS SAMCLI`sam local generate-event`子命令生成支持 AWS 服务的事件。

**查看支持的列表 AWS 服务**

1. 运行以下命令：

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

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

1. 要生成示例事件，请运行 `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": "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"
           }
         }
       }
     ]
   }
   ```

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

**修改示例事件**

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

1. 在命令提示符处使用这些选项中的任何一个来修改示例事件有效负载。以下是示例：

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

## 使用生成的事件进行本地测试
<a name="using-sam-cli-local-generate-event-use"></a>

将生成的事件保存在本地，然后使用其他 `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
  ```

## 了解详情
<a name="using-sam-cli-local-generate-event-learn"></a>

有关全部 `sam local generate-event` 选项的列表，请参阅 [sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md)。

有关使用 `sam local` 的演示，请参阅[用于本地开发的AWS SAM 。在 SA *M 系列开启的 Serverless Land Sessions 中测试来自本地开发环境的 AWS 云 *资源](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24)。YouTube