本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 AWS Serverless Application Model 搭配 Step Functions 來建置工作流程並部署所需的基礎設施,包括 Lambda 函數、APIs和事件,以建立無伺服器應用程式。
您也可以使用 AWS Serverless Application Model CLI 搭配 AWS Toolkit for Visual Studio Code 做為整合體驗的一部分,來建置和部署 AWS Step Functions 狀態機器。您可以使用 建置無伺服器應用程式 AWS SAM,然後在 VS Code IDE 中建置您的狀態機器。然後,您可以驗證、封裝和部署您的 資源。
提示
若要部署使用 啟動 Step Functions 工作流程的範例無伺服器應用程式 AWS SAM,請參閱 AWS Step Functions 研討會中的使用 部署 AWS SAM
為什麼搭配 Step Functions 使用 AWS SAM?
當您搭配 Step Functions 使用時 AWS SAM ,您可以:
-
開始使用 AWS SAM 範例範本。
-
將您的狀態機器建置到無服務器應用程式中。
-
在部署時,使用變數替代將 ARNs 取代為您的狀態機器。
AWS CloudFormation 支援
DefinitionSubstitutions
,可讓您將工作流程定義中的動態參考新增至範本中提供的值CloudFormation。您可以使用${dollar_sign_brace}
符號,將取代新增至工作流程定義,以新增動態參考。您也需要在CloudFormation範本中 StateMachine 資源的DefinitionSubstitutions
屬性中定義這些動態參考。在CloudFormation堆疊建立過程中,這些替換會以實際值取代。如需詳細資訊,請參閱AWS SAM 範本中的 DefinitionSubstitutions 。 -
使用 AWS SAM 政策範本指定狀態機器的角色。
-
使用 API Gateway、EventBridge 事件或 AWS SAM 範本中的排程啟動狀態機器執行。
Step Functions 與 AWS SAM 規格整合
您可以使用AWS SAM 政策範本將許可新增至狀態機器。透過這些許可,您可以協調 Lambda 函數和其他 AWS 資源,以形成複雜且強大的工作流程。
Step Functions 與 SAM CLI 整合
Step Functions 已與 CLI AWS SAM 整合。使用此功能可將狀態機快速開發為無伺服器應用程式。
嘗試使用 建立 Step Functions 狀態機器 AWS SAM教學課程,了解如何使用 AWS SAM 來建立狀態機器。
支援的 AWS SAM CLI 函數包括:
CLI 命令 | 描述 |
---|---|
sam init |
使用 AWS SAM 範本初始化 Serverless 應用程式。可與 Step Functions 的 SAM 範本搭配使用。 |
sam validate | 驗證 AWS SAM 範本。 |
sam package |
封裝 AWS SAM 應用程式。它會建立程式碼和相依性的 ZIP 檔案,然後將其上傳至 Amazon S3。然後它會傳回 AWS SAM 範本的副本,以命令上傳成品的 Amazon S3 位置取代本機成品的參考。 |
sam deploy | 部署 AWS SAM 應用程式。 |
sam publish |
將 AWS SAM 應用程式發佈至 AWS Serverless Application Repository。此命令會採用封裝 AWS SAM 範本,並將應用程式發佈至指定的區域。 |
注意
使用 AWS SAM 本機時,您可以在本機模擬 Lambda 和 API Gateway。不過,您無法在本機使用 模擬 Step Functions AWS SAM。
AWS SAM 範本中的 DefinitionSubstitutions
您可以使用 CloudFormation 範本搭配 來定義狀態機器AWS SAM。使用 AWS SAM,您可以定義內嵌在範本或單獨的檔案中的狀態機器。下列AWS SAM範本包含模擬股票交易工作流程的狀態機器。此狀態機器會叫用三個Lambda函數來檢查股票價格,並決定是否要購買或銷售股票。此交易接著會記錄在 Amazon DynamoDB 資料表中。下列範本中Lambda函數和DynamoDB資料表ARNs 會使用 指定DefinitionSubstitutions
。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: | step-functions-stock-trader Sample SAM Template for step-functions-stock-trader Resources: StockTradingStateMachine: Type: AWS::Serverless::StateMachine Properties: DefinitionSubstitutions: StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem DDBTable: !Ref TransactionTable Policies: - DynamoDBWritePolicy: TableName: !Ref TransactionTable - LambdaInvokePolicy: FunctionName: !Ref StockCheckerFunction - LambdaInvokePolicy: FunctionName: !Ref StockBuyerFunction - LambdaInvokePolicy: FunctionName: !Ref StockSellerFunction DefinitionUri: statemachine/stock_trader.asl.json StockCheckerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-checker/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 StockSellerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-seller/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 StockBuyerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-buyer/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 TransactionTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S
下列程式碼是 使用 建立 Step Functions 狀態機器 AWS SAM 教學stock_trader.asl.json
中使用的檔案中的狀態機器定義。此狀態機器定義包含數個DefinitionSubstitutions
以 ${dollar_sign_brace}
表示的符號。例如,${StockCheckerFunctionArn}
使用替換,而不是為Check Stock Value
任務指定靜態Lambda函數 ARN。此替換在 範本的 DefinitionSubstitutions 屬性中定義。 DefinitionSubstitutions
是狀態機器資源的鍵值對映射。在 中DefinitionSubstitutions
,${StockCheckerFunctionArn} 會使用CloudFormation內部函數 對應至StockCheckerFunction
資源的 ARN!GetAtt
。部署AWS SAM範本時,範本DefinitionSubstitutions
中的 會取代為實際值。
{ "Comment": "A state machine that does mock stock trading.", "StartAt": "Check Stock Value", "States": { "Check Stock Value": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockCheckerFunctionArn}" }, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.stock_price", "NumericLessThanEquals": 50, "Next": "Buy Stock" } ], "Default": "Sell Stock" }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockBuyerFunctionArn}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2 } ], "Next": "Record Transaction" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockSellerFunctionArn}" }, "Next": "Record Transaction" }, "Record Transaction": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:putItem", "Parameters": { "TableName": "${DDBTable}", "Item": { "Id": { "S.$": "$.id" }, "Type": { "S.$": "$.type" }, "Price": { "N.$": "$.price" }, "Quantity": { "N.$": "$.qty" }, "Timestamp": { "S.$": "$.timestamp" } } }, "End": true } } }
後續步驟
您可以進一步了解搭配 AWS SAM 下列資源使用 Step Functions:
-
完成使用 建立 Step Functions 狀態機器 AWS SAM教學課程以使用 建立狀態機器 AWS SAM。
-
尋找要使用的 AWS SAM 政策範本。
-
AWS Toolkit for Visual Studio Code 搭配 Step Functions 使用。
-
檢閱 AWS SAM CLI 參考,進一步了解 中可用的功能 AWS SAM。
您也可以使用視覺化建置器,例如 中的 Workflow Studio,在基礎設施中設計和建置您的工作流程做為程式碼 (IaC)Infrastructure Composer。如需詳細資訊,請參閱在 中使用 Workflow Studio Infrastructure Composer 來建置 Step Functions 工作流程。