操作场景
云函数(Serverless Cloud Function,SCF)支持流量路由设置。通过该设置,您可便捷控制函数版本在实际使用场合或环境中的灰度上线或回滚流程,避免一次性上线可能带来的风险。
在创建别名或进行流量配置调整时,可通过控制台控制流量指向两个函数版本,实现流量在版本间按照一定的规则路由。目前支持按权重随机路由和按规则路由两种路由方案:
当您希望任意两个版本按设定的百分比权重进行随机路由时,可进行 按权重随机路由 操作。
当您想将包含有某个特定内容的请求路由到某一个版本时,可进行 按规则路由 操作。
操作步骤
按权重随机路由
本文以在创建别名时配置为例。完成创建后,流量将按设定的百分比在两个版本间随机路由。步骤如下:
1. 参考 新建别名 步骤,进入“创建别名”窗口。
2. 在“创建别名”窗口中,参考以下信息进行流量路由配置。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/9714f1ec028cbee88966c74dcd2ac907.png)
主要参数信息如下:
![](https://qcloudimg.tencent-cloud.cn/image/document/9714f1ec028cbee88966c74dcd2ac907.png)
路由方法:选择按权重路由。
版本权重设置:可通过下拉列表选择两个版本,并进行百分比权重配置。
3. 单击提交即可完成设置。
按规则路由
使用按规则配置路由时,目前的规则语法包括以下三部分:
匹配 Key
匹配时的取值位置,即通过定位来取值以判断是否命中。
Key 目前支持的写法为
invoke.headers.[userKey]
,其中 [userKey]
部分代表可修改内容。此写法含义为通过匹配 invoke
接口调用时,HTTP 请求 headers 中的 userKey 部分来进行匹配。匹配方法
匹配时通过方法与表达式进行对比,目前支持的匹配方法有
exact
,range
。exact
:精确匹配,在使用 exact
方法时,匹配表达式需为字符串。通过匹配 key 读取到的值与表达式精确相等时,即为命中规则。range
:范围匹配,在使用 range
方法时,匹配表达式需为 (a,b) 或 [a,b] 的写法,其中 a,b 要求为整数。通过匹配 key 读取到的值为整数,且在表达式定义的区间中时,即为命中规则。匹配表达式
您可按照以下步骤,配置按规则路由:
1. 参考 新建别名 步骤,进入“创建别名”窗口。
2. 在“创建别名”窗口中,参考以下信息进行流量路由配置,并单击提交即可完成配置。如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/5a9779c3afb514f8fb8425286c40fcf4.png)
主要参数信息如下:
![](https://qcloudimg.tencent-cloud.cn/image/document/5a9779c3afb514f8fb8425286c40fcf4.png)
路由方法:选择按规则路由。
版本规则设置:请结合以下示例,按需配置:
例如,您有两个版本(版本2和版本1),并且期望版本2匹配规则设置为 ![](https://qcloudimg.tencent-cloud.cn/image/document/f38014d785183d54651ce263f3a6e912.png)
根据此配置,云函数平台在通过
invoke.headers.User exact Bob
,版本1设置为未命中。可参照下图进行设置:
![](https://qcloudimg.tencent-cloud.cn/image/document/f38014d785183d54651ce263f3a6e912.png)
invoke
接口调用函数别名时,若将 routingKey
参数设置为{"User":"Bob"}
,则此次执行将使用版本2的代码和配置。若未设置 routingKey
参数或 routingKey
为其他值,则此次执行将使用版本1的代码和配置。例如,您有两个版本(版本3和版本2),并且期望版本3匹配规则为 ![](https://qcloudimg.tencent-cloud.cn/image/document/b573ddc4e556e7f97a3d488e7f5aa099.png)
根据此配置,云函数平台在通过
invoke.headers.userHash range [1,50]
,版本2设置为未命中。可参照下图进行配置:
![](https://qcloudimg.tencent-cloud.cn/image/document/b573ddc4e556e7f97a3d488e7f5aa099.png)
invoke
接口调用函数别名时,若将 routingKey
参数设置为 {"userHash":30}
,则此次执行将使用版本3的代码和配置。若未设置 routingKey
参数或 routingKey
为除了 [1,50] 外的其他值,例如 {"userHash":80}
,则此次执行将使用版本2的代码和配置。