全部產品
Search
文件中心

Function Compute:定時觸發器

更新時間:Jul 06, 2024

定時觸發器會根據您設定的特定時間點或周期性規則自動觸發函數執行,為您提供靈活的任務調度能力,適合需要定期執行任務的應用情境。

使用情境

定時觸發器的使用情境非常廣泛,包括但不限於以下情境:

  • 批量資料的定時處理,例如每1小時收集全量資料並產生報表。

  • 日常行為的調度,例如整點發送優惠券。

  • 與業務解耦的非同步任務,例如每天0點清理資料。

前提條件

步驟一:建立定時觸發器

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數

  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函數

  • 如果您使用定時觸發器,執行時間長度則會根據執行個體是按量模式還是預留模式進行統計。具體的統計方式請參見基本概念