云工作流支持通过配置Cron表达式周期性或指定时间来调度工作流执行。本文介绍如何为云工作流配置定时调度。
前提条件
事件总线(EventBridge)
云工作流(CloudFlow)
已成功创建工作流。具体操作,请参见创建流程。
注意事项
创建的自定义总线以及事件规则的数量超过上限后,将无法再创建定时调度。在单个阿里云账号单个地域维度下,关于创建工作流调度涉及的资源数量的限制,请参见使用限制。
通过控制台配置工作流定时调度
登录云工作流控制台,然后在顶部菜单栏,选择地域。
在工作流列表页面,单击目标工作流。
在工作流详情页面,单击工作流调度页签,然后单击创建工作流调度。
在创建工作流调度面板,调度类型选择定时触发,设置相关配置项,然后单击确定。
配置项
说明
本文示例
名称
填写自定义的定时调度名称。
schedule-test
描述
填写该定时调度的描述信息。
test schedule
触发周期
选择调度时间配置方式,并填写具体的时间规则。
固定周期:配置调度时间周期,即每过多场时间调度工作流执行一次。
自定义 CRON:输入标准的Cron表达式,配置调度时间。关于CRON 表达式的说明和示例,请参见调度时间参数说明。
选择固定周期并设置周期类型为秒,周期时间为30,即每过30秒调度工作流执行一次。
触发消息
填写自定义的参数。格式为JSON。
{"key": "value"}
说明首次创建用户,需要为云工作流调度角色授予AliyunEventBridgeFullAccess的权限,并且还需要开通事件总线EventBrige服务。
创建完成后,您可以在工作流详情页面的工作流调度页签,根据界面提示查看、编辑、删除或禁用/启用工作流。
调度时间参数说明
定时调度的参数格式如下:
{
UserData: "payload"
Schedule: "cronExpression"
TimeZone: "GMT+0:00"
}
UserData:您可以自定义执行定时调度的输入,必须为JSON对象。
TimeZone:触发周期执行的时区,默认为UTC(GMT+0:00)。北京时间为UTC+8,即GMT+8:00。
Schedule:工作流被调度的时间,支持Cron表达式。格式见下表。
下表为时间表达式常用示例。例如,您希望工作流在北京时间12:00被调度,对应的Cron表达式为
0 0 12 * * ?
,时区为GMT+8:00
。示例
Cron表达式
时区
每天12:00调度函数
0 0 12 * * ?
GMT+8:00
每天12:30调度函数
0 30 12 * * ?
GMT+8:00
每小时的26分、29分、33分调度函数
0 26,29,33 * * * ?
GMT+8:00
周一到周五的每天12:30调度函数
0 30 12 ? * MON-FRI
GMT+8:00
周一到周五的每天12:00~14:00每5分钟调度函数
0 0/5 12-14 ? * MON-FRI
GMT+8:00
一月到四月每天12:00调度函数
0 0 12 ? JAN,FEB,MAR,APR *
GMT+8:00
每年3月的每周三的14:10和14:44触发
0 10,44 14 ? 3 WED
GMT+8:00
每月最后一天23:00触发
0 0 23 L * ?
GMT+8:00
每月最后一个周五10:15触发
0 15 10 ? * 6L
GMT+8:00
每月的第三个周五10:15触发
0 15 10 ? * 6#3
GMT+8:00
字段说明
字段名
取值范围
允许的特殊字符
Seconds
0~59
, - * /
Minutes
0~59
, - * /
Hours
0~23
, - * /
Day-of-month
1~31
, - * ?/ L W
Month
1~12或JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
, - * /
Day-of-week
1~7或SUN, MON, TUE, WED, THU, FRI, SAT
, - * ? / L #
特殊字符说明
字符名
定义
示例
*
表示任一,每一。
在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分钟执行一次。
L
月份最后一天或星期六,周位上6L表示月份的最后一个周五。
在Day-of-month字段上使用L,表示取每个月的最后一天,在Day-of-week上使用6L表示月份的最后一个星期五。
W
用于日期字段,表示最近的工作日(周一至周五)。
在Day-of-month上使用1W,表示每月的第一个工作日执行。
#
用于星期字段,表示第几个星期几。
6#3表示每个月的第三个周五。
Input格式
定时调度会按照以下Input格式(推送格式为CloudEvents)来调度您的工作流执行。
{
"datacontenttype":"application/json;charset=utf-8",
"aliyunaccountid":"143998900779****",
"aliyunpublishtime":"2022-09-21T05:00:00.035Z",
"data":{
"TimeZone":"GMT+0:00",
"Schedule":"0/30 * * * * ?",
"UserData":{
"key":"value"
}
},
"specversion":"1.0",
"aliyuneventbusname":"Housekeeping-Bus",
"id":"d100262d-90c7-4caf-a3b5-813f3526a1f7-****",
"source":"housekeeping.scheduledevent",
"time":"2022-09-21T05:00:00Z",
"aliyunregionid":"cn-beijing",
"type":"eventbridge:Events:ScheduledEvent"
}{
"datacontenttype":"application/json;charset=utf-8",
"aliyunaccountid":"143998900779****",
"aliyunpublishtime":"2022-09-21T05:00:00.035Z",
"data":{
"TimeZone":"GMT+0:00",
"Schedule":"0/30 * * * * ?",
"UserData":{
"key":"value"
}
},
"specversion":"1.0",
"aliyuneventbusname":"Housekeeping-Bus",
"id":"d100262d-90c7-4caf-a3b5-813f3526a1f7-****",
"source":"housekeeping.scheduledevent",
"time":"2022-09-21T05:00:00Z",
"aliyunregionid":"cn-beijing",
"type":"eventbridge:Events:ScheduledEvent"
}
UserData:您在调度配置里自定义的输入,在流程定义中可以直接通过$Input.data.UserData来读取。更多信息,请参见输入和输出。
TimeZone:触发周期执行的时区,默认为UTC(GMT+0:00)。北京时间为UTC+8,即GMT+8:00。
Schedule:工作流被调度的时间,支持Cron表达式。