tencent cloud

云函数

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
相关概念
工作原理
产品优势
应用场景
相关产品
购买指南
计费概述
计费方式
计费项与计费方式
函数算力支持
免费额度
产品定价
计费示例
欠费与停服说明
快速入门
使用控制台创建一个事件函数
操作指南
配额管理
函数管理
Web 函数管理
日志管理
并发管理
触发器管理
函数 URL
自定义域名
版本管理
别名管理
权限管理
运行实例管理
插件管理
监控与告警管理
网络配置
层管理
执行配置
扩展存储管理
DNS 缓存配置
资源托管模式管理
近离线资源托管模式
工作流
触发器
触发器概述
触发器事件消息结构汇总
API 网关触发器
COS 触发器
CLS 触发器
定时触发器
CKafka 触发器
Apache Kafka 触发器
MQTT 触发器
触发器配置描述
MPS 触发器
CLB 触发器说明
云 API 触发器
开发指南
基本概念
测试云函数
环境变量
依赖安装
使用容器镜像
使用 Docker 安装依赖
错误类型与重试策略
死信队列
云函数接入数据库
自动化部署
云函数状态码
常见错误码解决方法
开发者工具
Serverless Web IDE
函数间调用 SDK
第三方工具
代码开发
Python
Node.js
Golang
PHP
Java
Custom Runtime
使用镜像部署函数
Web 框架部署
通过命令行完成框架部署
快速部署 Egg 框架
快速部署 Express 框架
快速部署 Flask 框架
快速部署 Koa 框架
快速部署 Laravel 框架
快速部署 Nestjs 框架
快速部署 Nextjs 框架
快速部署 Nuxtjs 框架
快速部署 Django 框架
实践教程
最佳实践概述
云产品联合解决方案
业务开发相关实践
实时音视频 TRTC
对象存储 COS
消息队列 CKafka
日志服务CLS
负载均衡 CLB
视频处理 MPS
内容分发网络 CDN
云数据仓库 PostgreSQL
云点播 VOD
短信 SMS
Elasticsearch Service
定时任务
视频处理
客户案例
腾讯在线教育
在线教育行业案例
游戏聊天系统
腾讯互娱国际(IEGG)
API 文档
History
Introduction
API Category
Making API Requests
Other APIs
Namespace APIs
Layer Management APIs
Async Event Management APIs
Trigger APIs
Function APIs
函数和层的状态说明
Data Types
Error Codes
SDK文档
常见问题
通用问题
Web 函数相关问题
计费相关问题
网络相关问题
日志相关问题
SCF 工具相关问题
事件处理相关问题
API 网关触发器相关问题
相关协议
Service Level Agreement
联系我们
词汇表
文档云函数操作指南别名管理使用别名实现 SCF 灰度发布

使用别名实现 SCF 灰度发布

PDF
聚焦模式
字号
最后更新时间: 2024-04-19 15:48:17

概述

使用云函数(Serverless Cloud Function,SCF)的别名可以实现云函数的灰度发布方案,其优势如下:
支持用户在多版本间按需分配流量,无需在外部或各触发器位置频繁修改设置。
支持流量平滑分配,避免流量漏发。
通过相同的流量切换方案,可以在故障时进行版本快速回退。
方案示意图如下所示:
介绍图-中


名词解释

函数、云函数(Function)

用户创建的云函数。

版本(Version)

云函数版本包含代码及函数配置信息,由具体的数字版本号指明,您可通过发布操作生成具体版本及版本号。仅支持修改最近版本的代码及配置,但任何版本都可被调用。更多云函数版本信息,请参见 版本管理概述

最近版本($LATEST)

可修改代码及配置的版本。创建函数后默认具有最近版本,进行发布时需使用最近版本发布带有数字版本号的具体版本。

别名(Alias)

别名名称可自定义,需使用英文字母开头的字符串指定。别名是可配置指向具体某一个或两个版本的引用。当指向两个版本时,可针对两个版本设置百分比流量。任何别名均可以被调用。

默认流量、默认别名($DEFAULT)

特殊别名,当调用请求未指定任何版本或其他别名时,缺省使用默认别名。默认别名缺省指向最近版本,支持修改版本指向。

方案示例

基于 API 网关触发器的使用示例

背景

用户已 创建云函数,且未发布新版本及创建别名。
用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。 总体方案示意图如下:
API网关-中


