You need to enable JavaScript to run this app.
导航

使用函数实现 TOS 触发 CDN 刷新预热

最近更新时间2023.08.30 10:50:42

首次发布时间2023.08.25 14:16:52

本文为您介绍如何通过函数服务实现 TOS 触发 CDN 刷新/预热任务。

场景介绍

互联网应用大多采用动静分离架构,将视频、音频、图片、JS 脚本等静态资源放在对象存储(TOS) 中,并使用 CDN 进行访问加速。若 TOS 的旧资源发生更新或升级,就需要及时更新节点已缓存内容,避免用户仍访问到旧的缓存资源。
CDN 提供刷新/预热功能,支持手动提交缓存刷新/预热任务。然而手动运维并不高效且容易出错,函数服务可以帮助您实现 TOS 变更自动触发 CDN 刷新/预热,极大地提高运维效率。

背景信息

  • CDN:内容分发网络(Content Delivery Network,CDN)面向内容提供商,针对其在互联网上传播的图片、音视频、网页、下载包等静态内容,提供传输加速服务,优化用户访问体验,提高下载速度。更多介绍请参见 什么是内容分发网络

  • 刷新:在 CDN 节点上删除已经缓存的指定内容或将其标记为已过期。这样当用户下次访问节点获取内容时,节点将从源站拉取最新的内容,返回给用户并进行缓存。

  • 预热:CDN 节点主动从源站拉取特定文件(一般是大文件,如视频文件、安装包文件等),并将文件缓存在节点上。这样当用户请求对应文件时,CDN 节点可以直接返回文件。该方式减少了节点从源站获取文件带来的延时,避免了用户同时请求大文件时源站下载压力过大。

前提条件

  • 内容分发网络

    • 已开通火山引擎内容分发网络。

    • 已添加您的站点域名作为加速域名,并将加速域名与您的 TOS Bucket 绑定(即将您的 TOS Bucket 作为加速域名的源站 ),具体操作可参见 使用 CDN 加速访问 TOS 资源

    • 已获取 API 访问密钥(AK 和 SK),并确保该密钥具有 CDN 缓存预热(SubmitPreloadTask)、缓存刷新(SubmitRefreshTask)的操作权限。具体操作可参见 Access Key(密钥)管理创建用户并授权

  • 函数服务

    • 已开通火山引擎函数服务。
  • 日志服务

    • 如需使用函数的日志功能,请提前开通火山引擎日志服务。

使用限制

  • 仅支持文件预热或文件刷新任务,暂不支持目录刷新任务。

  • 一个函数仅能执行一种任务类型,无法同时执行文件预热和文件刷新任务。

  • CDN 存在每日刷新/预热配额上限,执行当天如超过当日配额可能导致任务失败。详细内容可参见 刷新配额预热配额

操作步骤

步骤一:使用代码模板创建函数

使用 vefaas-golang-cdn-refresh-preload 代码模板创建函数,并将代码需要获取的 AK 和 SK 等信息配置为环境变量。

  1. 登录 函数服务控制台

  2. 在顶部导航栏,选择目标地域。

  3. 在函数列表页面,单击 创建函数

  4. 在创建函数页面,选择 vefaas-golang-cdn-refresh-preload 模板,单击 下一步:函数配置。

  5. 按要求配置函数的信息。

    alt

    • 基础信息
      配置函数名称和备注信息。

    • 函数代码
      代码模板已提供刷新/预热业务代码,无需配置。

    • 高级配置
      本示例仅配置日志功能和环境变量,其余参数保持默认配置。

    配置项说明
    日志功能启用日志功能,投递至默认日志集。

    环境变量

    需新增以下 4 条环境变量:

    • CloudAPI_AccessKey:输入 API 访问密钥的 AccessKey。

    • CloudAPI_SecretKey:输入 API 访问密钥的 SecretKey。

    • TOS_EVENT_TASK_KIND:输入要执行的任务类型,支持 refresh 文件刷新(默认值) 和 preload 文件预热两种任务类型。

    • BASE_URL_LIST:输入待执行任务的 URL,形如http://cdndomain/。支持添加多个 URL,多个 URL 之间以英文逗号分隔。当 TOS 事件触发后,函数服务会将该列表中的每个 URL 拼接 TOS 文件名,作为最终刷新/预热 URL 提交给 CDN。

    示例:

    • CloudAPI_AccessKey:xxx

    • CloudAPI_SecretKey:xxx

    • BASE_URL_LIST:http://cdndomain1/,http://cdndomain2/,http://cdndomain3/

    • TOS_EVENT_TASK_KIND:refresh

  6. 单击 确定,完成函数创建。

步骤二:发布函数

将函数的当前代码和配置发布至线上。

  1. 在函数详情页面,单击右上角的 发布

  2. 函数版本 使用 Latest,按需填写 版本描述实例数上限 保持默认。

  3. 单击 确定, 函数进入发布中。函数发布成功后如下图所示。

步骤三:配置 TOS 触发器

为当前函数配置 TOS 触发器,设置触发函数的规则。

  1. 切换至触发器页签,单击 创建触发器

  2. 按要求配置触发器信息。更多参数介绍请参见 创建 TOS 触发器

    • 触发器类型:选择 TOS 触发器。
    • 触发器名称:根据界面提示规则自定义触发器名称。
    • TOS Bucket:选择与加速域名绑定的 TOS Bucket。
    • 触发事件:本示例选择 tos:ObjectCreated:Put,通过简单上传对象后触发。
    • 过滤条件:通过设置过滤条件,可精确匹配需要监听的事件所包含的对象范围,有效降低触发频率,减少成本。本示例不设置。
  3. 单击 确定,完成 TOS 触发器创建。

结果验证

  • 控制台验证

    1. 在当前函数的触发器页签下,选择刚才创建的 TOS 触发器,单击 Bucket 名称,跳转至对象存储控制台的对应 Bucket。单击 上传文件,从本地提交一个文件。

    2. 返回函数服务控制台,进入当前函数的资源管理页签。单击 日志,查看函数实例的实时日志,可看到已成功提交刷新/预热任务。

    3. 若启用日志功能,可进入当前函数的 日志 页签。查询当前函数的执行日志,可看到已成功提交刷新/预热任务。

    4. 进入 CDN 控制台的 刷新预热 页面,切换至 操作记录 页签,可查询刷新/预热任务是否执行成功。

  • 业务验证

    • 向已完成刷新任务的 URL 发送 GET 请求,预期首次请求将调用 TOS 源站内容,后续请求将直接调用 CDN 缓存。
    • 向已完成预热任务的 URL 发送 GET 请求,预期首次请求将命中 CDN 缓存。

    说明

    您可通过响应头中的 X-Bdcdn-Cache-Status 字段判断是否命中 CDN 缓存。

    • X-Bdcdn-Cache-Status: TCP_HIT表示命中。
    • X-Bdcdn-Cache-Status: TCP_MISS表示未命中。