教學課程:使用 Step Functions 測試工作流程 AWS SAM CLI本地 - AWS Step Functions

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

教學課程:使用 Step Functions 測試工作流程 AWS SAM CLI本地

與兩者 AWS Step Functions 以及 AWS Lambda 在本機電腦上執行,您可以測試狀態機器和 Lambda 函數,而無需將程式碼部署到 AWS.

如需詳細資訊,請參閱下列主題:

步驟 1:設定 AWS SAM

AWS Serverless Application Model (AWS SAM)CLI本地要求 AWS Command Line Interface, AWS SAM,以及要安裝的泊塢窗。

  1. 安裝 AWS SAM CLI.

    注意

    在安裝之前 AWS SAM CLI,您需要安裝 AWS CLI 和碼頭。請參閱安裝的先決條件 AWS SAM CLI.

  2. 通過 AWS SAM 快速啟動文檔。請務必遵循步驟來執行以下作業:

    這將創建一個sam-app目錄,並構建一個包含基於 Python 的 Hello World Lambda 函數的環境。

步驟 2:測試 AWS SAM CLI本地

現在,你已經安裝 AWS SAM 並創建了 Hello 世界 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本地。在 sam-app 目錄中,輸入下列命令:

sam local start-lambda

這開始 AWS SAM CLILocal 並提供要使用的端點,類似於以下輸出:

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 本地

JAR文件

如果您使用的是本機 Step Functions 的.jar檔案版本,請啟動 Step Functions 並指定 Lambda 端點。在解壓縮.jar檔案的目錄中,輸入下列命令:

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

當 Step Functions 本機啟動時,它會檢查環境,然後檢查您~/.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 本機,請使用下列命令啟動 Step Functions:

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

如需有關安裝 Docker 版本的 Step Functions 的資訊,請參閱在 Docker 中設置 Step Functions 本地(可下載版本)

注意

您可以透過指令行指定端點,或在從.jar檔案啟動 Step Functions 時設定環境變數來指定端點。針對 Docker 版本,您必須在文字檔案中指定端點和登入資料。請參閱 設定 Step Functions 的組態選項本機

步驟 5:創建一個引用您的狀態機 AWS SAM CLI本地功能

Step Functions 本地運行後,創建一個引用您在中初始化HelloWorldFunction的狀態機器步驟 1:設定 AWS SAM

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"

這將創建一個狀態機並提供一個 Amazon 資源名稱(ARN),您可以用它來啟動執行。

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

步驟 6:開始您本機狀態機器的執行

一旦你創建了一個狀態機,開始執行。使用以下aws stepfunctions命令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": "{}" }