初始配置过程

1. 创建别名: 在云函数 B 中创建别名 release、prepub,可暂时指向 $LATEST 版本。 2. 创建 API 网关: 在 API 网关中创建服务 A,配置 API 指向函数 B 的别名 release,并发布到 API 服务的 release stage 中。如何创建并发布 API 请参见 API 创建API 发布3. 修改 API 配置: a. 指向函数 B 的别名 prepub,并发布到 API 服务的 prepub stage 中。 b. 指向函数 B 的默认流量,并发布到 API 服务的 dev stage 中。
至此已分离测试环境、预发布环境和发布环境,但三个环境均指向 $LATEST 版本。API 网关的配置已完成,后续无需再次修改及发布 API 网关配置。

开发测试发布过程:持续开发、测试、发布、上线

1. 发布版本: 在云函数上持续开发并依次发布版本1、2、3、4。假设版本1已在发布环境,版本2在预发布环境测试,版本3和版本4在测试环境测试。 2. 开发需要测试的最近版本: 配置 $DEFAULT 别名指向 $LATEST 版本,开发人员可基于此版本持续地进行开发,开发完成后可以发布版本。 3. 预发布环境测试: 假设版本3可进入预发布环境时,配置函数 B 的 prepub 别名指向版本3,即可在预发环境进行测试和体验。 4. 预发布环境按用户灰度: 假设版本4可进入预发布环境,需要将用户 Bob 的调用路由至函数 B 的版本4,将其他用户路由至版本3,将函数 B 的 prepub 别名配置为按规则路由,内容为 invoke.headers.User exact Bob。如何按规则路由,请参见 按规则路由5. 预发布环境至发布环境灰度发布: 假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,并在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置6. 发布过程中持续监控: 通过监控及日志查看灰度过程,版本2的流量是否正常上涨,版本1的流量是否正常下降,监控发布过程中的各版本错误情况及总体错误情况。

回滚过程:发布有故障时及时回滚

假设版本2在上线时有故障,需回滚至之前版本,则修改云函数 B 的 release 别名流量全部指向版本1即可。

基于云 API invoke 接口的使用示例

背景

用户已 创建云函数,且未发布新版本及创建别名。
用户直接使用 API 或 SDK 运行云函数。
用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。 总体方案示意图如下:


初始配置过程

在云函数 B 中创建别名 release、prepub,可暂时指向 $LATEST 版本。

开发测试发布过程:持续开发、测试、发布、上线

1. 发布版本: 在云函数上持续开发并依次发布版本1、2、3、4。假设版本1已在发布环境,版本2在预发布环境测试,版本3和版本4在测试环境测试。 2. 开发需要测试的最近版本: 配置 $DEFAULT 别名指向 $LATEST 版本,开发人员可基于此版本持续地进行开发,开发完成后可以发布版本。 3. 预发布环境测试: 假设版本3可进入预发布环境时,配置函数 B 的 prepub 别名指向版本3,即可在预发环境进行测试和体验。 4. 预发布环境按规则路由: 假设版本4可进入预发布环境,开发人员可配置云函数 B 的按规则路由,自定义传入的 keyvalue,将其指向版本4。在 invoke 接口时,将键值对以 json 格式存入参数 RoutingKey 中,若 RoutingKey 中存在符合规则的键值对,则路由到版本4。如何按规则路由请参见 按规则路由通过 API 运行函数5. 预发布环境至发布环境灰度发布: 假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置6. 发布过程中持续监控: 通过监控及日志查看灰度过程,版本2的流量是否正常上涨,版本1的流量是否正常下降,监控发布过程中的各版本错误情况及总体错误情况。

回滚过程:发布有故障时及时回滚

假设版本2在上线时有故障,需回滚至之前版本,则修改云函数 B 的 release 别名流量全部指向版本1即可。

Serverless Cloud Framework 的使用示例

在使用 Serverless Cloud Framework 时,可以通过 stage 区分测试环境、预发布环境和发布环境。在发布环境灰度时,可使用以下命令实现逐步过渡。详细操作步骤请参见 使用 tencent-express 组件部署 express 网站
scf deploy --inputs.traffic=0.1 #部署并切换10%流量到$latest版本上
scf deploy --inputs.traffic=1.0 #部署并切换100%流量到$latest版本上
scf deploy --inputs.traffic=1.0 #部署并切换100%流量到$latest版本上

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