使用 CEL 設定目標旗標

一般運算語言 (CEL) 提供邏輯,可根據規則評估複雜的旗標。您可以結合多個使用者或要求屬性,並使用邏輯運算子建立精確的指定規則。

本指南說明如何使用 CEL 規則定義旗標,以及更新評估規格。

必要條件

開始前,請先確認下列事項:

  1. 已完成部署功能旗標快速入門導覽課程
  2. 設定 gcloud 環境來管理 App Lifecycle Manager 資源。

邏輯運算子和語法

CEL 支援標準邏輯運算子,可建構複雜條件:

  • && 邏輯 AND
  • || 邏輯 OR
  • ! 邏輯 NOT
  • in 檢查清單中是否有值

定義屬性

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_IDUNIT_KIND_NAME 替換為您的值。

Application Integration

應用程式必須在執行階段將屬性插入評估環境。

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 個位元組 (4 KB)。

後續步驟