AWS Step Functions
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Step Functions 和 AWS SAM CLI Local

通过在本地计算机上将 Step Functions 与 Lambda 一起运行,可以测试您的状态机和 Lambda 函数,而无需将您的代码部署到 AWS。

有关更多信息,请参阅:

步骤 1:设置 AWS 无服务器应用程序模型

AWS SAM CLI Local 要求安装 AWS Command Line Interface、AWS 无服务器应用程序模型 和 Docker。

  1. 安装 AWS SAM CLI。

    有关更多信息,请参阅安装 AWS SAM CLI

    注意

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

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

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

步骤 2:测试 AWS SAM CLI Local

现在,您已安装了 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 Local

现在,您已测试该函数可正常工作,接下来启动 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 123456789012, region us-east-1

Docker

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

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

有关安装 Docker 版本的 Step Functions 的信息,请参阅Step Functions(可下载版本)和 Docker

注意

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

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

在 Step Functions Local 运行后,创建一个状态机,该状态机引用您在 步骤 1:设置 AWS 无服务器应用程序模型 中初始化的 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:us-east-1:123456789012:function:HelloWorldFunction\",\ \"End\": true\ }\ }\ }\ }}" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"

这将创建一个状态机,并提供一个您可以用来启动执行的 ARN:

{ "creationDate": 1548805711.403, "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld" }

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

在您创建状态机后,即可启动引用终端节点和状态机 ARN 的执行。

aws stepfunctions --endpoint http://localhost:8083 start-execution --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld --name test

这将启动 HelloWorld 状态机的执行,并将其命名为 test

{ "startDate": 1548810641.52, "executionArn": "arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test" }

现在 Step Functions 正在本地运行,您可以使用 AWS CLI与其进行交互。例如,要获取有关此执行的信息:

aws stepfunctions --endpoint http://localhost:8083 describe-execution --execution-arn arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test

请为执行调用 describe-execution,这可以提供更完整的详细信息。例如:

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