函数计算的正确使用姿势——CDN 触发器

本文涉及的产品
简介: 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考

Fun: 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

CDN: 阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上、由分布在不同区域的边缘节点服务器群组成的分布式网络。替代传统以Web Server为中心的数据传输模式,将源站资源缓存到阿里云全国各地的边缘服务器,供用户就近快速获取,提升用户体验,降低源站压力。CDN 更多信息 参考

准备

Fun 配置并部署 CDN 触发器

1556446468552_b6a7f169_2045_41c7_998f_5bc991d31b0c

阿里云内容分发网络和函数计算无缝集成,用户可以为 CDN 的各种事件设置处理函数,并允许用户通过事件中的域名等参数进行过滤,只接收自己感兴趣的 domain 的数据。当 CDN 系统捕获到指定类型的、满足过滤条件的事件后,会自动调用函数处理。通过本文的示例,你将了解:Fun 如何使用 CDN 触发器连接 CDN 和函数计算。

1.编写函数

使用 CDN 触发器需要用户在函数代码中作出相应的调整,按照CDN的事件格式来编写handler。示例简单 demo:

exports.handler = function(event, context, callback) {
   var eventObj = JSON.parse(event.toString());
   console.log("event: " + event);
   console.log('context: ', JSON.stringify(context));
   console.log('eventName: '+ eventObj.events[0].eventName);
   console.log('eventVersion: '+ eventObj.events[0].eventVersion);
   console.log('eventSource: '+ eventObj.events[0].eventSource);
   console.log('region: '+ eventObj.events[0].region);
   console.log('eventParameter: '+ JSON.stringify(eventObj.events[0].eventParameter,null,4))
   // cdn trigger 事件格式请参考 https://help.aliyun.com/document_detail/73333.html
   callback(null, 'hello cdn_trigger');
};

2.描述 CDN 触发器

Fun 通过一个资源配置文件(template.yml),协助您进行开发、构建、部署。所以我们在 yml 中按照规范去描述 CDN 触发器:

Events:
  cdn-trigger-name: # trigger name
    Type: CDN # trigger type
    Properties:
      EventName: CachedObjectsRefreshed
      EventVersion: '1.0.0'
      Notes: cdn events trigger test
      Filter: 
        Domain: ['cdn-trigger.sunfeiyu.top']

触发器参数说明

  • EventName 为 CDN 端触发函数执行的事件,一经创建不能更改
  • EventVersion 为 CDN端触发函数执行事件的版本,一经创建不能更改
  • Notes 触发器的备注信息
  • Filter 过滤器(至少需要一个过滤器)
  • Domain CDN 服务中管理的域名,类型为数组。

在上面的示例中,我们定义了一个名为 cdn-trigger-name 的 CDN 触发器,触发事件 CachedObjectsRefreshed 表示资源刷新事件,在域名下触发将会强制 CDN 节点回源拉取最新的文件。完整的 template.yml 可以 参考

CDN 事件触发器当前支持的事件及版本如下表所示:

事件名称 事件版本 过滤参数 备注
CachedObjectsRefreshed 1.0.0 domain CDN刷新资源
CachedObjectsBlocked 1.0.0 domain CDN封禁资源
CachedObjectsPushed 1.0.0 domain CDN预热资源
LogFileCreated 1.0.0 domain 离线日志文件生成

3.部署

通过fun deploy即可发布:
fun_deploy

然后我们去函数计算控制台查看我们刚刚定义的 CDN 触发器:

console

CDN 事件格式

当 CDN 系统捕获到相关事件后,会将事件信息编码为 json 字符串,传递给函数进行处理。
下面以 CachedObjectsRefreshed,CachedObjectsPushed 和 CachedObjectsBlocked 事件格式为例。其它事件格式详情 参考

{
  "events": [
    {
      "eventName": "CachedObjectsRefreshed", // 事件类型
      "eventVersion": "1.0.0", // 事件版本,目前都是1.0.0版本
      "eventSource": "cdn", // 事件源名称
      "region": "cn-shanghai", // 区域,默认为"cn-hangzhou"
      "eventTime": "2018-03-16T14:19:55+08:00", // 事件发生时间
      "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf", // 事件源传递过来的id, 用于排查问题
      "resource": {
        "domain": "cdn-trigger.sunfeiyu.top" // 资源所在的域名
      },
      "eventParameter": {
        "objectPath": [
          "/2018/03/16/13/33b430c57e7.mp4", // 资源标识
          "/2018/03/16/14/4ff6b9bd54d.mp4"
        ],
        "createTime": 1521180769,
        "domain": "cdn-trigger.sunfeiyu.top",
        "completeTime": 1521180777,
        "objectType": "File", // 刷新类型,取值为File,Directory
        "taskId": 2089687230 // 资源刷新任务ID
      },
      "userIdentity": {
        "aliUid": "1xxxxxxxxxx" // 主账号的账号 id
      }
    }
  ]
}

将 event 收起,更直观:

{
  "events":Array[1]
}

总结

  • 加速域名不能作为您 CDN 的源站。否则会造成循环解析,无法回源。
  • 以 Function 为单位,定义在 Function 的 CDN 触发器一旦创建 eventName,eventVersion 不可修改。
  • 预热适合文件首次发布到 CDN;刷新适合文件内容修改后,主动更新 CDN 中的文件到最新版本。
  • 刷新支持 URL 刷新和文件夹刷新。原因:当 CDN 已经命中过文件后,CDN 会记录每个文件夹下面有哪些文件,就可以得出每个文件的 URL,文件夹刷新本质上是 URL 刷新的包装了一层壳。
  • 阿里云 CDN 拥有先进的分布式系统架构,全球节点 2500+,六大洲覆盖。稳定高效的性能指标:95%+ 命中率,ms 级响应时间,视频 95%+ 流畅率,且国内节点数最多的云 CDN。
目录
相关文章
|
3月前
|
Serverless
函数计算里FC 3.0中,http触发器配置域名
函数计算里FC 3.0中,http触发器配置域名
|
编解码 Serverless 测试技术
函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务
函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务
|
域名解析 缓存 监控
如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存
如何使用 CDN 对部署在函数计算上的静态网站进行缓存?
|
域名解析 缓存 监控
如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存
为了进一步提升网站的访问速度,我们会使用 CDN 对网站进行加速,但是最近在调试阿里云的函数计算和 CDN 的配合使用时发现了一个需要额外注意的地方。
如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存
|
编解码 Serverless 测试技术
函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务
HTTP 触发支持异步调用,为用户搭建 WEB 服务使用函数计算作为全托管平台打通了最后一公里,让 HTTP 触发器的使用者也可以一样感受到异步调用开箱即用的便捷体验。
47173 5
函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务
|
编解码 Serverless 测试技术
函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务
函数计算 HTTP 触发器支持异步调用,为用户搭建 WEB 服务使用函数计算作为全托管平台打通了最后一公里,以后 HTTP 触发器的使用者,也可以感受到异步调用”开箱即用“的便捷体验。
|
Serverless
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(三)
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(三)
234 0
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(三)
|
JavaScript Serverless
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(二)
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(二)
212 0
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(二)
|
Serverless 文件存储 数据库
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(一)
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(一)
238 0
我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )(一)
|
Serverless 对象存储 CDN
小谈CDN回源函数计算的应用场景
CDN回源函数计算的功能目的在帮助CDN客户能通过函数计算快速处理和便捷处理回源数据为目的的一个功能,用户仅仅需要在CDN回源地址填写函数计算的自定义域名即可把请求转发到函数计算进行处理,配置简单,费用低廉,极大提高用户体验。
1747 0

相关产品

  • 函数计算