測試簡介 sam local generate-event - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

測試簡介 sam local generate-event

使用命 AWS Serverless Application Model 令列介面 (AWS SAMCLI) sam local generate-event 子命令產生受支援 AWS 服務的事件承載範例。然後,您可以修改這些事件並將其傳遞給本機資源以進行測試。

件是 JSON 物件,會在 AWS 服務 執行動作或工作時產生。這些事件包含特定資訊,例如已處理的資料或事件的時間戳記。大多數 AWS 服務 生成事件,每個服務的事件都是針對其服務的唯一格式化。

由一個服務產生的事件會作為事件來源傳遞至其他服務。例如,放置在 Amazon Simple Storage Service (Amazon S3) 貯體中的項目可以產生事件。然後,此事件可用作 AWS Lambda 函數的事件來源,以進一步處理資料。

您使用產生的事件sam local generate-event會以與 AWS 服務建立的實際事件相同的結構格式化。您可以修改這些事件的內容,並使用它們來測試應用程式中的資源。

若要使用sam local generate-event,請完成下列 AWS SAMCLI步驟來安裝:

使用前sam local generate-event,我們建議對以下內容進行基本了解:

產生範例事件

使用 AWS SAMCLIsam 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": "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>

    以下是一個事件被保存為我們項目s3.json文件events夾中的文件的示例。

    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,請參AWS SAM 閱本地開發。在 SAM 系列的無伺服器陸地工作階段中,測試來自本機開發環境的 AWS 雲端 YouTube資源