了解多变体功能标志规则 - Amazon AppConfig
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

了解多变体功能标志规则

在创建功能标志变体时,可以为其指定规则。规则是将上下文值作为输入并生成布尔结果作为输出的表达式。例如,可以定义一条规则来为测试版用户(由其账户 ID 标识)选择标志变体,同时测试用户界面刷新。对于此场景,请执行以下操作:

  1. 创建一个名为 UI Refresh 的新功能标志配置文件。

  2. 创建一个名为 ui_refresh 的新功能标志。

  3. 在创建功能标志后,对其进行编辑来添加变体。

  4. 创建并启用名为 BetaUsers 的新变体。

  5. BetaUsers 定义一条规则,如果请求上下文中的账户 ID 位于获准查看新测试版体验的账户 ID 列表中,此规则将选择该变体。

  6. 确认默认变体的状态设置为已禁用。

注意

根据在控制台中定义的顺序,将变体作为有序列表进行评估。将首先评估列表顶部的变体。如果没有规则与提供的上下文匹配,则 Amazon AppConfig 返回默认变体。

在 Amazon AppConfig 处理功能标志请求时,它首先将提供的上下文 [包括 AccountID(对于本示例] 与 BetaUsers 变体进行比较。如果上下文与 BetaUsers 的规则相匹配,Amazon AppConfig 返回测试版体验的配置数据。如果上下文不包含账户 ID 或者账户 ID 以 123 之外的任意值结尾,则 Amazon AppConfig 返回默认规则的配置数据,这意味着用户会在生产环境中看到当前体验。

定义 规则

变体规则是由一个或多个操作数和一个运算符组成的表达式。操作数是在规则评估期间使用的特定值。操作数的值可以是静态的,例如文本数字或字符串;也可以是变量,例如在上下文中找到的值或其它表达式的结果。运算符(例如“大于”)是应用于其操作数并产生值的测试或操作。变体规则表达式必须生成“true”或“false”才有效。

操作数

类型 描述 示例

String

UTF-8 字符序列,用双引号括起来。

"apple", "Ḽơᶉëᶆ ȋṕšᶙṁ"

整数

64 位整数值。

-7, 42

浮点型

64 位 IEEE-754 浮点值。

3.14, 1.234e-5

Timestamp

特定时刻,如 W3C note on date and time formats 所述。

2012-03-04T05:06:07-08:00, 2024-01

布尔值

True 或 false 值。

true, false

上下文值

$key 形式的参数化值,在规则评估期间从上下文中检索得到。

$country, $userId

比较运算符

运算符 描述 示例

eq

确定上下文值是否等于给定值。

(eq $state "Virginia")

gt

确定上下文值是否大于给定值。

(gt $age 65)

gte

确定上下文值是否大于或等于给定值。

(gte $age 65)

lt

确定上下文值是否小于给定值。

(lt $age 65)

lte

确定上下文值是否小于或等于给定值。

(lte $age 65)

逻辑运算符

运算符 描述 示例

以及

确定两个操作数是否为 true。

(and (eq $state "Virginia") (gt $age 65) )

或者

确定是否至少有一个操作数为 true。

(or (eq $state "Virginia") (gt $age 65) )

not

反转表达式的值。

(not (eq $state "Virginia"))

自定义运算符

运算符 描述 示例

begins_with

确定上下文值是否以给定前缀开头。

(begins_with $state "A")

ends_with

确定上下文值是否以给定前缀结尾。

(ends_with $email "amazon.com")

contains

确定上下文值是否包含给定的子字符串。

(contains $promoCode "WIN")

in

确定上下文值是否包含在常量列表中。

(in $userId ["123", "456"])

matches

确定上下文值是否与给定的正则表达式模式匹配。

(matches in::$greeting pattern::"h.*y")

exists

确定是否为上下文键提供了任何值。

(exists key:"country")

split

根据所提供上下文值的一致哈希值,对于给定百分比的流量计算为 true

请注意,seed 是一个可选属性。如果您不指定 seed,则哈希值是本地一致的,这意味着该标志的流量将被一致地拆分,但接收相同上下文值的其它标志可能会以不同的方式拆分流量。如果提供了 seed,则每个唯一值都可以保证在功能标志、配置文件和 Amazon Web Services 账户之间一致地拆分流量。

(split pct::10 by::$userId seed::"abc")