云工作流新旧版本差异及兼容性说明

云工作流(CloudFlow)是一个用来协调多个分布式任务执行的全托管云服务。随着云工作流新版本的发布,为您提供更加稳定可靠的新版本升级说明。本文介绍云工作流新旧版本的差异及兼容性说明。

云工作流新版本优势

云工作流旧版本相比,新版本具有如下优势:

  • 完全遵循State Machine的工作流设计规范,提供更通用的工作流编排逻辑能力。

  • 支持近乎全部云产品及场景的编排组合方式,提供更丰富的生态集成方案。

  • 全新Spec YAML语法升级,显著降低对Spec的理解成本。在抽象上对齐行业先进水平,提供编排、执行单元、数据操作符等更多扩展语法。

  • 更便捷的工作流开发体验,提供全新的Studio拖拽形式编辑,提供在线调试及YAML预览,帮助用户快速上手工作流开发。

  • 提供全新Express模式,提升大流量和高并发场景的使用体验,降低整体工作流调用延迟。

API/SDK兼容性说明

云工作流新版本完全兼容旧版API/SDK。例如,您创建了新版本工作流,客户端使用的是最新版SDK,则新版功能全部支持;若您的客户端使用老版本SDK,则无法使用新版Express等新版对应的产品能力。

更多参数,请参见OpenAPI门户网站

功能差异说明

新版本功能差异项

涉及接口

说明

新增Express执行模式

新增Express执行模式,服务在线业务API编排。

新增StartSyncExecution

StartSyncExecution - 同步调用开始一个流程的执行

新增API StartSyncExecution,同步调用Express执行模式的工作流。

新版Spec定义

支持全新YAML语义创建与执行工作流。

新增IO构造能力

-

借助InputConstructor和OutputConstructor及内建函数可以灵活构造数据。具体参考文档如下:

新版执行事件定义

GetExecutionHistory - 获取一次执行的步骤详情

支持全新事件类型定义。取值说明如下:

  • StateEntered:前一步骤给当前步骤的输入。

  • StateStarted:经过输入构造器处理,即将开始执行步骤。

  • StateSucceeded:执行完成,且经过输出构造器加工后的结果。当前步骤执行成功的输出,也是下一步骤的输入。

  • StateFailed:当前步骤执行失败的输出。

  • StateTimedOut:超时导致的失败。

  • StateAborted:取消导致的失败。

  • TaskSucceeded:集成系统执行成功的结果。

  • TaskFailed:集成系统执行失败的结果。

新增Workflow Studio能力

-

支持图形化拖拽生成工作流,详情请参见界面概览

新增Workflow在线调试能力

-

支持使用控制台预调试工作流内容,详情请参见调试流程

新增部分产品优化集成能力

-

支持云工作流对象存储事件总线短信服务 SMS(Short Message Service)、HSF以及HTTP的优化集成能力。

新增阿里云云产品API集成

-

支持云工作流直接调用云产品的OpenAPI服务接口,不对这些服务接口做任何包装处理和实现优化,共计可使用多达上万条API服务接口。

新增内置函数

-

云工作流的流程定义语言提供部分内置函数,您可以使用内置函数执行基本的数据处理操作。更多信息,请参见内置函数

云工作流旧版迁移说明

云工作流新版本与旧版本的主要差异在于YAML定义语法不同,可新创建新版工作流的YAML替代旧版工作流的YAML,完成迁移。

新旧版本YAML差异对比

旧版

新版

