全部產品
Search
文件中心

Function Compute:配置CDN觸發器

更新時間:Jul 06, 2024

CDN觸發器配置完成後,每當CDN服務在指定的加速網域名稱下產生一個離線記錄檔,CDN事件就會觸發Function Compute轉存CDN離線日誌。本文介紹如何在Function Compute控制台上為目標函數配置CDN觸發器,包括建立觸發器、配置入口參數以及編寫函數代碼並測試。

樣本情境

阿里雲CDN支援的來源站點類型包括OSS網域名稱、IP地址、來源站點網域名稱和Function Compute網域名稱。每種來源站點類型都支援配置多個來源站點地址,多來源站點情境下,支援設定來源站點的主備優先順序和權重,實現負載平衡。

本文以OSS作為來源站點,您需要在OSS控制台建立一個儲存空間,擷取網域名稱作為來源站點,然後為來源站點添加加速網域名稱。如需變更來源站點類型,請參見配置來源站點

前提條件

步驟一:建立CDN觸發器

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

  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的函數管理

  3. 函數管理頁面,單擊目標函數名稱。

  4. 在函數詳情頁面,單擊觸發器管理頁簽,從版本或別名下拉式清單選擇要建立觸發器的版本或別名,然後單擊建立觸發器

  5. 在建立觸發程序面板,填寫相關資訊。然後單擊確定

    參數

    操作

    本文樣本

    觸發器類型

    選擇CDN

    CDN

    名稱

    填寫自訂的觸發器名稱。

    cdn-trigger

    版本或別名

    預設值為LATEST,如果您需要建立其他版本或別名的觸發器,需先在函數詳情頁的版本或別名下拉式清單選擇該版本。關於版本和別名的簡介,請參見管理版本管理別名

    LATEST

    觸發事件

    選擇一個觸發事件類型。

    如何選擇觸發事件類型,請參見CDN事件定義

    CdnDomainStarted

    觸發事件版本

    觸發事件的版本號碼。

    說明

    目前僅支援1.0.0事件版本。

    1.0.0

    網域名稱

    填寫加速網域名稱。

    bucket*******.oss-cn-chengdu-internal.aliyuncs.com

    描述

    填寫網域名稱的描述。

    cdntrigger

    角色名稱

    選擇AliyunCDNEventNotificationRole

    說明

    如果您第一次建立該類型的觸發器,單擊確定後,則需在彈出的對話方塊中選擇立即授權

    AliyunCDNEventNotificationRole

    建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理

