本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Terraform 在 Step Functions 中部署狀態機器
HashiCorp 的 Terraform
如果您熟悉 Terraform,則可以遵循本主題所述的開發生命週期,做為在 Terraform 中建立和部署狀態機器的模型。如果您不熟悉 Terraform,建議您先完成 上的 Terraform 研討會簡介, AWS
提示
若要部署使用 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 啟動狀態機器的開發生命週期
-
使用以下命令引導新的 Terraform 專案。
terraform init
-
開啟 Step Functions 主控台
,為您的狀態機器建立原型。 -
在 Workflow Studio 中,執行下列動作:
-
建立工作流程原型。
-
匯出工作流程的 Amazon States Language (ASL) 定義。若要執行此操作,請選擇匯入/匯出下拉式清單,然後選擇匯出 JSON 定義。
-
-
將匯出的 ASL 定義儲存在專案目錄中。
您可以將匯出的 ASL 定義做為輸入參數傳遞給使用
templatefile
函數的 aws_sfn_state_machine
Terraform 資源。此函數用於傳遞匯出 ASL 定義和任何變數替換的定義欄位。 提示
由於 ASL 定義檔案可以包含冗長的文字區塊,我們建議您避免內嵌 EOF 方法。這可讓您更輕鬆地將參數取代為狀態機器定義。
-
(選用) 更新 IDE 中的 ASL 定義,並使用 視覺化您的變更 AWS Toolkit for Visual Studio Code。
為了避免持續匯出定義並將其重構到專案中,我們建議您在 IDE 中於本機進行更新,並使用 Git
追蹤這些更新。 -
使用 Step Functions Local 測試您的工作流程。
提示
您也可以使用 AWS SAM CLI Local,在本機測試服務與狀態機器中 Lambda 函數和 API Gateway APIs整合。
-
部署狀態機器之前,請先預覽您的狀態機器和其他 AWS 資源。若要進行這項動作,請執行以下命令。
terraform plan
-
使用下列命令,從本機環境或透過 CI/CD 管道
部署您的狀態機器。 terraform apply
-
(選用) 使用下列命令清除資源並刪除狀態機器。
terraform destroy
狀態機器的 IAM 角色和政策
使用 Terraform 服務整合政策
下列 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 範例