教程:使用 Step Functions 和 AWS SAM CLI Local 测试工作流程 - AWS Step Functions

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

教程:使用 Step Functions 和 AWS SAM CLI Local 测试工作流程

不支持 Step Functions Local

Step Functions Local 功能并不完备且不受支持

出于测试目的,您可以考虑使用能够模拟 Step Functions 的第三方解决方案。

作为 Step Functions Local 的替代方案,您可以在部署到您的AWS账户之前使用 TestState API 对状态机逻辑进行单元测试。有关更多信息,请参阅使用 TestState API 测试状态机

两者AWS Step Functions兼而有之,在本地计算机上AWS Lambda运行,您无需将代码部署到即可测试状态机和 Lambda 函数。AWS

有关更多信息,请参阅以下主题:

第 1 步:设置 AWS SAM

AWS Serverless Application Model(AWS SAM) CLI Local 需要安装AWS Command Line InterfaceAWS SAM、和 Docker。

  1. 安装 C AWS SAM LI

    注意

    在安装 AWS SAM CLI 之前,你需要安装AWS CLI和 Docker。参见安装 AWS SAM CLI 的先决条件

  2. 通读 AWS SAM 快速入门文档。请务必按照以下步骤执行以下操作:

    这将创建 sam-app 目录,并将生成环境,其中包括基于 Python 语言的 Hello World Lambda 函数。

步骤 2:在本地测试 AWS SAM CLI

现在,您已经安装AWS SAM并创建了 Hello World Lambda 函数,可以测试该函数了。在 sam-app 目录中,输入下面的命令:

sam local start-api

这将启动 Lambda 函数的本地实例。您应该可以看到类似于如下所示的输出内容:

2019-01-31 16:40:27 Found credentials in shared credentials file: ~/.aws/credentials 2019-01-31 16:40:27 Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET] 2019-01-31 16:40:27 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template 2019-01-31 16:40:27 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

打开浏览器并输入以下内容:

http://127.0.0.1:3000/hello

这将输出类似于以下内容的响应:

{"message": "hello world", "location": "72.21.198.66"}

CTRL+C 以终止 Lambda API。

步骤 3:启动本地 AWS SAM CLI

现在您已经测试了该功能是否有效,请启动 AWS SAM CLI Local。在 sam-app 目录中,输入下面的命令:

sam local start-lambda

这将启动 AWS SAM CLI Local 并提供要使用的端点,类似于以下输出:

2019-01-29 15:33:32 Found credentials in shared credentials file: ~/.aws/credentials 2019-01-29 15:33:32 Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint. 2019-01-29 15:33:32 * Running on http://127.0.0.1:3001/ (Press CTRL+C to quit)

第 4 步:启动 Step Functions Local

JAR 文件

如果使用 .jar 文件版本的 Step Functions Local,请启动 Step Functions 并指定 Lambda 端点。在提取 .jar 文件的目录中,输入以下命令:

java -jar StepFunctionsLocal.jar --lambda-endpoint http://localhost:3001

当 Step Functions Local 启动时,它将检查环境,然后检查 ~/.aws/credentials 文件中配置的凭证。默认情况下,它开始使用虚假用户 ID,并列出为 region us-east-1

2019-01-29 15:38:06.324: Failed to load credentials from environment because Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY)) 2019-01-29 15:38:06.326: Loaded credentials from profile: default 2019-01-29 15:38:06.326: Starting server on port 8083 with account account-id, region us-east-1

Docker

如果您使用 Docker 版本的 Step Functions Local,请使用以下命令启动 Step Functions:

docker run -p 8083:8083 amazon/aws-stepfunctions-local

有关安装 Docker 版本的 Step Functions 的信息,请参阅在 Docker 中设置 Step Functions Local(可下载版本)

注意

您可以通过命令行指定端点;如果您从 .jar 文件启动 Step Functions,则可以通过设置环境变量来指定。对于 Docker 版本,您必须在文本文件中指定端点和凭证。请参阅为 Step Functions Local 设置配置选项

步骤 5:创建引用 AWS SAM CLI 本地函数的状态机

在 Step Functions Local 运行后,创建一个状态机,该状态机引用您在第 1 步:设置 AWS SAM 中初始化的 HelloWorldFunction

aws stepfunctions --endpoint http://localhost:8083 create-state-machine --definition "{\ \"Comment\": \"A Hello World example of the Amazon States Language using an AWS Lambda Local function\",\ \"StartAt\": \"HelloWorld\",\ \"States\": {\ \"HelloWorld\": {\ \"Type\": \"Task\",\ \"Resource\": \"arn:aws:lambda:region:account-id:function:HelloWorldFunction\",\ \"End\": true\ }\ }\ }\" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"

这将创建一个状态机,并提供一个您可以用来启动执行的 Amazon 资源名称 (ARN)。

{ "creationDate": 1548805711.403, "stateMachineArn": "arn:aws:states:region:account-id:stateMachine:HelloWorld" }

第 6 步:启动本地状态机执行

创建状态机后,启动执行。使用以下 aws stepfunctions 命令时,您需要引用端点和状态机 ARN:

aws stepfunctions --endpoint http://localhost:8083 start-execution --state-machine arn:aws:states:region:account-id:stateMachine:HelloWorld --name test

这将启动 HelloWorld 状态机的名为 test 的执行。

{ "startDate": 1548810641.52, "executionArn": "arn:aws:states:region:account-id:execution:HelloWorld:test" }

现在 Step Functions 已在本地运行,你可以使用与之交互AWS CLI。例如,要获取有关此执行的信息,请使用以下命令:

aws stepfunctions --endpoint http://localhost:8083 describe-execution --execution-arn arn:aws:states:region:account-id:execution:HelloWorld:test

请为执行调用 describe-execution,这可以提供更完整的详细信息,内容与下面的输出类似:

{ "status": "SUCCEEDED", "startDate": 1549056334.073, "name": "test", "executionArn": "arn:aws:states:region:account-id:execution:HelloWorld:test", "stateMachineArn": "arn:aws:states:region:account-id:stateMachine:HelloWorld", "stopDate": 1549056351.276, "output": "{\"statusCode\": 200, \"body\": \"{\\\"message\\\": \\\"hello world\\\", \\\"location\\\": \\\"72.21.198.64\\\"}\"}", "input": "{}" }