步驟二:配置函數的入口參數

  1. 在函數詳情頁面,單擊函數代碼頁簽,然後單擊測試函數右側xialatubiao表徵圖,從下拉式清單中,選擇配置測試參數

  2. 配置測試參數面板,選擇建立新測試事件編輯已有測試事件頁簽,填寫事件名稱和事件內容。然後單擊確定

    event是Function Compute的入口參數,具體格式如下。其中,對於不同的CDN事件類型,eventParameter中包含的索引值對不同。

    • LogFileCreated事件的event樣本。

      替換filePath為您CDN日誌的路徑,或任何測試檔案。

      {
          "events": [
              {
                  "eventName": "LogFileCreated",
                  "eventSource": "cdn",
                  "region": "cn-hangzhou",
                  "eventVersion": "1.0.0",
                  "eventTime": "2018-06-14T15:31:49+08:00",
                  "traceId": "c6459282-6a4d-4413-894c-e4ea3968****",
                  "userIdentity": {
                      "aliUid": "164901546557****"
                  },
                  "resource": {
                      "domain": "example.com"
                  },
                  "eventParameter": {
                      "domain": "example.com",
                      "endTime": 1528959900,
                      "fileSize": 1788115,
                      "filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx",
                      "startTime": 1528959600
                  }
              }
          ]
      }
                          

      event參數中不同屬性欄位的解釋如下表所示。

      參數

      類型

      樣本值

      描述

      eventName

      String

      LogFileCreated

      事件類型。

      eventSource

      String

      cdn

      事件來源名稱。

      region

      String

      cn-hangzhou

      CDN所在地區,預設為cn-hangzhou

      eventVersion

      String

      1.0.0

      事件觸發版本。

      eventTime

      String

      2018-06-14T15:31:49+08:00

      事件發生時間。

      traceId

      String

      c6459282-6a4d-4413-894c-e4ea3968****

      事件來源傳遞的ID,用於排查問題。

      userIdentity

      Map

      使用者屬性。

      aliUid

      String

      164901546557****

      阿里雲帳號ID。

      resource

      Map

      資源資訊。

      domain

      String

      example.com

      網域名稱。

      eventParameter

      Map

      事件參數。

      domain

      String

      example.com

      網域名稱。

      endTime

      String

      1528959900

      記錄檔的結束時間。

      fileSize

      String

      1788115

      記錄檔大小。

      filePath

      String

      http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx

      記錄檔地址。

      startTime

      String

      1528959600

      記錄檔的起始時間。

    • CachedObjectsRefreshed和CachedObjectsPushed事件的event樣本。

      {
          "events": [
              {
                  "eventName": "CachedObjectsRefreshed",
                  "eventVersion": "1.0.0", 
                  "eventSource": "cdn", 
                  "region": "cn-hangzhou",
                  "eventTime": "2018-03-16T14:19:55+08:00",
                  "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
                  "resource": {
                      "domain": "example.com"
                  },
                  "eventParameter": {
                      "objectPath": [
                          "/2018/03/16/13/33b430c57e7.mp4",
                          "/2018/03/16/14/4ff6b9bd54d.mp4"
                      ],
                      "createTime": 1521180769,
                      "domain": "example.com",
                      "completeTime": 1521180777,
                      "objectType": "File",
                      "taskId": 2089687230
                  },
                  "userIdentity": {
                      "aliUid": "164901546557****"
                  }
              }
          ]
      }                    

      event參數中不同屬性欄位的解釋如下表所示。

      參數

      類型

      樣本值

      描述

      eventName

      String

      CachedObjectsRefreshed

      事件類型。

      eventSource

      String

      cdn

      事件來源名稱。

      region

      String

      cn-hangzhou

      CDN所在地區,預設為cn-hangzhou

      eventVersion

      String

      1.0.0

      事件觸發版本。

      eventTime

      String

      2018-06-14T15:31:49+08:00

      事件發生時間。

      traceId

      String

      c6459282-6a4d-4413-894c-e4ea3968****

      事件來源傳遞的ID,用於排查問題。

      resource

      Map

      資源資訊。

      domain

      String

      example.com

      網域名稱。

      eventParameter

      Map

      事件參數。

      objectPath

      String

      /2018/03/16/13/33b430c57e7.mp4

      資源標識。

      createTime

      String

      1521180769

      重新整理開始時間。

      domain

      String

      example.com

      網域名稱。

      completeTime

      String

      1521180777

      重新整理結束時間。

      objectType

      String

      File

      重新整理類型,取值說明如下:

      • File:檔案。

      • Directory:檔案夾。

      taskId

      String

      2089687230

      資源重新整理任務ID。

      userIdentity

      Map

      使用者屬性。

      aliUid

      String

      164901546557****

      阿里雲帳號ID。

    • CdnDomainStarted和CdnDomainStopped事件的event樣本。

      {  "events": [
            { 
               "eventName": "CdnDomainStarted",
               "eventVersion": "1.0.0",
               "eventSource": "cdn",
               "region": "cn-hangzhou",
               "eventTime": "2018-03-16T14:19:55+08:00",
               "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
               "resource": {
                    "domain": "example.com" 
               }, 
               "eventParameter": {
                    "domain": "example.com", 
                    "status": "online"
               }, 
               "userIdentity": {
                    "aliUid": "164901546557****"
               } 
            } 
         ]
      }

      event參數中不同屬性欄位的解釋如下表所示。

      參數

      類型

      樣本值

      描述

      eventName

      String

      CdnDomainStarted

      事件類型。

      eventSource

      String

      cdn

      事件來源名稱。

      region

      String

      cn-hangzhou

      CDN所在地區,預設為cn-hangzhou

      eventVersion

      String

      1.0.0

      事件觸發版本。

      eventTime

      String

      2018-06-14T15:31:49+08:00

      事件發生時間。

      traceId

      String

      c6459282-6a4d-4413-894c-e4ea3968****

      事件來源傳遞的ID,用於排查問題。

      resource

      Map

      資源資訊。

      domain

      String

      example.com

      網域名稱。

      eventParameter

      Map

      事件參數。

      domain

      String

      example.com

      網域名稱。

      status

      String

      online

      網域名稱狀態。

      userIdentity

      Map

      使用者屬性。

      aliUid

      String

      164901546557****

      阿里雲帳號ID。

    • CdnDomainAdded和CdnDomainDeleted事件的event樣本。

      {  "events": [
            {
               "eventName": "CdnDomainAdded",
               "eventVersion": "1.0.0",
               "eventSource": "cdn",
               "region": "cn-hangzhou",
               "eventTime": "2018-03-16T14:19:55+08:00",
               "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
               "resource": {
                    "domain": "example.com"
               },
               "eventParameter": {
                    "domain": "example.com"
               },
               "userIdentity": {
                    "aliUid": "164901546557****"
               }
            }
         ]
      }

      event參數中不同屬性欄位的解釋如下表所示。

      參數

      類型

      樣本值

      描述

      eventName

      String

      CdnDomainAdded

      事件類型。

      eventSource

      String

      cdn

      事件來源名稱。

      region

      String

      cn-hangzhou

      CDN所在地區,預設為cn-hangzhou

      eventVersion

      String

      1.0.0

      事件觸發版本。

      eventTime

      String

      2018-06-14T15:31:49+08:00

      事件發生時間。

      traceId

      String

      c6459282-6a4d-4413-894c-e4ea3968****

      事件來源傳遞的ID,用於排查問題。

      resource

      Map

      資源資訊。

      domain

      String

      example.com

      網域名稱。

      eventParameter

      Map

      事件參數。

      domain

      String

      example.com

      網域名稱。

      userIdentity

      Map

      使用者屬性。

      aliUid

      String

      164901546557****

      阿里雲帳號ID。

