十分钟上手:用华为云 FunctionGraph 定时触发器做一个自动清理过期文件的 Serverless 任务
做过上线项目的人都遇到过同一个麻烦:日志文件、临时上传、缓存快照越攒越多,对象存储的账单跟着悄悄上涨。人工清理又费时,还容易误删。把这件事交给 Serverless 定时任务,一次写好就不用再管。
思路很简单:FunctionGraph 函数 + 定时触发器 + 对象存储 SDK。每天凌晨,函数扫描指定桶里某个前缀下的对象,把超过保留天数的删掉。没有服务器要维护,空闲时不产生费用,失败了还能看日志定位原因。
第一步,创建函数。进入函数工作流控制台,新建 Python 3.10 的空白函数,把桶名、对象前缀、保留天数写进环境变量,不要写死在代码里,比如 BUCKET、PREFIX、EXPIRE_DAYS=30。这样换桶、改策略都不用改代码。
第二步,写清理逻辑。核心就三件事:分页列出对象、按最后修改时间判断是否过期、批量删除。先加一个 DRY_RUN 开关演练一遍,只打印将要删除的文件名,确认无误再真正删除。
import os
from datetime import datetime, timedelta, timezone
def handler(event, context):
expire = datetime.now(timezone.utc) - timedelta(
days=int(os.environ.get("EXPIRE_DAYS", "30")))
# 分页列出 PREFIX 下的对象
for obj in list_objects(os.environ["BUCKET"], os.environ["PREFIX"]):
if obj["last_modified"] < expire:
print("delete:", obj["key"])
# delete_object(obj["key"]) # 演练通过后再放开
return {"deleted": "done"}
第三步,配定时触发器。给函数加一个定时触发器,用 Cron 表达式每天凌晨两点跑一次,例如 0 0 2 * * ?。先手动触发一次,在日志里确认列出和删除的动作都正常,再交给它自动跑。
第四步,做好权限和安全。给函数配置最小权限的委托,只允许操作指定的桶;访问密钥不要写进代码,放到环境变量或凭据里;每次删除前写一条审计日志,方便事后核对。
最后是成本和避坑。每天跑一次的短任务,按调用次数和运行时长计费,量级非常小。要注意三点:前缀千万别写错,更不要对整个桶做通配删除;先在小桶里验证;保留天数宁可先设长一点,再慢慢收紧。
把“每天记得清理”变成“写一次就不用管”,是 Serverless 最适合做的事。日志归档、临时文件、缓存清理这类脏活累活,都可以照这个思路做一个定时小任务。
- 点赞
- 收藏
- 关注作者
评论(0)