測試步驟函數和 AWS SAM CLI 本地 - AWS Step Functions

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

測試步驟函數和 AWS SAM CLI 本地

同時AWS Step Functions並在本機電腦上AWS Lambda執行時,您可以測試狀態機器和 Lambda 函數,而無需將程式碼部署到AWS。

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

步驟一:設定 AWS SAM

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

  1. 安裝 AWS SAM CLI

    注意

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

  2. 請參閱 AWS SAM Quick Start 文件。請務必遵循步驟來執行以下作業:

    這將創建一個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 本機,並提供要使用的端點,類似下列輸出:

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 步:啟動步驟函數本地

JAR 檔案

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

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

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

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

如需有關安裝 Docker 版本的步驟函式的資訊,請參閱設置 Step Functions 本地(可下載版本)和 Docker

注意

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

步驟 5:建立參考您 AWS SAM CLI Local 函數的狀態機器

一旦步驟函數本地運行,創建一個引用您初始化的狀態機步驟一:設定 AWS SAMHelloWorldFunction

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:開始您本機狀態機器的執行

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

現在,步驟函數在本機執行,您可以使用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": "{}" }