本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 部署状态机
HashiCorp 的 Terraform
如果您熟悉 Terraform,则可以按照本主题中描述的开发生命周期作为在 Terraform 中创建和部署状态机的模型。如果您不熟悉 Terraform,我们建议您先完成 Amazon 上的 Terraform 入门工作坊,以熟悉 Terraform。
提示
要在 Amazon Web Services 账户中部署使用 Terraform 构建的状态机示例,请参阅《Amazon Step Functions 研讨会》中的使用基础设施即代码管理状态机
先决条件
在开始之前,您必须满足以下先决条件:
-
在您的系统上安装 Terraform。有关安装 Terraform 的信息,请参阅安装 Terraform
。 -
在系统上安装 Step Functions Local。我们建议您安装 Step Functions Local Docker 映像,用于使用 Step Functions Local。有关更多信息,请参阅在本地测试状态机。
-
安装 Amazon SAM CLI。有关安装信息,请参阅《Amazon Serverless Application Model 开发人员指南》中的安装 Amazon SAM CLI。
-
安装 Amazon Toolkit for Visual Studio Code,用于查看状态机的工作流图。有关安装信息,请参阅《Amazon Toolkit for Visual Studio Code 用户指南》中的安装 Amazon Toolkit for Visual Studio Code。
使用 Terraform 的状态机开发生命周期
以下过程说明了如何使用在 Step Functions 控制台中使用 Workflow Studio 构建的状态机原型作为使用 Terraform 和 Amazon Toolkit for Visual Studio Code 进行本地开发的起点。
要查看讨论使用 Terraform 开发状态机并详细介绍最佳实操的完整示例,请参阅编写 Step Functions Terraform 项目的最佳实操
使用 Terraform 启动状态机的开发生命周期
-
使用以下命令可引导新的 Terraform 项目。
terraform init
-
打开 Step Functions 控制台
,为状态机创建原型。 -
在 Works Studio 中,执行以下操作:
-
创建您的工作流原型。
-
导出工作流的 Amazon States Language (ASL) 定义。为此,请选择导入/导出下拉列表,然后选择导出 JSON 定义。
-
-
将导出的 ASL 定义保存在项目目录中。
您将导出的 ASL 定义作为输入参数传递给使用
templatefile
函数的 aws_sfn_state_machine
Terraform 资源。此函数在定义字段中使用,该字段传递导出的 ASL 定义和任何变量替换。 提示
由于 ASL 定义文件可能包含较长的文本块,因此我们建议您避免使用内联 EOF 方法。这可让您更轻松地将参数替换到状态机定义中。
-
(可选)更新 IDE 中的 ASL 定义并使用 Amazon Toolkit for Visual Studio Code 可视化您的更改。
为避免持续导出定义并将其重构到项目中,我们建议您在 IDE 中进行本地更新,并使用 Git
跟踪这些更新。 -
使用 Step Functions Local 测试工作流。
提示
您还可以使用 Amazon SAM CLI Local 在状态机中本地测试与 Lambda 函数和 API Gateway API 的服务集成。
-
在部署状态机之前,请预览状态机和其他 Amazon 资源。要执行此操作,请运行以下命令。
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 部署的更高级的 Amazon 架构模式,请参阅 Terraform examples at Serverless Land Workflows Collection