问题场景
- 背景:现在很多公司使用对象存储服务来存储静态文件/图片等,充分利用云上功能实现数据处理(数据万象),如COS的缩放/裁剪等功能;同时通过CDN的加速能力,提升访问质量。
- 问题:文件删除,可能来自第三方的投诉;可能来自违规;可能来自公司本身业务需要等等;COS文件删除,CDN需要刷新缓存;如果用了数据处理能力,比如万象,可能会产生同一个key,数个URL,都需要刷新缓存。
- 解决:针对单COS文件删除,及时刷新CDN缓存的问题,目前已提供函数计算功能自动刷新的功能;但针对万象场景,目前函数计算还未覆盖此场景,需要通过COS的实时日志即CLS日志服务来自动实现刷新功能,同时支持第一种场景的覆盖。
架构拓扑
实现过程
前提条件:
- 先开通对应cos bucket的日志检索功能
- 获取对应的日志集和日志主题信息
- 获取账号API密钥信息
- 获取CLS对应不同地域的公网域名信息
创建函数服务
基础配置和函数代码:
- 创建方式:选择"自定义创建"
- 函数名字:自定义即可,比如refresh_cdn_cache
- 地域:需要和cos bucket同地域
- 运行环境:选择"python3.6"
- 函数代码:选择"本地上传zip包"
本地zip包请使用本文附件:
高级配置-环境配置:
cls_day_num=7 # 检索日志的周期 cls_domain=ap-shanghai.cls.tencentcs.com # 对应区域cls日志服务的公网域名 cos_bucket_name=tinkerli-cls-1251956900 # 对应的cos bucket的名字 hosts=cls-cos.xxxxxxx.cn # 对应需要清楚缓存的CDN域名,支持多个,以';'分割 logset_id=49fc1a43-a340-49c8-91be-fcb4abd106a4 # 对应的日志集id secret_id=AxxxxD7nxxxxxxxxxxLDsiN7B8p # 对应API密钥id secret_key=d1AHFJDtdDLjxxxxxxxx # 对应API密钥key topic_ids=0b82160f-9c46-4b95-a668-63874b5cf37f # 对应的日志主题id
触发器配置:
- 触发方式:选择COS触发
- 事件类型:选择删除文件
功能验证
COS 文件删除:
- 批量删除和单文件删除均可,比如通过cos的控制台批量删除
查看SCF运行日志:
- 可以看到批量删除3个文件,触发了三次云函数调用,均成功。
验证CDN刷结果:
- 到CDN的控制台-查看刷新结果
可以看到各URL均刷新成功,无论带样式的还是拼接URL的
补充说明
- 腾讯云日志服务已逐步支持腾讯云各种云产品日志接入,如CLB,CDN,COS,TKE等等均已支持;
- COS批量删除文件,会触发多个文件的删除事件;
- 本文只是针对一个场景的问题解决,更多基于日志的玩法欢迎交流。