HTTP 云函数路由
基于 @cloudbase/functions-framework 框架可以将一个大函数拆分成多个子函数,并通过请求路径将不同的请求路由到不同的处理函数
为什么需要函数路由
传统的云函数开发模式中,每个函数都需要独立部署和运行,这会带来以下问题:
- 资源浪费:每个函数独占一个实例,即使请求量很小也需要保持运行
- 冷启动频繁:多个函数意味着更多的冷启动次数
- 部署复杂:需要分别部署和管理多个函数
- 成本较高:更多的实例数量带来更高的资源成本
使用函数路由可以解决这些问题:
- 资源共享:多个函数共享同一实例,充分利用计算资源
- 降低成本:减少实例数量,降低冷启动次数
- 简化部署:一次部署多个函数,统一管理
- 提升性能:共享内存和连接池等资源,提高响应速度
前置条件
使用函数路由功能需要安装 @cloudbase/functions-framework 依赖:
npm install @cloudbase/functions-framework
该框架提供了函数加载、路由分发、请求处理等核心能力。
快速开始
第一步:创建项目结构
创建一个支持多函数的项目目录:
my-functions/
├── package.json # 项目配置
├── scf_bootstrap # 启动脚本
├── cloudbase-functions.json # 函数路由配置(关键)
├── index.js # 默认函数入口
├── user/ # user 函数目录
│ └── index.js
└── order/ # order 函数目录
└── index.js
第二步:创建函数代码
默认函数(index.js):
exports.main = function (event, context) {
return {
message: 'Hello from default function',
path: context.httpContext.url,
};
};
user 函数(user/index.js):
exports.main = function (event, context) {
return {
message: 'User API',
path: context.httpContext.url,
method: context.httpContext.httpMethod,
};
};
order 函数(order/index.js):
exports.main = function (event, context) {
return {
message: 'Order API',
path: context.httpContext.url,
};
};
第三步:配置函数路由
创建 cloudbase-functions.json 配置文件:
{
"functionsRoot": ".",
"functions": [
{
"name": "default",
"directory": "."
},
{
"name": "user",
"directory": "user",
"triggerPath": "/api/user" // triggerPath 是 routes 的简化写法,可以直接在函数定义中指定触发路径
},
{
"name": "order",
"directory": "order",
"triggerPath": "/api/order"
}
],
"routes": [
{
"functionName": "echo",
"path": "/echo"
}
]
}