版本管理
云函数通过 $LATEST、已发布版本和别名管理代码与流量。部署仅更新 $LATEST。发布版本会生成不可变快照。调用时可指定数字版本号或别名。
概念
| 名称 | 说明 |
|---|---|
$LATEST | 函数创建后自动生成的可编辑版本。部署代码或修改配置均作用于该版本。不可删除,也不包含在已发布版本列表中 |
| 已发布版本 | 从 $LATEST 生成的不可变快照。版本号从 1 开始递增 |
$DEFAULT | 函数创建后自动生成的默认别名,初始指向 $LATEST。未指定版本的调用按该别名的流量策略分发 |
| 别名 | 指向版本的命名指针。支持按比例或按请求头将部分流量分配到另一个版本 |
版本固化的内容
发布版本时,平台保存 $LATEST 的以下代码和配置:
- 代码包与入口(
handler) - 运行时
- 内存规格与超时时间
- 环境变量
- 绑定的层、VPC 等网络配置
已发布版本不可修改。后续对 $LATEST 的更改不影响已发布版本。如需更新线上代码或配置,应发布新版本,并调整调用或流量配置。
发布版本
控制台
- 进入 云函数管理页面。
- 打开目标函数,在“灰度配置”模块单击“发布新版本”。
- 填写版本描述,单击“确认”。
命令行
# 发布当前 $LATEST,描述可选
tcb fn publish-version app "修复登录逻辑"
# 查看已发布版本
tcb fn list-function-versions app
# 删除版本 1
tcb fn delete-version app 1
命令参数见 tcb fn publish-version。
manager-node
await functions.publishVersion({
functionName: "app",
description: "修复登录逻辑",
});
接口说明见 publishVersion。
调用指定版本
qualifier 支持 $LATEST、$DEFAULT、数字版本号和别名。不同调用入口的配置方式如下:
| 调用入口 | 指定方式 |
|---|---|
| 小程序、Web、Node.js SDK、云 API | qualifier 参数 |
| HTTP API | 请求头 X-Qualifier |
| HTTP 网关 | 路由配置的 upstreamResourceVersion |
未传 qualifier 时,请求按 $DEFAULT 别名的流量策略分发。未配置流量策略时,全部请求转发至 $LATEST。
const res = await app.callFunction({
name: "app",
data: { id: 1 },
qualifier: "1", // 调用版本 1
});
流量分配
在别名上配置流量策略,可将请求分配到 $LATEST 或已发布版本。
| 类型 | 说明 |
|---|---|
按比例(FLOW) | 按百分比分配流量 |
按请求头(HEADERS) | 命中规则的请求使用指定版本,其余请求使用默认版本 |
按比例分流支持以下配置:
| 配置方式 | 规则 |
|---|---|
| 单版本 | 剩余流量转发至 $LATEST。指定 $LATEST 时,比例必须为 100 |
| 两个版本 | 两个版本的流量比例之和必须为 100 |
# 版本 2 接收 10% 流量,$LATEST 接收其余 90%
tcb fn config-route app 2 10
# 版本 1 和版本 2 各接收 50% 流量
tcb fn config-route app 1 50 2 50
manager-node 的 updateFunctionAliasConfigV2 支持相同的流量策略,Type 可取 FLOW 或 HEADERS。
灰度步骤、比例建议与回滚操作见 灰度发布。
HTTP 云函数的版本
HTTP 云函数与普通云函数使用相同的版本发布机制。通过 HTTP 网关调用时,路由的 upstreamResourceVersion 字段决定目标版本。
| 取值 | 行为 |
|---|---|
数字版本号(3) | 转发到指定的已发布版本 |
$LATEST | 转发到当前 $LATEST。部署新代码后生效,无需发布版本 |
$DEFAULT | 缺省值。按函数侧的别名流量策略分发 |
路由不支持直接配置流量权重。需要灰度发布时,将该字段设为 $DEFAULT,并在函数别名上配置流量策略。
# 创建独立路由,将请求转发到版本 3
tcb routes add -e <envId> --data '{"domain":"api.example.com","routes":[{"path":"/func-canary","upstreamResourceType":"SCF","upstreamResourceName":"app","upstreamResourceVersion":"3"}]}'
字段说明见 转发版本。
与预置并发、触发器的关系
- 预置并发:仅支持已发布版本,
$LATEST不支持。配置后需等待实例全部就绪,再逐步切换流量。预置容量内的请求可避免冷启动。详见 预置并发。 - 触发器:与函数版本独立绑定。发布新版本不会改变已有触发器的目标版本。需要在新版本上重新配置绑定到具体版本的触发器。
限制
| 项目 | 限制 |
|---|---|
| 版本数量 | 单个函数默认最多 1000 个版本,见 云函数配额限制 |
| 版本修改 | 已发布版本的代码和配置不可修改 |
$LATEST | 不可删除,不能配置预置并发 |
| 流量分配 | 一次按比例分流最多涉及两个版本 |
常见操作
| 场景 | 操作 |
|---|---|
| 发布新版本 | 部署代码到 $LATEST,发布版本,然后配置流量 |
| 回滚 | 将别名流量切回稳定版本,无需重新部署 |
| 固定生产版本 | 将触发器或 HTTP 路由绑定到数字版本号 |