用华为云 FunctionGraph 搭建你的第一个 Serverless 定时任务
为什么是 FunctionGraph
我有一个很小的需求:每天早上 9 点查一下 OBS 桶的存储用量,超过 80% 就给自己发个通知。
这个需求小到开一台 ECS 跑 crontab 显得浪费,但又不小到可以忽略——毕竟存储费用是实打实的。FunctionGraph 正好卡在这个甜区:按调用次数计费,不跑不花钱,跑了也花不了几分钱。
它的工作方式很简单:你写一段代码(Python、Node.js 都行),上传到云上,配一个定时触发器,剩下的事情——扩缩容、日志、重试——华为云全包了。
三步搭好
第一步:写函数
核心逻辑其实就十几行 Python:
import json
from obs import ObsClient
def handler(event, context):
ak = context.getAccessKey()
sk = context.getSecretKey()
obs = ObsClient(access_key_id=ak, secret_access_key=sk, server='https://obs.cn-north-4.myhuaweicloud.com';)
resp = obs.getBucketStorageInfo('my-bucket')
used = resp.body.size
# 假设桶上限 100GB,超过 80% 告警
if used > 80 * 1024**3:
return {'status': 'warning', 'used_gb': round(used / 1024**3, 2)}
return {'status': 'ok', 'used_gb': round(used / 1024**3, 2)}
注意这里没有 if __name__ == '__main__',没有 pip install,也没有任何服务器配置——你只关心业务逻辑本身。AK/SK 通过 context 注入,不用硬编码进代码里。
第二步:配触发器
函数创建好之后,加一个 TIMER 触发器,Cron 表达式写 0 9 * * ?——每天 9 点触发一次。FunctionGraph 的定时触发器用的是 Quartz Cron 语法,和 Linux 的 crontab 略有不同(最后一位是周几而不是年),第一次配的时候留意一下就行。
第三步:跑一次看看
手动点一下"测试",几秒后就能在日志里看到返回结果。如果一切正常,这个任务从此就在云上自己跑了,你什么都不用管。
几个踩过的坑
- 冷启动延迟。第一次调用或长时间没调用后的第一次,会有 1-2 秒的冷启动。对定时任务无所谓,但如果对延迟敏感的场景要心里有数。
- 执行超时。默认超时 3 秒,如果你的逻辑涉及网络请求,记得在配置里调大,最大可以到 900 秒。
- 日志在哪儿看。函数的运行日志在"函数管理 → 监控 → 日志"里,不是在 CTS 或 LTS 里找,一开始我找了好一会儿。
小结
FunctionGraph 的定位不是替代你的微服务框架,而是处理那些"太小不值得开机器、但又确实需要自动跑"的零碎任务。定时巡检、日志清理、日报生成、轻量 ETL——这些场景用起来特别顺手。
写一个函数,配一个触发器,收工。这就是 Serverless 该有的样子。
- 点赞
- 收藏
- 关注作者
评论(0)