步驟三:編寫函數代碼並測試

完成建立CDN事件觸發程序後,您可以開始編寫函數代碼並測試以驗證代碼的正確性,在實際操作過程中當發生CDN事件時,觸發器會自動觸發函數的執行。

  1. 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼

    本文以Python函數代碼為例。

    # -*- coding: utf-8 -*-
    import logging
    import json
    
    logger = logging.getLogger("cdn-sample")
    
    def handler(event, context):
        evt = json.loads(event)
        eventObj = evt["events"][0]
        eventName = eventObj['eventName']
        info = ""
        eventParam = eventObj['eventParameter']
        domain = eventParam['domain']
        if eventName == "CachedObjectsRefreshed" or eventName == "CachedObjectsPushed":
            objPathList = eventParam['objectPath']
            info = ",".join(objPathList)
        elif eventName == "LogFileCreated":
            info = eventParam['filePath']
        elif eventName == "CdnDomainStarted" or eventName == "CdnDomainStopped":
            # 對應商務邏輯
            pass
        elif eventName == "CdnDomainAdded" or eventName == "CdnDomainDeleted":
            # 對應商務邏輯
            pass
        return f"eventName:{eventName}, domain: {domain}, info: {info}"   
  2. 單擊函數代碼頁簽的測試函數

    執行完成後,您可以在函數代碼頁簽的上方查看執行結果。

更多資訊

除了Function Compute控制台,您還可通過以下方式配置觸發器:

  • 通過Serverless Devs工具配置觸發器。更多操作,請參見Serverless Devs

  • 通過SDK配置觸發器。更多操作,請參見SDK列表

如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理