CDN触发器配置完成后,每当CDN服务在指定的加速域名下生成一个离线日志文件,CDN事件就会触发函数计算转存CDN离线日志。本文介绍如何在函数计算控制台上完成CDN事件触发器的配置,包括创建触发器、编写函数和测试函数。

示例场景

阿里云CDN支持的源站类型包括OSS域名、IP地址、源站域名和函数计算域名,每种源站类型都支持配置多个源站地址,多源站场景下,支持设置源站的主备优先级和权重,实现负载均衡。本文以OSS作为源站,您需要在OSS控制台创建一个存储空间,获取域名作为源站,然后为源站添加加速域名。如需变更源站类型,请参见配置源站

前提条件

创建触发器

  1. 登录函数计算控制台
  2. 在左侧导航栏,单击服务及函数
  3. 在顶部菜单栏,选择地域。
  4. 服务列表页面,找到目标服务,在其右侧操作列单击函数管理
  5. 函数管理页面,单击目标函数名称。
    hanshuguanli
  6. 在函数详情页面,单击触发器管理页签,从版本或别名下拉列表选择要创建触发器的版本或别名,然后单击创建触发器
    创建触发器
  7. 在创建触发器面板,填写相关信息。然后单击确定
    创建触发器面板-cdn
    参数 操作 本文示例
    触发器类型 选择CDN CDN
    名称 填写自定义的触发器名称。 cdn-trigger
    版本或别名 默认值为LATEST,如果您需要创建其他版本或别名的触发器,需先在函数详情页的版本或别名下拉列表选择该版本。关于版本简介,请参见版本简介 LATEST
    触发事件 选择一个触发事件类型。

    如何选择触发事件类型,请参见CDN事件定义

    CdnDomainStarted
    触发事件版本 触发事件的版本号。
    说明 目前仅支持1.0.0事件版本。
    1.0.0
    域名 填写加速域名。 bucket-zh****.oss-cn-chengdu-internal.aliyuncs.com
    描述 填写域名的描述。 cdntrigger
    角色名称 选择AliyunCDNEventNotificationRole
    说明 如果您第一次创建该类型的触发器,单击确定后,则需在弹出的对话框中选择立即授权
    AliyunCDNEventNotificationRole

    创建完成后,在触发器名称列表中显示已创建的触发器。

    cdn-trigger

编写函数

完成CDN事件触发器的创建后,您可以开始写入函数代码,实现CDN事件触发函数计算转存CDN离线日志。

在函数详情页面,单击函数代码页签,在代码编辑器中编写代码。

本文以Python函数代码为例。

import json
import oss2
import requests

def handler(event, context):
    creds = context.credentials
    auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
    bucket = oss2.Bucket(auth, 'your endpoint', 'your bucket name')

  # Parse the event to get the source object info.
  eventObj = json.loads(event)["events"]
  fileUrl = eventObj[0]["eventParameter"]["filePath"]
  file = requests.get(fileUrl)
  result = bucket.put_object("your log name", fileUrl)

  return result.status                       

测试函数

完成函数编写后,您需要调试函数以验证代码的正确性。在实际操作过程中当发生CDN事件时,触发器会自动触发函数的执行。

  1. 在函数详情页面,单击函数代码页签,然后单击xialatubiao图标,从下拉列表中,选择配置测试参数
  2. 配置测试参数对话框,选择创建新测试事件编辑已有测试事件页签,填写事件名称和事件内容。然后单击确定

    event是函数计算的入口参数,具体格式为如下。其中,对于不同的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-e4ea39686738",
                  "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-e4ea39686738 事件源传递的ID,用于排查问题。
      userIdentity String 用户属性。
      aliUid String 164901546557**** 阿里云账号ID。
      resource String 资源信息。
      domain String example.com 域名。
      eventParameter String 事件参数。
      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和CachedObjectsBlocked事件的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-4c3d08e25acf",
                  "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-e4ea39686738 事件源传递的ID,用于排查问题。
      resource String 资源信息。
      domain String example.com 域名。
      eventParameter String 事件参数。
      objectPath String /2018/03/16/13/33b430c57e7.mp4 资源标识。
      createTime String 1521180769 刷新开始时间。
      completeTime String 1521180777 刷新结束时间。
      objectType String File 刷新类型,取值说明如下:
      • File:文件
      • Directory:文件夹
      taskId String 2089687230 资源刷新任务ID。
      userIdentity String 用户属性。
      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-4c3d08e25acf",
               "resource": {
                    "domain": "example.com" 
               }, 
               "eventParameter": {
                    "domain": "example.com", 
                    "status": "online"
               }, 
               "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-e4ea39686738 事件源传递的ID,用于排查问题。
      resource String 资源信息。
      domain String example.com 域名。
      eventParameter String 事件参数。
      status String online 域名状态。
      userIdentity String 用户属性。
      aliUid String 164901546557**** 阿里云账号ID。
    • CdnDomainAdded和CdnDomainDeleted事件的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-4c3d08e25acf",
               "resource": {
                    "domain": "example.com"
               },
               "eventParameter": {
                    "domain": "example.com"
               },
               "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-e4ea39686738 事件源传递的ID,用于排查问题。
      resource String 资源信息。
      domain String example.com 域名。
      eventParameter String 事件参数。
      domain String example.com 域名。
      userIdentity String 用户属性。
      aliUid String 164901546557**** 阿里云账号ID。
  3. 在函数详情页面,单击函数代码页签,然后单击测试函数

验证结果

函数代码页签,您可以看到执行成功的指示。

result

更多信息

除了函数计算控制台,您还可通过以下方式配置触发器:
  • 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs
  • 通过SDK配置触发器。更多操作,请参见SDK列表

如需对创建的触发器进行修改或删除,具体操作,请参见触发器管理