从 AWS 步骤函数迁移到 Workflows

为帮助您准备从 Amazon Web Services (AWS) Step Functions 迁移到 Google Cloud上的 Workflows,本页介绍了这两种产品之间的主要相似之处和不同之处。本文旨在帮助已熟悉 Step Functions 的用户使用 Workflow 实现类似的架构。

与 Step Functions 一样,Workflows 是一个全代管式、基于状态的编排平台,该平台会按照您定义的顺序执行服务:工作流。这些工作流可以组合各种服务,包括 Cloud Run 或 Cloud Run functions 上托管的自定义服务、 Google Cloud Cloud Vision AI 和 BigQuery 等服务以及任何基于 HTTP 的 API。

请注意,由于极速工作流的持续时间有限,并且不支持精确一次工作流执行,因此我们在此处未考虑 Step Functions 极速工作流这种 AWS Step Functions 工作流类型。

Hello World

在 Step Functions 中,状态机就是工作流,任务是工作流中的一种状态,表示其他 AWS 服务执行的单个工作单元。步骤函数要求每个状态都定义下一个状态。

在 Workflows 中,一系列使用 Workflows 语法的步骤用于描述要执行的任务。Workflows 会将步骤视为有序列表并逐个执行,直到所有步骤都运行完毕。

以下“Hello World”示例演示了如何在步骤函数中使用状态,以及如何在工作流中使用步骤

步骤函数

  {
    "Comment": "Hello world example of Pass states in Amazon States Language",
    "StartAt": "Hello",
    "States": {
      "Hello": {
        "Type": "Pass",
        "Result": "Hello",
        "Next": "World"
      },
      "World": {
        "Type": "Pass",
        "Result": "World",
        "End": true
      }
    }
  }

工作流 YAML

  ---
  # Hello world example of steps using Google Cloud Workflows syntax
  main:
      steps:
      - Hello:
          next: World
      - World:
          next: end
  ...

工作流 JSON

  {
    "main": {
      "steps": [
        {
          "Hello": {
            "next": "World"
          }
        },
        {
          "World": {
            "next": "end"
          }
        }
      ]
    }
  }

比较概览

本部分将更详细地比较这两款产品。

步骤函数Workflows
语法JSON(在工具中为 YAML) YAML 或 JSON
控制流在状态之间转换 包含步骤的命令式流控制
Worker资源 (ARN) 和 HTTP 任务 HTTP 请求和连接器
可靠性捕获/重试 捕获/重试
最大并行数量支持 支持
状态数据传递状态 工作流变量
AuthenticationIAM IAM
用户体验Workflow Studio、CLI、SDK、IaC Google Cloud 控制台、CLI、SDK、IaC
价格 Step Functions 价格 Workflows 价格
语法

Step Functions 主要使用 JSON 来定义函数,不直接支持 YAML;不过,在适用于 Visual Studio Code 的 AWS 工具包和 AWS CloudFormation 中,您可以使用 YAML 来定义 Step Functions。

您可以使用 Workflows 语法描述 Workflows 步骤,这些步骤可以使用 YAML 或 JSON 编写。大多数工作流都是采用 YAML 格式。本页中的示例展示了 YAML 的优势,包括易于读写以及对注释的原生支持。如需详细了解 Workflows 语法,请参阅语法参考文档

控制流

Workflows 和 Step Functions 都将工作流建模为一系列任务:Workflows 中的步骤,Step Functions 中的状态。这两种方式都允许任务指明下一步要执行哪项任务,并且支持类似于开关的条件,以便根据当前状态选择下一个工作单元。一个关键区别是,步骤函数要求每个状态都定义下一个状态,而工作流会按照指定的顺序(包括备选后续步骤)执行步骤。如需了解详情,请参阅条件步骤

工作器

这两款产品都可以编排函数、容器和其他 Web 服务等计算资源,以便完成各种任务。在 Step Functions 中,工作器由 Resource 字段标识,该字段在语法上是 URI。用于标识 Worker 资源的 URI 采用 Amazon 资源名称 (ARN) 格式。如需直接调用任意 HTTP 端点,您可以定义 HTTP 任务

工作流可以向任意 HTTP 端点发送 HTTP 请求并获取响应。借助连接器,您可以更轻松地连接到工作流中的其他 Google Cloud API,并将工作流与 Pub/Sub、BigQuery 或 Cloud Build 等其他 Google Cloud 产品集成。连接器会为您处理请求的格式,从而为您处理请求的格式设置并提供方法和参数,这样您就无需了解Google Cloud API 的详细信息。您还可以配置超时和轮询政策。

可靠性

如果任务失败,您的工作流必须能够适当地重试、在必要时捕获异常,并根据需要重新路由工作流。步骤函数和工作流都使用类似的机制来实现可靠性:使用重试捕获异常,并最终将其分派到工作流中的其他位置。如需了解详情,请参阅工作流错误

最大并行数量

您可能希望工作流程并行协调多个任务。步骤函数提供了两种实现此目的的方法:您可以获取一个数据项,并将其并行传递给多个不同的任务;或者,您可以使用数组,并将其元素传递给同一任务。

在工作流中,您可以定义工作流的某个部分,其中两个或更多步骤可以并发执行。您可以定义并发运行的分支,也可以定义迭代并发运行的循环。如需了解详情,请参阅并行执行工作流步骤

状态数据

工作流引擎的一个好处是,它会为您维护状态数据,而无需外部数据存储区。在 Step Functions 中,状态数据会以 JSON 结构的形式从一个状态传递到另一个状态。

在 Workflows 中,您可以在全局变量中保存状态数据。由于您最多可以设置一年的执行时长,因此只要实例仍在执行,您就可以保留状态数据。

身份验证

这两款产品都依赖于底层 Identity and Access Management (IAM) 系统进行身份验证和访问权限控制。例如,您可以使用 IAM 角色调用 Step Functions。