本文介绍如何在函数计算控制台配置定时触发器,包括创建触发器、编写函数和测试函数。

前提条件

创建触发器

  1. 登录函数计算控制台
  2. 在左侧导航栏,单击服务及函数
  3. 在顶部菜单栏,选择地域。
  4. 服务列表页面,找到目标服务,在其右侧操作列单击函数管理
  5. 函数管理页面,单击目标函数名称。
    hanshuguanli
  6. 在函数详情页面,单击触发器管理页签,从版本或别名下拉列表选择要创建触发器的版本或别名,然后单击创建触发器
    创建触发器
  7. 在创建触发器面板,填写相关信息。然后单击确定
    创建触发器面板-timer
    参数 操作 本文示例
    触发器类型 选择定时触发器 定时触发器
    名称 填写自定义的触发器名称。 my_trigger
    版本或别名 默认值为LATEST,如果您需要创建其他版本或别名的触发器,需先在函数详情页的右上角切换到该版本或别名。关于版本简介,请参见版本简介 LATEST
    触发方式 根据需要选择触发方式:
    • 按照时间间隔触发:在时间间隔文本框输入正整数n,表示每n分钟触发一次函数执行。
    • 按照 CRON 表达式触发:在CRON 表达式文本框中输入Cron表达式,到达指定的时间点触发一次函数执行。
    时间间隔:5分钟
    触发消息 输入自定义的参数。该触发消息将会作为event中payload的值。
    {awesome-fc}
    时间表达式
    • Cron表达式

      Cron表达式默认以UTC时间运行,即北京时间减去8个小时。例如北京时间每天12:00调度函数,那么转化为UTC时间就是每天4:00调度函数,则可以使用0 0 4 * * *

    • 时区表达式

      如果您的任务需要按照特定时区运行,可以通过CRON_TZ指定,例如在北京时间每个月一号的04:00触发函数执行,则可以使用CRON_TZ=Asia/Shanghai 0 0 4 1 * *。不同地域的时区表达式存在差异,请以实际情况为准。

      说明

      如果您使用的时区存在夏令时和冬令时的区分,在夏令时和冬令时切换的过程中可能会出现重复执行或少执行的情况,建议将执行时间设置在夏令时和冬令时切换的时间段外。

    下表是时间表达式常用示例。例如您希望函数计算的函数在北京时间12:00被执行,对应的Cron表达式为0 0 4 * * *,时区表达式为CRON_TZ=Asia/Shanghai 0 0 12 * * *
    示例 Cron表达式 时区表达式
    每天12:00调度函数 0 0 4 * * * CRON_TZ=Asia/Shanghai 0 0 12 * * *
    每天12:30调度函数 0 30 4 * * * CRON_TZ=Asia/Shanghai 0 30 12 * * *
    每小时的26分,29分,33分调度函数 0 26,29,33 * * * * CRON_TZ=Asia/Shanghai 0 26,29,33 * * * *
    周一到周五的每天12:30调度函数 0 30 4 ? * MON-FRI CRON_TZ=Asia/Shanghai 0 30 12 ? * MON-FRI
    周一到周五的每天12:00~14:00每5分钟调度函数 0 0/5 4-6 ? * MON-FRI CRON_TZ=Asia/Shanghai 0 0/5 12-14 ? * MON-FRI
    一月到四月每天12:00调度函数 0 0 4 ? JAN,FEB,MAR,APR * CRON_TZ=Asia/Shanghai 0 0 12 ? JAN,FEB,MAR,APR *
    Cron表达式的字段说明如下:
    • 字段说明
      字段名 取值范围 允许的特殊字符
      Seconds 0~59
      Minutes 0~59 , - * /
      Hours 0~23 , - * /
      Day-of-month 1~31 , - * ?/
      Month 1~12或JAN~DEC , - * /
      Day-of-week 0~6或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分钟执行一次。

    创建完成后,在触发器名称列表中显示已创建的触发器。

    timer-trigger

编写函数

完成定时触发器创建后,您可以开始编写函数代码,实现定时触发函数执行。

在函数详情页面,单击函数代码页签,在代码编辑器中编写代码。
本文以Python函数代码为例,示例代码如下。
import json
import logging

logger = logging.getLogger()

def handler(event, context):
    logger.info('event: %s', event)

    evt = json.loads(event)
    triggerName = evt["triggerName"]
    triggerTime = evt["triggerTime"]
    message = evt["payload"]
    creds = context.credentials
    logger.info('access_key_id: %s', creds.access_key_id)
    logger.info("message = %s", message)                        

测试函数

完成函数编写后,您需要调试函数以验证代码的正确性。在实际操作过程中当到达指定的时间,定时触发器会自动触发函数执行。

  1. 在函数详情页面,单击函数代码页签,然后单击xialatubiao图标,从下拉列表中,选择配置测试参数
  2. 配置测试参数对话框,选择创建新测试事件编辑已有测试事件页签,填写事件名称和事件内容。然后单击确定

    定时触发器会按照以下event格式来触发函数。

    {
        "triggerTime":"2018-02-09T05:49:00Z",
        "triggerName":"timer-trigger",
        "payload":"awesome-fc"
    }            
    参数 类型 示例值 描述
    triggerTime String 2018-02-09T05:49:00Z 函数被触发的时间。
    triggerName String timer-trigger 定时触发器的名称。
    payload String awesome-fc 您在触发器配置里输入的自定义参数,即触发消息的值。
  3. 在函数详情页面,单击函数代码页签,然后单击测试函数

验证结果

函数代码页签,您可以看到执行成功的指示。

result

更多信息

除了函数计算控制台,您还可通过以下方式配置触发器:
  • 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs
  • 通过SDK配置触发器。更多操作,请参见SDK列表

如需对创建的触发器进行修改或删除,具体操作,请参见触发器管理