Serverless工作流支持通过配置Cron表达式来定时调度工作流的执行。本文介绍如何为Serverless工作流创建定时调度。

前提条件

成功创建工作流

使用控制台创建定时调度

  1. 登录Serverless工作流控制台
  2. 在左侧导航栏,单击流程
  3. 在流程列表中单击目标流程的流程名称。
    workflow-name
  4. 流程页面,单击定时调度,在定时调度管理区域,单击创建定时调度
    create-trigger
  5. 创建定时调度区域填写相关参数,然后单击确定
    参数 操作 本文示例
    定时调度名称 填写自定义的定时调度名称。 schedule-test
    触发时间配置 选择调度时间配置方式,并填写具体的时间规则。

    定时调度规则支持以下两种表达式:

    • Cron表达式:使用标准的Cron表达式配置调度时间。更多信息,请参见调度时间参数说明
    • 时间间隔:使用@every表达式配置调度时间。

      以分钟为单位填写工作流被调度的时间间隔。

    选择时间间隔并填写时间间隔为1。表示每1分钟调度工作流执行一次。
    触发消息 填写自定义的参数。格式为JSON。 {"key": "value"}
    描述 填写该定时调度的描述信息。 test schedule
    启动定时调度 打开或关闭定时调度。 打开启用定时调度开关。
    • 创建完成后,您可以在目标工作流的定时调度页签查看已创建的定时调度。create-result
    • 在目标工作流的执行页签,您可以看到该工作流的定时执行记录。在本示例中,工作流每分钟执行一次。execution-result

使用命令行工具创建定时调度

在使用前您需要安装和配置阿里云命令行工具CLI,更多信息,请参见安装指南配置指南

  1. (可选)执行以下命令查看该API的请求参数。
    aliyun fnf CreateSchedule help

    预期输出:

    Alibaba Cloud Command Line Interface Version 3.0.45
    
    Product: fnf (FunctionFlow)
    Link:    https://help.aliyun.com/api/fnf/CreateSchedule.html
    
    Parameters:
      --CronExpression String  Required
      --FlowName       String  Required
      --ScheduleName   String  Required
      --Description    String  Optional
      --Enable         Boolean Optional
      --Payload        String  Optional
      --RequestId      String  Optional
  2. 执行以下命令创建定时调度。
    aliyun fnf CreateSchedule --FlowName test --ScheduleName "schedule-test" --CronExpression "@every 1m" --Payload "{\"key\":\"value\"}" --Description "test schedule" --Enable true

    预期输出:

    {
        "CreatedTime": "2020-05-22T09:22:03Z",
        "CronExpression": "@every 1m",
        "Description": "test schedule",
        "Enable": true,
        "LastModifiedTime": "2020-05-22T09:22:03Z",
        "Payload": "{\"key\":\"value\"}",
        "RequestId": "63ba5895-ef49-b262-cde6-7ea622c9eac7",
        "ScheduleId": "978be20f-cceb-4677-935c-c2fe6fb4c571",
        "ScheduleName": "schedule-test"
    }

调度时间参数说明

定时调度的参数格式如下:

{
    payload: "payload"
    cronExpression: "cronExpression"
    enable: true|false
}
  • payload:您可以自定义执行定时调度的输入,必须为JSON格式。
  • cronExpression:工作流被调度的时间,支持以下两种表达式。
    说明 定时调度允许的最小调度时间间隔为1分钟。如果配置的时间间隔小于1分钟会被认为是非法输入。
    • @every Value Unit

      表示每隔Value Unit时间调度一次工作流执行。其中Value为一个正整数,Unit为单位“m”。

      场景示例 表达
      每隔5分钟调度一次 @every 5m
      每隔1.5小时调度一次 @every 90m
    • 标准的Cron表达式

      标准的Cron表达式为:Seconds Minutes Hours Day-of-month Month Day-of-week。

      说明 Cron以UTC时间运行,即北京时间减去8个小时。
      • 字段说明
        字段名 取值范围 允许的特殊字符
        Seconds 0~59
        Minutes 0~59 , - * /
        Hours 0~23 , - * /
        Day-of-month 1~31 , - * ?/
        Month 1~12或JAN~DEC , - * /
        Day-of-week 1~7或MON~SUN , - * ?
      • 特殊字符说明
        字符名 定义 示例
        * 表示任一,每一。 Minutes字段中:0表示每分钟的0秒都执行。
        , 表示列表值 Day-of-week字段中:MON,WED,FRI表示星期一,星期三和星期五。
        - 表示一个范围 Hours字段中:10-12表示UTC时间从10点到12点。
        ? 表示不确定的值 与其他指定值一起使用。例如指定了一个特定的日期,但您不在乎他是星期几,那么在Day-of-week字段中就可以使用。
        / 表示一个值的增加幅度,n/m表示从n开始,每次增加m。 minute字段中:3/5表示从3分开始,每隔5分钟执行。
      • 常用示例

        下表的第一列为北京时间,第二列为北京时间对应的UTC时间(即北京时间减去8小时)。例如您希望工作流在北京时间12:00被调度,则需先将时间转换为UTC时间4:00,对应的Cron表达式为0 0 4 * * *。

        示例(北京时间) 转换为UTC时间 表达式
        每天12:00调度函数 每天4:00调度函数 0 0 4 * * *
        每天12:30调度函数 每天4:30调度函数 0 30 4 * * *
        每小时的26分,29分,33分调度函数 每小时的26分,29分,33分调度函数 0 26,29,33 * * * *
        周一到周五的每天12:30调度函数 周一到周五的每天4:30调度函数 0 30 4 ? * MON-FRI
        周一到周五的每天12:00~14:00每5分钟调度函数 周一到周五的每天4:00~6:00每5分钟调度函数 0 0/5 4-6 ? * MON-FRI
        一月到四月每天12:00调度函数 一月到四月每天4:00调度函数 0 0 4 ? JAN,FEB,MAR,APR *

Input格式

定时调度会按照以下Input格式来调度您的工作流执行。

{
  "triggerTime": "2020-01-01T00:00:00Z",
  "triggerName": "time-trigger",
  "payload": {
    "key": "value",
    "key_int": 1
  }
}
  • triggerTime:工作流被调度的时间,一个工作流在指定的时间点可能会被调度多次,您可以根据时间值做去重处理。
  • triggerName:定时调度名称。
  • payload:您在调度配置里自定义的输入,工作流会将输入的JSON字符串展开为JSON dict格式,在流程定义中可以直接通过$.payload.key来读取。更多信息,请参见输入和输出