问题场景
背景:现在很多公司使用对象存储服务来存储静态文件/图片等,充分利用云上功能实现数据处理(数据万象),如COS的缩放/裁剪等功能;同时通过CDN的加速能力,提升访问质量。
问题:文件删除,可能来自第三方的投诉;可能来自违规;可能来自公司本身业务需要等等;COS文件删除,CDN需要刷新缓存;如果用了数据处理能力,比如万象,可能会产生同一个key,数个URL,都需要刷新缓存。
解决:
单key-单path场景,如key为/aaa/bbb.jpg,删除的缓存也只有/aaa/bbb.jpg的场景,目前已提供函数计算功能自动刷新的功能;
单key-带有参数或者样式场景,如key为/aaa/bbb.jpg,删除的缓存URL可能是/aaa/bbb.jpg,也可能是/aaa/bbb.jpg?aaaa=1233&a=b,也可能是/aaa/bbb.jpg/yangshi,目前函数计算还未覆盖此场景,需要通过COS的实时日志即CLS日志服务来自动实现刷新功能,同时支持第一种场景的覆盖。
架构拓扑
实现过程
前提条件:
- 先开通对应cos bucket的日志检索功能
- 获取对应的日志集和日志主题信息
- 获取账号API密钥信息
- 获取CLS对应不同地域的公网域名信息
可用地域链接
创建函数服务
基础配置和函数代码:
- 创建方式:选择"自定义创建"
- 函数名字:自定义即可,比如refresh_cdn_cache
- 地域:需要和cos bucket同地域
- 运行环境:选择"python3.6"
- 函数代码:选择"本地上传zip包"
本地zip包请使用本文附件:
高级配置-环境配置:
代码语言:javascript复制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批量删除文件,会触发多个文件的删除事件;
- 本文只是针对一个场景的问题解决,更多基于日志的玩法欢迎交流。