FunctionGraph 部署第一个无服务器函数:从创建到 HTTP 触发验证
很多第一次接触无服务器(Serverless)的开发者,都会问同一个问题:不用买服务器,代码到底跑在哪里?华为云 FunctionGraph(函数工作流)就是答案——你只写函数、配触发器,平台负责运行、扩缩容和运维。本文用一个最简单的 HTTP 触发函数,带你从创建走到验证,十分钟就能跑通第一步。
一、FunctionGraph 适合做什么
先判断场景,别为了用而用。FunctionGraph 适合以下几类任务:
- 轻量 API 与 Webhook:接收请求、做校验和转发,例如表单提交、小程序后端接口、第三方回调接收。
- 定时任务:每天定时清理临时文件、汇总前一天数据、发送日报,替代一台长期开机的定时服务器。
- 事件驱动处理:对象存储(OBS)有新文件上传时自动触发处理、写数据库;消息队列有新消息时自动消费。
- 胶水代码:把两个服务串起来,例如收到告警后调用企业微信机器人发通知,逻辑只有几十行。
不适合的场景也要知道:长时间运行的任务(例如单次执行几十分钟的批量计算)、需要常驻内存做大量缓存的服务、强依赖本地磁盘状态的程序,用函数并不划算,优先考虑容器或云服务器。
二、开始前准备
- 一个已实名认证的华为云账号,并开通 FunctionGraph 服务。
- 明确你要部署的区域:函数、触发器和要访问的其他云服务,尽量放在同一个区域,避免跨区域调用带来的延迟和网络打通成本。
- 准备好函数代码。本文示例用 Node.js,逻辑只有一个:收到 HTTP 请求后返回一句问候和请求时间,方便验证链路是否通。
三、第一步:创建函数
创建空白函数
登录华为云控制台,进入 FunctionGraph,点击“创建函数”,选择“创建空白函数”,不要一开始就选复杂模板,先把链路跑通。
填写基本信息
函数名称例如 hello-first-function,运行时选择 Node.js(以控制台当时提供的版本为准),内存选最小档即可,超时时间先设为 30 秒。入口函数保持默认,例如 index.handler,表示 index.js 文件里的 handler 函数。
写入函数代码
在在线编辑器里写入以下代码:
exports.handler = async (event, context) => {
const body = {
message: 'Hello from FunctionGraph!',
timeUtc: new Date().toISOString()
};
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
};
};
部署并测试
点击“部署”。部署成功后,先不要急着配触发器,用控制台的“测试”功能跑一次:构造一个空的测试事件,点击测试,能看到返回的 JSON,就说明函数本身没有语法和依赖问题。
四、第二步:创建 HTTP 触发器并验证
函数能跑,不等于能从浏览器访问。HTTP 触发需要再做一步。
创建 APIG 触发器
在函数详情页进入“触发器”,点击“创建触发器”,触发器类型选择 APIG(API 网关)触发器。按提示创建一个新的 API 分组和 API:请求方法选 GET,路径例如 /hello,后端指向这个函数,鉴权方式先选“无鉴权”,仅用于学习验证。
浏览器验证
创建完成后,控制台会给出一个可访问的 URL。把 URL 复制到浏览器打开,能看到 {"message": "Hello from FunctionGraph!"},就说明整条链路通了:浏览器 → API 网关 → FunctionGraph → 返回结果。
用 curl 再验证一次
curl -i "https://你的APIG域名/hello"
返回 200 且 body 正确,即为通过。验证完后,记得把测试用的无鉴权 API 改成需要鉴权,或直接删除,避免对外暴露。
五、三个最常见的坑
1. 冷启动导致第一次访问慢
函数长时间没人访问,平台会回收实例,下一次请求要重新初始化,首包延迟明显变大。这是 Serverless 的正常特性,不是故障。对延迟敏感的接口,可以用预留实例或定时保温;对定时任务和异步处理,冷启动通常可以接受。
2. 超时时间设得太短
函数默认超时往往只有几秒,第一次调用下游服务或加载依赖时很容易超时。先把超时设到 30 秒,跑通后再根据实际耗时收紧,而不是一开始就设 3 秒反复试错。
3. 日志不知道去哪里看
函数执行失败时,不要只看浏览器返回的 502。去函数详情页的日志里看完整的报错堆栈,绝大多数问题(例如依赖缺失、环境变量没配、权限不足)都能在日志第一行找到答案。排查顺序建议:先看日志,再看触发器配置,最后才怀疑平台。
六、费用与清理:用完要知道花了多少
FunctionGraph 按实际调用次数和运行时间计费,不调用就不产生计算费用;API 网关和日志服务可能有各自的费用,请以控制台账单为准。学习验证完成后,建议做两件事:删除测试用的无鉴权 API,或把函数和触发器一起删除,避免后续被意外调用产生费用。
七、总结与下一步
跑通这一个函数,你就掌握了 Serverless 的最小闭环:写函数 → 部署 → 配触发器 → 验证。下一步可以顺着这个闭环扩展:把返回写死的内容换成读数据库、把 GET 换成 POST 接收 JSON、把定时触发器加上做每天一次的汇总任务。每一步都只改一个地方,出了问题也只查一个地方,这就是新手最稳的学习节奏。
- 点赞
- 收藏
- 关注作者
评论(0)