跳到主要内容

版本管理

云函数通过 $LATEST、已发布版本和别名管理代码与流量。部署仅更新 $LATEST。发布版本会生成不可变快照。调用时可指定数字版本号或别名。

概念​

名称说明
$LATEST函数创建后自动生成的可编辑版本。部署代码或修改配置均作用于该版本。不可删除,也不包含在已发布版本列表中
已发布版本从 $LATEST 生成的不可变快照。版本号从 1 开始递增
$DEFAULT函数创建后自动生成的默认别名,初始指向 $LATEST。未指定版本的调用按该别名的流量策略分发
别名指向版本的命名指针。支持按比例或按请求头将部分流量分配到另一个版本

版本固化的内容​

发布版本时,平台保存 $LATEST 的以下代码和配置:

  • 代码包与入口(handler)
  • 运行时
  • 内存规格与超时时间
  • 环境变量
  • 绑定的层、VPC 等网络配置

已发布版本不可修改。后续对 $LATEST 的更改不影响已发布版本。如需更新线上代码或配置,应发布新版本,并调整调用或流量配置。

发布版本​

控制台​

  1. 进入 云函数管理页面。
  2. 打开目标函数,在“灰度配置”模块单击“发布新版本”。
  3. 填写版本描述,单击“确认”。

命令行​

# 发布当前 $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、云 APIqualifier 参数
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 路由绑定到数字版本号