使用地形部署狀態機 - AWS Step Functions

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

使用地形部署狀態機

Terraform by HashiCorp 是使用基礎架構作為代碼(IaC)構建應用程序的框架。使用 Terraform,您可以建立狀態機器並使用功能,例如預覽基礎結構部署和建立可重複使用的範本。Terraform 範本可協助您維護和重複使用程式碼,方法是將程式碼分解成較小的區塊。

如果您熟悉 Terraform,可以遵循本主題中描述的開發生命週期,作為在 Terraform 中建立和部署狀態機器的模型。如果您不熟悉 Terraform,我們建議您先完成工作坊「地形簡介」,以了解地AWS形

提示

要將使用 Terraform 構建的狀態機示例部署到您的AWS 帳戶,請參閱以基礎結構作為工作坊的代碼管理狀態機器模塊。AWS Step Functions

先決條件

開始之前,請確定您已完成下列先決條件:

具有地形的狀態機開發生命週期

下列程序說明如何使用您在 Step Functions 式主控台中使用 Workflow Studio 建立的狀態機器原型,做為使用 Terraform 和. AWS Toolkit for Visual Studio Code

若要檢視討論使用 Terraform 進行狀態機器開發的完整範例,並詳細介紹最佳作法,請參閱撰寫 Step Functions Terraform 專案的最佳作法。

使用 Terraform 啟動狀態機的開發生命週期
  1. 使用以下命令引導一個新的地形項目。

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

  3. 在工作流程 Studio 中,執行下列操作:

    1. 建立您的工作流程原型。

    2. 匯出工作流程的亞馬遜州語言 (ASL) 定義。若要這麼做,請選擇 [匯 Im port /Export/匯出] 下拉式清單,然後選取 [匯出 JSON 定義]。

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

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

    提示

    由於 ASL 定義檔案可能包含冗長的文字區塊,因此建議您避免使用內嵌 EOF 方法。這樣可以更輕鬆地將參數替換為狀態機定義。

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

    工作流程的 ASL 定義的螢幕擷取畫面,在 Visual Studio 程式碼及其視覺表示法。

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

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

    提示

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

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

    terraform plan
  8. 使用下列指令,從本機環境或 C I/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架構模式,請參閱無伺服器土地工作流程集合中的 Terraform 範例