使用 Terraform 部署状态机 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Terraform 部署状态机

HashiCorp 的 Terraform 是一个使用基础设施即代码 (IaC) 构建应用程序的框架。借助 Terraform,您可以创建状态机并使用特征,例如预览基础架构部署和创建可重复使用的模板。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 启动状态机的开发生命周期
  1. 使用以下命令可引导新的 Terraform 项目。

    terraform init
  2. 打开 Step Functions 控制台,为状态机创建原型。

  3. 在 Works Studio 中,执行以下操作:

    1. 创建您的工作流原型。

    2. 导出工作流的 Amazon States Language (ASL) 定义。为此,请选择导入/导出下拉列表,然后选择导出 JSON 定义

  4. 将导出的 ASL 定义保存在项目目录中。

    您将导出的 ASL 定义作为输入参数传递给使用 templatefile 函数的 aws_sfn_state_machine Terraform 资源。此函数在定义字段中使用,该字段传递导出的 ASL 定义和任何变量替换。

    提示

    由于 ASL 定义文件可能包含较长的文本块,因此我们建议您避免使用内联 EOF 方法。这可让您更轻松地将参数替换到状态机定义中。

  5. (可选)更新 IDE 中的 ASL 定义并使用 Amazon Toolkit for Visual Studio Code 可视化您的更改。

    Visual Studio Code 中工作流的 ASL 定义及其可视化表示的屏幕截图。

    为避免持续导出定义并将其重构到项目中,我们建议您在 IDE 中进行本地更新,并使用 Git 跟踪这些更新。

  6. 使用 Step Functions Local 测试工作流。

    提示

    您还可以使用 Amazon SAM CLI Local 在状态机中本地测试与 Lambda 函数和 API Gateway API 的服务集成。

  7. 在部署状态机之前,请预览状态机和其他 Amazon 资源。要执行此操作,请运行以下命令。

    terraform plan
  8. 使用以下命令从本地环境或通过 CI/CD 管道部署状态机。

    terraform apply
  9. (可选)使用以下命令清理资源并删除状态机。

    terraform destroy

状态机的 IAM 角色和策略

使用 Terraform 服务集成策略为您的状态机添加必要的 IAM 权限,例如调用 Lambda 函数的权限。您还可以定义明确的角色和策略,并将它们与状态机相关联。

以下 IAM 策略示例授予您的状态机调用名为 myFunction 的 Lambda 函数的权限。

{ "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 数据来源,并授予您的状态机调用名为 myFunction 的 Lambda 函数的访问权限。

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