定时触发器

定时触发器会根据您设置的特定时间点或周期性规则自动触发函数执行,为您提供灵活的任务调度能力,适合需要定期执行任务的应用场景。

使用场景

定时触发器的使用场景非常广泛,包括但不限于以下场景:

  • 批量数据的定时处理,例如每1小时收集全量数据并生成报表。

  • 日常行为的调度,例如整点发送优惠券。

  • 与业务解耦的异步任务,例如每天0点清理数据。

前提条件

步骤一:创建定时触发器

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数

  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务操作列的函数管理

  3. 函数管理页面,单击目标函数名称。

  4. 在函数详情页面,单击触发器管理页签,从版本或别名下拉列表选择要创建触发器的版本或别名,然后单击创建触发器

  5. 在创建触发器面板,填写相关信息。然后单击确定

    参数

    操作

    本文示例

    触发器类型

    选择定时触发器

    定时触发器

    名称

    填写自定义的触发器名称。

    timer-trigger

    版本或别名

    默认值为LATEST,如果您需要创建其他版本或别名的触发器,需先在函数详情页的右上角切换到该版本或别名。关于版本和别名的简介,请参见管理版本管理别名

    LATEST

    触发方式

    根据需要选择触发方式:

    • 时间间隔:在时间间隔文本框输入正整数n,表示每n分钟触发一次函数执行。

    • 指定时间:选择时区,并指定日期、星期和时间,表示在某时区的指定时间触发一次函数执行。

    • 自定义:在CRON 表达式文本框中输入Cron表达式,表示按照Cron表达式指定的时间点触发函数执行。

    时间间隔

    触发消息

    输入自定义的参数。该触发消息将会作为event中payload的值。

    awesome-fc

    如果您对时区有特殊要求,需要自定义CRON 表达式,请参见如下时间表达式的说明。

    • Cron表达式(UTC时间)

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

    • Cron表达式(北京时间)

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

      说明

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

创建完成后,在触发器名称列表中显示已创建的触发器。如需对创建的触发器进行修改或删除,具体操作,请参见触发器管理

步骤二:配置函数的入口参数

  1. 在函数详情页面,单击函数代码页签,然后单击测试函数右侧xialatubiao图标,从下拉列表中,选择配置测试参数

  2. 配置测试参数面板,选择创建新测试事件编辑已有测试事件页签,填写事件名称和事件内容。然后单击确定

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

    {
        "triggerTime":"2023-12-26T07:49:00Z",
        "triggerName":"timer-trigger",
        "payload":"awesome-fc"
    }            

    参数

    类型

    示例值

    描述

    triggerTime

    String

    2023-12-26T07:49:00Z

    函数被触发的时间。

    triggerName

    String

    timer-trigger

    定时触发器的名称。

    payload

    String

    awesome-fc

    您在触发器配置里输入的自定义参数,即触发消息的值。

步骤三:编写函数代码并测试

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

  1. 在函数详情页面,单击函数代码页签,在代码编辑器中编写代码,然后单击部署代码

    本文以Python函数代码为例,示例代码如下。

    import json
    import logging
    
    logger = logging.getLogger()
    
    def handler(event, context):
        logger.info('event: %s', event)
    
        # Parse the json
        evt = json.loads(event)
        triggerName = evt["triggerName"]
        triggerTime = evt["triggerTime"]
        payload = evt["payload"]
    
        logger.info('triggerName: %s', triggerName)
        logger.info("triggerTime: %s", triggerTime)
        logger.info("payload: %s", payload)     
    
        return 'Timer Payload: ' + payload                      
  2. 单击函数代码页签的测试函数

    执行完成后,您可以在函数代码页签的上方查看执行结果。

相关文档

  • 如果您配置的定时触发器不能触发函数执行,请先排查设置的触发方式及对应的时间。如果您设置的为自定义CRON 表达式,默认是UTC时间。具体排查方法请参见触发器不能正常触发函数执行怎么办?

  • 如果您已经在当前函数创建了一个HTTP触发器,则不支持再创建其他类型的触发器。您可以重新创建一个事件函数设置对应的触发器,在代码中访问HTTP函数。具体请参见使用SDK执行HTTP函数

  • 如果您使用定时触发器,执行时长则会根据实例是按量模式还是预留模式进行统计。具体的统计方式请参见基本概念