使用 Terraform 在 Step Functions 中部署狀態機器 - AWS Step Functions

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

使用 Terraform 在 Step Functions 中部署狀態機器

HashiCorp 的 Terraform 是使用基礎設施做為程式碼 (IaC) 建置應用程式的架構。透過 Terraform,您可以建立狀態機器並使用功能,例如預覽基礎設施部署和建立可重複使用的範本。Terraform 範本透過將程式碼分解為較小的區塊,協助您維護和重複使用程式碼。

如果您熟悉 Terraform,則可以遵循本主題所述的開發生命週期,做為在 Terraform 中建立和部署狀態機器的模型。如果您不熟悉 Terraform,建議您先完成 上的 Terraform 研討會簡介, AWS以便熟悉 Terraform。

提示

若要部署使用 Terraform 建置的狀態機器範例,請參閱 AWS Step Functions 研討會中的使用 Terraform 部署

先決條件

開始之前,請務必完成下列先決條件:

  • 在機器上安裝 Terraform。如需安裝 Terraform 的詳細資訊,請參閱安裝 Terraform

  • 在機器上安裝 Step Functions Local。我們建議您安裝 Step Functions Local Docker 映像,以使用 Step Functions Local。如需詳細資訊,請參閱使用 Step Functions Local (不支援) 測試狀態機器

  • 安裝 AWS SAM CLI。如需安裝資訊,請參閱《 AWS Serverless Application Model 開發人員指南》中的安裝 AWS SAM CLI

  • 安裝 AWS Toolkit for Visual Studio Code 以檢視狀態機器的工作流程圖表。如需安裝資訊,請參閱AWS Toolkit for Visual Studio Code 《 使用者指南》中的安裝 AWS Toolkit for Visual Studio Code

使用 Terraform 狀態機器開發生命週期

下列程序說明如何使用 Step Functions 主控台中使用 Workflow Studio 建置的狀態機器原型,做為使用 Terraform 和 進行本機開發的起點AWS Toolkit for Visual Studio Code

若要檢視與 Terraform 討論狀態機器開發的完整範例,並詳細說明最佳實務,請參閱撰寫 Step Functions Terraform 專案的最佳實務

使用 Terraform 啟動狀態機器的開發生命週期
  1. 使用以下命令引導新的 Terraform 專案。

    terraform init
  2. 開啟 Step Functions 主控台,為您的狀態機器建立原型。

  3. 在 Workflow Studio 中,執行下列動作:

    1. 建立工作流程原型。

    2. 匯出工作流程的 Amazon States Language (ASL) 定義。若要執行此操作,請選擇匯入/匯出下拉式清單,然後選擇匯出 JSON 定義

  4. 將匯出的 ASL 定義儲存在專案目錄中。

    您可以將匯出的 ASL 定義做為輸入參數傳遞給使用 templatefile函數的 aws_sfn_state_machine Terraform 資源。此函數用於傳遞匯出 ASL 定義和任何變數替換的定義欄位。

    提示

    由於 ASL 定義檔案可以包含冗長的文字區塊,我們建議您避免內嵌 EOF 方法。這可讓您更輕鬆地將參數取代為狀態機器定義。

  5. (選用) 更新 IDE 中的 ASL 定義,並使用 視覺化您的變更 AWS Toolkit for Visual Studio Code。

    Visual Studio Code 中工作流程的 ASL 定義及其視覺化呈現的螢幕擷取畫面。

    為了避免持續匯出定義並將其重構到專案中,我們建議您在 IDE 中於本機進行更新,並使用 Git 追蹤這些更新。

  6. 使用 Step Functions Local 測試您的工作流程。

    提示

    您也可以使用 AWS SAM CLI Local,在本機測試服務與狀態機器中 Lambda 函數和 API Gateway APIs整合。

  7. 部署狀態機器之前,請先預覽您的狀態機器和其他 AWS 資源。若要進行這項動作,請執行以下命令。

    terraform plan
  8. 使用下列命令,從本機環境或透過 CI/CD 管道部署您的狀態機器。

    terraform apply
  9. (選用) 使用下列命令清除資源並刪除狀態機器。

    terraform destroy

狀態機器的 IAM 角色和政策

使用 Terraform 服務整合政策將必要的 IAM 許可新增至您的狀態機器,例如,叫用 Lambda 函數的許可。您也可以定義明確的角色和政策,並將其與您的狀態機器建立關聯。

下列 IAM 政策範例授予您的狀態機器存取,以叫用名為 的 Lambda 函數myFunction

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myFunction" } ] }

在 Terraform 中為您的狀態機器定義 IAM 政策時,我們也建議使用 aws_iam_policy_document 資料來源。這可協助您檢查政策是否格式不正確,並以變數取代任何資源。

下列 IAM 政策範例使用 aws_iam_policy_document 資料來源,並授予您的狀態機器存取,以叫用名為 的 Lambda 函數myFunction

data "aws_iam_policy_document" "state_machine_role_policy" { statement { effect = "Allow" actions = [ "lambda:InvokeFunction" ] resources = ["${aws_lambda_function.[[myFunction]].arn}:*"] } }
提示

若要檢視使用 Terraform 部署的更進階 AWS 架構模式,請參閱 Serverless Land Workflows Collection 中的 Terraform 範例