本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:使用 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,以及要安裝的泊塢窗。
-
注意
在安裝之前 AWS SAM CLI,您需要安裝 AWS CLI 和碼頭。請參閱安裝的先決條件 AWS SAM CLI.
-
通過 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": "{}"
}