選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 AWS SAM 建置 Step Functions 工作流程

焦點模式
使用 AWS SAM 建置 Step Functions 工作流程 - AWS Step Functions

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

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

您可以使用 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:

您也可以使用視覺化建置器,例如 中的 Workflow Studio,在基礎設施中設計和建置您的工作流程做為程式碼 (IaC)Infrastructure Composer。如需詳細資訊,請參閱在 中使用 Workflow Studio Infrastructure Composer 來建置 Step Functions 工作流程

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。