用华为云 FunctionGraph 搭建你的第一个 Serverless 定时任务

举报
yd_286050264 发表于 2026/11/03 02:59:34 2026/11/03
【摘要】 不想租服务器、不想装环境、不想管运维,却需要一个每天定时跑的小脚本?华为云 FunctionGraph 让你只写函数体,其余的交给云。本文用一个"每日自动查询 OBS 桶容量并告警"的真实场景,带你 10 分钟搭起一个 Serverless 定时任务——从函数创建、触发器配置到一次真实调用,全程不碰一台 ECS。

为什么是 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. 冷启动延迟。第一次调用或长时间没调用后的第一次,会有 1-2 秒的冷启动。对定时任务无所谓,但如果对延迟敏感的场景要心里有数。
  2. 执行超时。默认超时 3 秒,如果你的逻辑涉及网络请求,记得在配置里调大,最大可以到 900 秒。
  3. 日志在哪儿看。函数的运行日志在"函数管理 → 监控 → 日志"里,不是在 CTS 或 LTS 里找,一开始我找了好一会儿。

小结

FunctionGraph 的定位不是替代你的微服务框架,而是处理那些"太小不值得开机器、但又确实需要自动跑"的零碎任务。定时巡检、日志清理、日报生成、轻量 ETL——这些场景用起来特别顺手。

写一个函数,配一个触发器,收工。这就是 Serverless 该有的样子。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。