阿里云函数计算创建、配置CDN触发器

用户可以为新建的函数或已有函数配置CDN触发器,创建函数的流程可以具体参考 创建函数 这里不再赘述。

这里假设用户已完成一个名为hello-cdn的Python函数的创建,以下内容以此为前提,指引用户在阿里云函数计算控制台在函数管理页面中为函数配置触发器。接下来,我们将通过三步来完成一个触发器的设置。

编写阿里云处理函数

使用CDN触发器需要用户在函数代码中作出相应的调整,按照CDN的事件格式来编写handler,具体可参考 CDN事件说明。

  1. 登录管理控制台,选择“产品服务>云函数计算 阿里云函数计算”,进入“函数列表”页面。
  2. 在“函数列表”页面,点击名称为hello-cdn的函数,进入函数详情页面。
  3. 在函数详情页中编写函数代码,以对触发操作做出适当的处理,之后点击右下角保存按钮完成函数的修改操作。

    # -*- coding: utf-8 -*-def handler(event, context): for record in event['events']: domain = record['eventDetail']['domain'] status = record['eventDetail']['status'] print("current status of domain '%s' is '%s'" % (domain, status)) return 'Successfully processed {} records.'.format(len(event['events']))

配置阿里云函数计算CDN触发器

  1. 登录管理控制台,选择“产品服务> 函数计算 阿里云函数计算”,进入“函数列表”页面。
  2. 点击需要添加CDN触发器的函数名称(即hello-cdn),进入函数详情页面。
  3. 点击左侧导航栏中的“触发器”,进入函数配置页面,点击“新增触发器”。
  1. 在弹出框中,点击下拉框“选择事件源进行添加”,选择CDN触发器。
  1. 之后在弹出框中配置好域名、事件类型和触发器备注,并点击确认,完成触发器的创建。

    • 事件类型:触发器需要匹配的事件类型,可以通过下拉框选择一种类型,这里我们选择“启动域名成功”
    • 域名:CDN服务中管理的域名
    • 备注:触发器的备注信息
  1. 在函数配置页面“触发器”一栏中,可以看到刚刚创建好的CDN触发器及其信息。

测试阿里云函数计算CDN触发器

  1. 点击测试按钮
  1. 输入测试事件,并点击执行,测试内容如下

    { "events": [ { "eventName": "CdnDomainStarted", "eventVersion": "1.0.0", "eventSource": "cdn", "eventTime": 1551085929, "userId": "9b2aa05367204d9481ef29bdf5ef8243", "eventDetail": { "domain": "www.test.com", "status": "started" } } ] }

  2. 查看返回的结果

阿里云函数计算CDN触发器事件说明
事件名称事件说明事件粒度事件版本CachedObjectsBlocked发现违禁资源用户粒度1.0.0CachedObjectsPushed预热资源完成用户粒度1.0.0CachedObjectsRefreshed刷新资源完成用户粒度1.0.0CdnDomainCreated创建域名成功用户粒度1.0.0CdnDomainDeleted删除域名成功用户粒度1.0.0LogFileCreated产生域名日志域名粒度、用户粒度1.0.0CdnDomainStarted启动域名成功域名粒度、用户粒度1.0.0CdnDomainStopped停止域名成功域名粒度、用户粒度1.0.0

CDN粒度说明

事件的粒度分为用户粒度和域名粒度,其中域名粒度更为精细,用户粒度指代用户全局粒度;针对每个阿里云函数计算函数触发器的设置,不指定具体域名即为用户粒度触发器,指定具体域名即为域名粒度触发器。

  • 用户粒度:用户账户产生指定事件,即可触发相关阿里云函数计算函数
  • 域名粒度:特定域名产生指定事件,即可触发相关阿里云函数计算函数

事件结构

预热刷新事件CachedObjectsPushed:用户账户下预热任务完成CachedObjectsRefreshed:用户账户下刷新任务完成

{ "events": [ { "eventName": "CachedObjectsPushed", // 事件类型 "eventVersion": "1.0.0", // 事件版本 "eventSource": "cdn", // 事件源 "eventTime": 1551085930, // 时间戳 "userId": "9b2aa05367204d9481ef29bdf5ef8243", // 用户账户ID "eventDetail": { "taskId": "eJwzMTU3NjQ2MXBIM0tMTTJKNtMklIMkwwsEo0AAbMLeg==", // 任务ID "status": "completed" // 刷新或预热任务完成 } } ]}

黄反事件

CachedObjectsBlocked:用户账户下发现黄反URL

{ "events": [ { "eventName": "CachedObjectsBlocked", // 事件类型 "eventVersion": "1.0.0", // 事件版本 "eventSource": "cdn", // 事件源 "eventTime": 1551085930, // 时间戳 "userId": "9b2aa05367204d9481ef29bdf5ef8243", // 用户账户ID "eventDetail": { "url": "http://www.test.com/sexy.jpg", // 黄反URL "status": "slightPorn" // 取值为slightPorn或severePorn } } ]}

日志事件LogFileCreated:用户账户下某一域名或特定域名产生最近时间访问日志

{ "events": [ { "eventName": "CachedObjectsBlocked", // 事件类型 "eventVersion": "1.0.0", // 事件版本 "eventSource": "cdn", // 事件源 "eventTime": 1551085930, // 时间戳 "userId": "9b2aa05367204d9481ef29bdf5ef8243", // 用户账户ID "eventDetail": { "domain": "www.test.com", // 产生日志的域名 "logTime": "2019-02-26T12:00:00" // 日志产生时间 } } ]}

域名事件CdnDomainStarted:用户账户下某一域名或特定域名启动成功CdnDomainStopped:用户账户下某一域名或特定域名停止成功CdnDomainCreated:用户账户下某一域名创建成功CdnDomainDeleted:用户账户下某一域名删除成功

{ "events": [ { "eventName": "CdnDomainStarted", // 事件类型 "eventVersion": "1.0.0", // 事件版本 "eventSource": "cdn", // 事件源 "eventTime": 1551085930, // 时间戳 "userId": "9b2aa05367204d9481ef29bdf5ef8243", // 用户账户ID "eventDetail": { "domain": "www.test.com", // 触发动作的域名 "status": "started" // 取值为started、stopped、created、deleted } } ]}