After you configure an Alibaba Cloud CDN trigger, each time Alibaba Cloud CDN generates an offline log file under the specified accelerated domain name, the Alibaba Cloud CDN event triggers Function Compute to store the offline logs of Alibaba Cloud CDN. This topic describes how to configure an Alibaba Cloud CDN trigger for a function in the Function Compute console, including how to create a trigger, configure input parameters, and write and test function code.
Example scenario
Alibaba Cloud CDN supports the following types of origin servers: Object Storage Service (OSS) endpoints, IP addresses of origin servers, domain names of origin servers, and Function Compute domain names. You can specify one or more origin servers of each type and specify primary and secondary origin servers to balance loads.
In this topic, an OSS endpoint is used as the origin server. You need to create a bucket in the OSS console, obtain the endpoint as the origin server, and then add a domain name to Alibaba Cloud CDN. For more information about how to change the origin server, see Configure an origin server.
Before you start
Function Compute
OSS
CDN
Step 1: Create an Alibaba Cloud CDN trigger
Log on to the Function Compute console. In the left-side navigation pane, click Services & Functions.
In the top navigation bar, select a region. On the Services page, find the service that you want to manage and click Functions in the Actions column.
On the Functions page, click the function that you want to modify.
On the function details page, click the Triggers tab, select a version or alias from the Version or Alias drop-down list, and then click Create Trigger.
In the Create Trigger panel, configure the parameters and click OK.
Parameter
Description
Example
Trigger Type
Select Alibaba Cloud CDN.
CDN
Name
Enter a trigger name.
cdn-trigger
Version or Alias
The default value is LATEST. If you want to create a trigger for another version or alias, select a version or alias from the Version or Alias drop-down list on the function details page. For more information about versions and aliases, see Manage versions and Manage aliases.
LATEST
Trigger Event
Select a trigger event type.
For more information about how to select an event type, see the "CDN events" section in Overview.
CdnDomainStarted
Trigger Event Version
Specify the version of the trigger event.
NoteOnly event version 1.0.0 is supported.
1.0.0
Domain Name
Enter an accelerated domain name.
bucket*******.oss-cn-chengdu-internal.aliyuncs.com
Description
Enter a description about the accelerated domain name.
cdntrigger
Role Name
Select AliyunCDNEventNotificationRole.
NoteAfter you configure the preceding parameters, click OK. If this is the first time that you create a trigger of this type, click Authorize Now in the message that appears.
AliyunCDNEventNotificationRole
After the trigger is created, it is displayed on the Triggers tab. To modify or delete an existing trigger, see Manage triggers.
Step 2: Configure the input parameter of the function
On the function details page, click the Code tab, click the icon next to Test Function, and then select Configure Test Parameters from the drop-down list.
In the Configure Test Parameters panel, select the Create New Test Event or Modify Existing Test Event tab, configure Event Name and the event content, and then click OK.
The event parameter is an input parameter of Function Compute. The following items show the format of event. The key-value pairs in eventParameter vary with the Alibaba Cloud CDN event type.
Example of the LogFileCreated event
Replace filePath with the path of Alibaba Cloud CDN logs or a test file.
{ "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 } } ] }
The following table describes the fields in the event parameter.
Field
Type
Example
Description
eventName
String
LogFileCreated
The type of the event.
eventSource
String
cdn
The name of the event source.
region
String
cn-hangzhou
The region where Alibaba Cloud CDN resides. Default value: cn-hangzhou.
eventVersion
String
1.0.0
The version of the event trigger.
eventTime
String
2018-06-14T15:31:49+08:00
The time at which an event occurred.
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
The ID that is delivered by the event source for troubleshooting.
userIdentity
Map
The information about the user.
aliUid
String
164901546557****
The ID of the Alibaba Cloud account that created the namespace.
resource
Map
The information about the resources.
domain
String
example.com
The domain name.
eventParameter
Map
The event parameters.
domain
String
example.com
The domain name.
endTime
String
1528959900
The end time of the log file.
fileSize
String
1788115
The size of the log file.
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
The location of the log file.
startTime
String
1528959600
The start time of the log file.
Examples of event for the CachedObjectsRefreshed and CachedObjectsPushed events
{ "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****" } } ] }
The following table describes the fields in the event parameter.
Field
Type
Example
Description
eventName
String
CachedObjectsRefreshed
The type of the event.
eventSource
String
cdn
The name of the event source.
region
String
cn-hangzhou
The region where Alibaba Cloud CDN resides. Default value: cn-hangzhou.
eventVersion
String
1.0.0
The version of the event trigger.
eventTime
String
2018-06-14T15:31:49+08:00
The time at which an event occurred.
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
The ID that is delivered by the event source for troubleshooting.
resource
Map
The information about the resources.
domain
String
example.com
The domain name.
eventParameter
Map
The event parameters.
objectPath
String
/2018/03/16/13/33b430c57e7.mp4
The resource identifier.
createTime
String
1521180769
The start time of the refresh.
domain
String
example.com
The domain name.
completeTime
String
1521180777
The end time of the refresh.
objectType
String
File
The item that is refreshed. Valid values:
File: files
Directory: folders
taskId
String
2089687230
The ID of the resource refresh task.
userIdentity
Map
The information about the user.
aliUid
String
164901546557****
The ID of the Alibaba Cloud account that created the namespace.
Samples of CdnDomainStarted and CdnDomainStopped events
{ "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****" } } ] }
The following table describes the fields in the event parameter.
Field
Type
Example
Description
eventName
String
CdnDomainStarted
The type of the event.
eventSource
String
cdn
The name of the event source.
region
String
cn-hangzhou
The region where Alibaba Cloud CDN resides. Default value: cn-hangzhou.
eventVersion
String
1.0.0
The version of the event trigger.
eventTime
String
2018-06-14T15:31:49+08:00
The time at which an event occurred.
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
The ID that is delivered by the event source for troubleshooting.
resource
Map
The information about the resources.
domain
String
example.com
The domain name.
eventParameter
Map
The event parameters.
domain
String
example.com
The domain name.
status
String
online
The status of the accelerated domain name.
userIdentity
Map
The information about the user.
aliUid
String
164901546557****
The ID of the Alibaba Cloud account that created the namespace.
Samples of CdnDomainAdded and CdnDomainDeleted events
{ "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****" } } ] }
The following table describes the fields in the event parameter.
Field
Type
Example
Description
eventName
String
CdnDomainAdded
The event type.
eventSource
String
cdn
The name of the event source.
region
String
cn-hangzhou
The region where Alibaba Cloud CDN resides. Default value: cn-hangzhou.
eventVersion
String
1.0.0
The version of the event trigger.
eventTime
String
2018-06-14T15:31:49+08:00
The time at which an event occurred.
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
The ID that is delivered by the event source for troubleshooting.
resource
Map
The information about the resources.
domain
String
example.com
The domain name.
eventParameter
Map
The event parameters.
domain
String
example.com
The domain name.
userIdentity
Map
The information about the user.
aliUid
String
164901546557****
The ID of the Alibaba Cloud account that created the namespace.
Step 3: Write and test the function
After you create a CDN trigger, you can write function code and test the function to verify whether the code is correct. When an Alibaba Cloud CDN event occurs, Alibaba Cloud CDN triggers the function.
On the function details page, click the Code tab, enter function code in the code editor, and then click Deploy.
This example uses the function code that is written in 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": # Corresponding business logic pass elif eventName == "CdnDomainAdded" or eventName == "CdnDomainDeleted": # Corresponding business logic pass return f"eventName:{eventName}, domain: {domain}, info: {info}"
On the Code tab, click Test Function.
After the function is run, you can view the result on the Code tab.
References
- Use Serverless Devs to configure triggers. For more information, see Serverless Devs.
- Use SDKs to configure triggers. For more information, see SDKs.
To modify or delete an existing trigger, see Manage triggers.