version: v1beta1
type: flow
steps:
  - type: task
    name: APIParseFace
    action: imageseg:ParseFace
    inputMappings:
      - target: image
        source: $input.faceURL
    outputMappings:
      - target: parseFace_OriginImageURL
        source: $local.Data.OriginImageURL
    serviceParams:
      ImageURL: $.image    
    retry:
      - errors:
          - ErrorNeedsRetry
        intervalSeconds: 10
        maxAttempts: 3
        multiplier: 2
      - errors:
          - FC.ResourceThrottled
          - FC.ResourceExhausted
          - FC.InternalServerError
          - FnF.TaskTimeout
          - FC.Unknown
        intervalSeconds: 3
        maxAttempts: 10
        multiplier: 2
    catch:
      - errors:
          - ErrorNeedsRetry
        goto: final

  - type: choice
    name: mychoice0
    choices:
      - condition: $.status == "ready"
        steps:
          - type: pass
            name: pass11
      - condition: $.status == "failed"
        goto: final
    default:
      steps:
        - type: pass
          name: pass12
      goto: final
  - type: parallel
    name: myparallel
    branches:
      - steps:
          - type: pass
            name: pass21
            outputMappings:
              - target: result
                source: pass1
      - steps:
          - type: pass
            name: pass22
            outputMappings:
              - target: result
                source: pass21
    outputMappings:
      - target: result
        source: $local[*].result
  - type: foreach
    name: myforeach
    iterationMapping:
      collection: $.names
      item: name
    steps:
      - type: task
        name: toUpperCase11
        resourceArn: acs:fc:{region}:{account}:services/fnf_test/functions/toUpperCase
    outputMappings:
      - target: names
        source: $local[*].name
  - type: fail
    name: handle_failure
    error: StatusIsNotReady
    cause: status is not ready
  - type: pass
    name: final
Type: StateMachine
Version: v1beta1
SpecVersion: v1
StartAt: APIParseFace
States:
  - Type: Task
    Name: APIParseFace
    Action: <TODO> imageseg:ParseFace
    TaskMode: RequestComplete
    InputConstructor:
      image.$: <TODO> $Input.faceURL
    OutputConstructor:
      parseFace_OriginImageURL.$: <TODO> $Output.Data.OriginImageURL
    Parameters:
      resourceArn: ""    
    Retry:
      - Errors:
          - ErrorNeedsRetry
        BackoffRate: 2
        IntervalSeconds: 10
        MaxAttempts: 3
      - Errors:
          - FC.ResourceThrottled
          - FC.ResourceExhausted
          - FC.InternalServerError
          - FnF.TaskTimeout
          - FC.Unknown
        BackoffRate: 2
        IntervalSeconds: 3
        MaxAttempts: 10
    Catch:
      - Errors:
          - ErrorNeedsRetry
        Next: final
    Next: mychoice0
  - Type: Choice
    Name: mychoice0
    Branches:
      - Condition: <TODO> $.status == "ready"
        Name: $.status == "ready"
        Next: pass11
      - Condition: <TODO> $.status == "failed"
        Name: $.status == "failed"
        Next: final
      Default: pass12
    Next: myparallel
  - Type: Parallel
    Name: myparallel
    Branches:
      - Type: ParallelBranch
        StartAt: pass21
        States:
          - Type: Pass
            Name: pass21
            End: true
            OutputConstructor:
              result: pass1
      - Type: ParallelBranch
        StartAt: pass22
        States:
          - Type: Pass
            Name: pass22
            End: true
            OutputConstructor:
              result: pass21
    OutputConstructor:
      result.$: <TODO> $Output[*].result
    Next: myforeach
  - Type: Map
    Name: myforeach
    ItemKey: name
    ItemsPath: <TODO> $Input.names
    OutputConstructor:
      names.$: <TODO> $Output[*].name
    Processor:
      Type: MapProcessor
      StartAt: toUpperCase11
      States:
        - Type: Task
          Name: toUpperCase11
          Action: FC:InvokeFunction
          Parameters:
            resourceArn: acs:fc:{region}:{account}:services/fnf_test/functions/toUpperCase
          TaskMode: RequestComplete
          End: true
    Next: handle_failure
  - Type: Fail
    Name: handle_failure
    Code: StatusIsNotReady
    Detail: status is not ready
  - Type: Pass
    Name: final
    End: true
  - Type: Pass
    Name: pass12
  - Type: Pass
    Name: pass11
说明
  • 旧版version对应新版SpecVersionversion支持v1和 v1beta1两个版本, SpecVersion仅支持v1版本。

  • 新版Version是用户管理自己流程时,自定义的版本信息。

