华为云 FunctionGraph 定时触发器实战:十分钟搭建零运维的定时巡检任务
一、为什么需要定时任务
很多运维和开发工作都是周期性的:每天凌晨清理过期日志、每小时检查一次服务健康状态、每周一早上汇总上周数据。如果为此单独维护一台服务器,不仅要操心系统补丁和进程保活,还要为大部分时间都在空闲的机器付费。用函数计算 FunctionGraph 搭配定时触发器,可以把这些工作改写成一个按需执行的小函数:到点自动运行,跑完即释放资源,无需运维服务器。
二、方案思路
FunctionGraph 的定时触发器基于 Cron 表达式工作,支持按分钟、小时、天、周等粒度触发。整体链路很简单:
- 编写一个函数,封装要做的巡检逻辑,例如调用接口检查服务状态、扫描过期数据并记录结果;
- 创建定时触发器,给函数传入 Cron 表达式,如每天 08:00 执行;
- 函数执行产生的日志和调用记录,可以在控制台的日志与监控页面查看,出现异常时按需接入告警。
三、创建函数与定时触发器
在华为云控制台进入函数计算服务,新建函数,选择 Python 运行时与空白模板,填写函数名称后进入代码编辑页。核心逻辑建议控制在一次调用 1 分钟内完成;需要访问其他云服务的场景,请为函数配置具备最小权限的委托。
在函数详情页的“触发器”页签中创建定时触发器:触发器类型选择“定时触发器”,触发规则选择 Cron 表达式,例如 0 0 8 * * ? 表示每天 08:00 触发,输入函数入参后保存即可生效。保存后可以在触发器列表中看到下一次触发时间。
四、示例代码
下面是一段 Python 示例:检查一组服务地址的可达状态,并把结果打印到日志中。
import json
import urllib.request
def handler(event, context):
targets = ["https://example.com/health"]
results = {}
for url in targets:
try:
with urllib.request.urlopen(url, timeout=5) as resp:
results[url] = resp.status
except Exception as e:
results[url] = "异常: " + str(e)
print(json.dumps(results, ensure_ascii=False))
return {"statusCode": 200, "body": json.dumps(results, ensure_ascii=False)}
实际使用时,把目标地址换成自己的服务接口;如果检查失败需要通知到人,可以在函数中调用消息通知服务 SMN 发送短信或邮件。
五、调试与注意事项
- 先在控制台用测试事件手动触发一次,确认函数逻辑和返回结果正确,再开启定时触发器。
- Cron 表达式的时区需要确认,避免“以为是北京时间,实际按 UTC 执行”的偏差。
- 定时触发器可以设置启用或停用,临时不需要执行时先停用,而不是删除重建。
- 如果函数单次执行时间较长,应适当调大超时时间并做好幂等处理,避免重复触发造成重复操作。
- 定时任务适合周期性、轻量、可重试的工作;耗时较长或需要持久状态的流程,建议拆分成多次执行或改用其他服务。
六、总结
FunctionGraph 定时触发器把“周期性跑一个脚本”这件事变成云上的一项配置:写好函数、配好 Cron、打开触发器,定时巡检就开始自动运转。对于个人开发者和小团队来说,这是一种成本低、实现快、几乎零运维的定时任务方案,值得在日常开发中优先尝试。
- 点赞
- 收藏
- 关注作者
评论(0)