
摘要: 云开发 CloudBase 云函数支持 Node.js、Python、Java、Go、PHP,分普通云函数与 HTTP 云函数两类,可由 SDK 调用、HTTP 请求或定时触发,最大并发 1000。 开通环境写云函数:云开发 CloudBase
很多人用云开发只把云函数当成「藏密钥的地方」,调一次就完事,其实它的能力边界比这宽得多:可以当 Web 服务跑 Express 和 Flask,可以定时自动执行,可以支持 WebSocket 和 SSE 长连接。搞清楚两种函数类型和三种触发方式的区别,很多原本要买服务器才能做的事,云函数就能覆盖。
云函数分两类,选错类型会多绕很多弯路:
维度 | 普通云函数 | HTTP 云函数 |
|---|---|---|
定位 | 处理结构化业务逻辑 | 完整的 Web 服务能力 |
典型用途 | API 接口、数据处理、支付回调 | Web 应用、文件上传、对外接口 |
怎么调 | 客户端 SDK 调用 | HTTP 请求 |
入口形式 | 一个 main 函数 | 完整的 Web 框架(Express、Flask 等) |
路由 | 没有路由概念 | 支持多路由 |
判断方法很简单:只被你自己的小程序或网页调用,用普通云函数;需要对外提供 URL、需要别的系统调用、需要多个接口路径,用 HTTP 云函数。
支持语言:Node.js、Python、Java、Go、PHP。不是只有 Node,用 Python 做数据处理、用 Go 做高性能接口都可以。
运行特性有四条要记住,它们决定了你能写什么样的代码:
隔离性:每个函数运行在独立的容器环境。
无状态:函数实例之间不共享状态。这意味着你不能用全局变量存数据——这次请求设置的变量,下次请求可能读不到(因为可能是另一个实例在跑)。需要共享的数据存数据库。
临时性:实例在执行完成后自动回收。不要指望在函数里起一个常驻的定时器或后台任务。
弹性:根据负载自动创建和销毁实例,最大并发 1000。流量上来会自动扩,没流量时不产生计算费用。
触发方式 | 说明 | 典型场景 |
|---|---|---|
SDK 调用 | 客户端 SDK 直接调用 | 小程序、Web 应用的业务请求 |
HTTP 请求 | 通过 HTTP API 调用 | 第三方系统集成、Webhook 接收 |
定时触发 | 按时间规则自动执行 | 数据统计、系统维护、定时提醒 |
第三种最容易被忽略,但用途很广,下面单独讲。
定时触发是云函数里性价比很高的能力——过去跑一个每日统计要维护一台服务器和 crontab,现在配一条规则就行。
典型用途:
每日数据统计。凌晨跑一次,统计昨天的订单量、新增用户、活跃数据,结果写进统计表,第二天看板直接读结果,不用实时计算。
定时提醒。活动前一天给报名用户发通知、会员到期前三天提醒续费。
数据清理。定期删除过期的临时数据、清理未支付超时的订单。
状态流转。把到了开始时间的活动自动置为「进行中」,把过期未支付的订单自动置为「已取消」。
写定时任务要注意两点:一是要考虑重复执行的情况,加幂等判断,避免同一天统计两次;二是单次执行有时间限制,数据量大的任务要分批处理,不要一次拉全表。
HTTP 云函数的价值在于你可以把熟悉的 Web 框架直接部署上去,不用重写成 Serverless 的写法。官方给了这些框架的部署示例:
语言 | 可部署的框架 |
|---|---|
Node.js | Express、Next.js、NestJS |
Python | Flask、Django、FastAPI |
Java | Spring Boot |
Go | Gin |
这意味着两类场景变得很简单:已有后端项目要上云,把项目改造成 HTTP 云函数部署即可,不用买服务器配环境;团队有技术栈偏好,Python 团队用 Flask、Java 团队用 Spring Boot,不必为了上云换语言。
HTTP 云函数还支持 WebSocket 协议和 SSE 协议,做实时推送、AI 流式输出这类需求用得上。
云函数不是孤立的,它和云开发其他能力是打通的:
调用云开发资源:数据库、云存储、身份认证都能在云函数里直接用,不需要额外鉴权。这是云函数最常见的用法——前端不直接碰数据库,所有读写都经过云函数。
调用 MySQL 数据库:需要关系型数据库时,可以在云函数里连 MySQL。
内网调用腾讯云其他资源:和腾讯云其他产品打通。
调用第三方接口:发短信、调支付、请求外部 API,都在云函数里做。密钥存在云函数的环境变量里,不会暴露给前端。
该用的四类情况:
一是前端不能暴露的逻辑:价格计算、库存扣减、权限判断、密钥使用。
二是需要可信身份的操作:涉及金额、权益、用户数据写入,必须在云函数里取身份,不能信前端传值。
三是定时与异步任务:统计、清理、提醒。
四是对接第三方:支付、短信、大模型、外部 API。
不该用的两类情况:
长时间运行的任务。云函数是临时实例,执行完就回收,不适合跑几小时的任务。这类需求用云托管。
需要常驻状态的服务。因为无状态特性,不能在函数里维护长期连接池或内存缓存。有这类需求同样考虑云托管。
云函数跑在云端,看不到控制台输出,日志是唯一的排查手段。
写代码时就该加日志。在关键节点打日志:函数入口的参数、重要判断的分支、数据库操作的结果、异常的完整信息。开发时跟 AI 说一句「在关键节点加上调试日志」就行。
出问题时去哪看:云开发控制台找到对应云函数,点日志,能看到执行记录和报错堆栈。控制台还提供监控,能看调用次数、执行时长、错误率。
让 AI 帮你排查的说法,官方推荐这句:
云函数代码运行不符合需求,需求是 xxx,请查看日志和数据进行调试,并进行修复配好 MCP 的 AI 可以直接读取云函数日志,不用你手动复制粘贴。
全局变量的值不对。函数实例无状态且会回收,不能用全局变量存业务数据。需要持久化的存数据库。
定时任务执行了两次。加幂等判断:执行前先查今天是否已经跑过,跑过就跳过。
调用第三方接口超时。云函数有执行时长限制,外部接口慢的话要设置合理的超时时间并做好失败处理,不要让函数一直等。
本地能跑云端报错。多半是依赖没装全或环境差异。确认 package.json 里的依赖完整,并检查用到的 Node 版本特性云端是否支持。
写一个定时统计任务:
用云开发写一个定时云函数,每天凌晨 2 点执行:
1. 统计前一天 orders 集合里 status 为 paid 的订单数量和总金额
2. 结果写入 daily_stats 集合,字段:date、orderCount、totalAmount、createTime
3. 执行前先查 daily_stats 里这一天的记录是否已存在,存在则跳过(幂等)
4. 数据量大时分批查询,每批 100 条
5. 在查询、统计、写入三个节点加调试日志
配置定时触发器为每天 02:00 执行。把现有后端部署上去:
我有一个 Express 项目,帮我改造成 HTTP 云函数并部署到云开发。
要求:保留现有路由结构,把数据库连接改为云开发数据库,
密钥配置改用云函数环境变量,部署后给我访问地址。云开发 CloudBase 云函数的能力边界比大多数人用到的宽:支持 Node.js、Python、Java、Go、PHP 五种语言,分普通云函数(SDK 调用、处理业务逻辑)和 HTTP 云函数(对外提供 Web 服务、可部署 Express / Flask / Spring Boot 等框架)两类,支持 SDK、HTTP、定时三种触发方式,最大并发 1000。用它的判断标准是:前端不能暴露的逻辑、需要可信身份的操作、定时异步任务、对接第三方——这四类都该放云函数;长时间运行和需要常驻状态的,用云托管。调试靠日志,写代码时就把日志加上。
开通环境,把业务逻辑放进云函数:云开发 CloudBase 购买页
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。