迁移流程

  1. 下载转换包。云工作流目前提供适用于Linux系统和macOS系统的转换包。

  2. 执行以下命令,转换YAML文件。

    # 使用Mac M系列芯片系统转换旧版本定义到新版
    ./转换工具-macos-aarch64 --action=v2tov3 -f source.yaml
    # 在Linux系统上转换旧版本定义到新版
    ./转换工具-linux-amd64 --action=v2tov3 -f source.yaml
    说明

    执行完成后,在命令行中即可打印转换后的YAML文件。部分标记为<TODO>的表达式内容可能需要微调。

StepFunction迁移说明

StepFunction定义与云工作流转换定义对比

StepFunction

云工作流

{
  "Comment": "A Hello World example",
  "StartAt": "Parallel",
  "States": {
    "Parallel": {
      "Type": "Parallel",
      "Branches": [
        {
          "StartAt": "Success",
          "States": {
            "Success": {
              "Type": "Succeed"
            }
          }
        },
        {
          "StartAt": "Lambda Invoke",
          "States": {
            "Lambda Invoke": {
              "Type": "Task",
              "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
              "OutputPath": "$.Payload",
              "Parameters": {
                "FunctionName.$": "$.a.b",
                "Payload": {
                  "sampleKey1": "sampleValue1",
                  "key2.$": "$.myStateInput.key",
                  "key3": 100
                }
              },
              "Retry": [
                {
                  "ErrorEquals": [
                    "Lambda.ServiceException",
                    "Lambda.TooManyRequestsException",
                    "States.ALL"
                  ],
                  "IntervalSeconds": 2,
                  "MaxAttempts": 6,
                  "BackoffRate": 2,
                  "Comment": "aaa"
                }
              ],
              "Next": "Pass (3)",
              "Catch": [
                {
                  "ErrorEquals": [
                    "States.ALL"
                  ],
                  "Comment": "bbb",
                  "Next": "Fail"
                }
              ],
              "InputPath": "$.a.b"
            },
            "Pass (3)": {
              "Type": "Pass",
              "End": true
            }
          }
        }
      ],
      "Next": "Pass (4)"
    },
    "Pass (4)": {
      "Type": "Pass",
      "End": true
    }
  }
}
Type: StateMachine
SpecVersion: v1
StartAt: Parallel
States:
  - Type: Parallel
    Name: Parallel
    Next: Pass (4)
    Branches:
      - Type: ParallelBranch
        StartAt: Success
        States:
          - Type: Succeed
            Name: Success
      - Type: ParallelBranch
        StartAt: Lambda Invoke
        States:
          - Type: Task
            Name: Lambda Invoke
            Action: <TODO> arn:aws:states:::lambda:invoke.waitForTaskToken
            InputConstructor:
              $: <TODO> $Input.a.b
              FunctionName.$: <TODO> $Input.a.b
            Payload:
              key2.$: $.myStateInput.key
              key3: 100
              sampleKey1: sampleValue1
            OutputConstructor:
              $: <TODO> $Input.Payload
            Retry:
              - Errors:
                  - Lambda.ServiceException
                  - Lambda.TooManyRequestsException
                  - States.ALL
                BackoffRate: 2
                IntervalSeconds: 2
                MaxAttempts: 6
            Catch:
              - Errors:
                  - States.ALL
                Next: Fail
            Next: Pass (3)
          - Type: Pass
            Name: Pass (3)
            End: true
  - Type: Pass
    Name: Pass (4)
    End: true

迁移流程

  1. 下载转换包。云工作流目前提供适用于Linux系统和macOS系统的转换包。

  2. 执行以下命令,转换YAML文件。

    # 使用Mac M系列芯片系统转换stepfunction定义到新版
    ./转换工具-macos-aarch64 --action=awstov3 -f source.json
    # 在Linux系统上转换stepfunction定义到新版
    ./转换工具-linux-amd64 --action=awstov3 -f source.json
    说明

    执行完成后,在命令行中即可打印转换后的YAML文件。部分标记为<TODO>的表达式内容可能需要微调。