通用表达式语言 (CEL) 为复杂的基于规则的标志评估提供逻辑。借助它,您可以使用逻辑运算符组合多个用户或请求属性,从而创建精准的定位规则。
本指南介绍了如何使用 CEL 规则定义标志,以及如何更新评估规范。
前提条件
开始之前,请确保您满足以下方面的要求:
- 已完成部署功能标志快速入门。
- 配置为管理 App Lifecycle Manager 资源的
gcloud环境。
逻辑运算符和语法
CEL 支持使用标准逻辑运算符来构建复杂的条件:
&&逻辑 AND||逻辑或!逻辑 NOTin检查某个值是否存在于列表中
定义属性
CEL 属性是特定的数据点,例如 source.ip、请求标头或路径,用于布尔表达式中以定义安全政策或路由政策。
CEL 条件中使用的任何属性都必须在 EvaluationSpec 的属性数组中明确定义和列出。如果某个属性在条件中使用,但列表中缺少该属性,API 将拒绝相应请求。
创建属性
您可以使用 App Lifecycle Manager 创建 CEL 属性。
如需创建方案属性,请运行以下命令:
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
如需创建国家/地区属性,请运行以下命令:
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
如需创建平台属性,请运行以下命令:
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
使用 CEL 规则配置标志
创建或更新标志时,请在 evaluation-spec 中定义评估逻辑。
例如,以下代码段可为德国境内使用移动应用的付费客户启用某项功能。
gcloud beta app-lifecycle-manager flags create "advanced-reporting-flag" \
--key="advanced-reporting-flag" \
--flag-value-type=BOOL \
--unit-kind="UNIT_KIND_NAME" \
--location=global \
--evaluation-spec='{
"rules": [{
"id": "premium_mobile_users_in_germany",
"condition": "plan == \"premium\" && country == \"DE\" && platform == \"mobile\"",
"target": "enabled"
}],
"defaultTarget": "disabled",
"attributes": [
"projects/PROJECT_ID/locations/global/flagAttributes/plan-attr",
"projects/PROJECT_ID/locations/global/flagAttributes/country-attr",
"projects/PROJECT_ID/locations/global/flagAttributes/platform-attr"
]
}'
将 PROJECT_ID 和 UNIT_KIND_NAME 替换为您的值。
应用集成
您的应用必须在运行时将属性注入到评估上下文中。
Python 示例:
from openfeature.evaluation_context import EvaluationContext
eval_ctx = EvaluationContext(
targeting_key=user_id,
attributes={
"plan": "premium",
"country": "DE",
"platform": "mobile"
}
)
is_enabled = client.get_boolean_value("advanced-reporting-flag", False, eval_ctx)
最佳做法
- 评估顺序:系统会按顺序评估规则。计算结果为 true 的第一个规则将决定标志的值。
- 安全默认值:如果用户情境缺少条件所需的属性,评估引擎将跳过该特定规则。
- 字符数限制:CEL 表达式的大小不得超过 4,096 字节 (4kB)。
后续步骤
- 了解多租户架构。
- 了解实验和 A/B 测试。