CDN觸發器配置完成後,每當CDN服務在指定的加速網域名稱下產生一個離線記錄檔,CDN事件就會觸發Function Compute轉存CDN離線日誌。本文介紹如何在Function Compute控制台上為目標函數配置CDN觸發器,包括建立觸發器、配置入口參數以及編寫函數代碼並測試。
樣本情境
阿里雲CDN支援的來源站點類型包括OSS網域名稱、IP地址、來源站點網域名稱和Function Compute網域名稱。每種來源站點類型都支援配置多個來源站點地址,多來源站點情境下,支援設定來源站點的主備優先順序和權重,實現負載平衡。
本文以OSS作為來源站點,您需要在OSS控制台建立一個儲存空間,擷取網域名稱作為來源站點,然後為來源站點添加加速網域名稱。如需變更來源站點類型,請參見配置來源站點。
前提條件
步驟一:建立CDN觸發器
登入Function Compute控制台,在左側導覽列,單擊服務及函數。
在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的函數管理。
在函數管理頁面,單擊目標函數名稱。
在函數詳情頁面,單擊觸發器管理頁簽,從版本或別名下拉式清單選擇要建立觸發器的版本或別名,然後單擊建立觸發器。
在建立觸發程序面板,填寫相關資訊。然後單擊確定。
參數
操作
本文樣本
觸發器類型
選擇CDN。
CDN
名稱
填寫自訂的觸發器名稱。
cdn-trigger
版本或別名
預設值為LATEST,如果您需要建立其他版本或別名的觸發器,需先在函數詳情頁的版本或別名下拉式清單選擇該版本。關於版本和別名的簡介,請參見管理版本和管理別名。
LATEST
觸發事件
選擇一個觸發事件類型。
如何選擇觸發事件類型,請參見CDN事件定義。
CdnDomainStarted
觸發事件版本
觸發事件的版本號碼。
說明目前僅支援1.0.0事件版本。
1.0.0
網域名稱
填寫加速網域名稱。
bucket*******.oss-cn-chengdu-internal.aliyuncs.com
描述
填寫網域名稱的描述。
cdntrigger
角色名稱
選擇AliyunCDNEventNotificationRole。
說明如果您第一次建立該類型的觸發器,單擊確定後,則需在彈出的對話方塊中選擇立即授權。
AliyunCDNEventNotificationRole
建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。
步驟二:配置函數的入口參數
在函數詳情頁面,單擊函數代碼頁簽,然後單擊測試函數右側表徵圖,從下拉式清單中,選擇配置測試參數。
在配置測試參數面板,選擇建立新測試事件或編輯已有測試事件頁簽,填寫事件名稱和事件內容。然後單擊確定。
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事件時,觸發器會自動觸發函數的執行。
在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼。
本文以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}"
單擊函數代碼頁簽的測試函數。
執行完成後,您可以在函數代碼頁簽的上方查看執行結果。
更多資訊
除了Function Compute控制台,您還可通過以下方式配置觸發器:
通過Serverless Devs工具配置觸發器。更多操作,請參見Serverless Devs。
通過SDK配置觸發器。更多操作,請參見SDK列表。
如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。