Menargetkan flag dengan CEL

Common Expression Language (CEL) menyediakan logika untuk evaluasi flag berbasis aturan yang canggih. CEL memungkinkan Anda membuat aturan penargetan yang akurat dengan menggabungkan beberapa atribut pengguna atau permintaan menggunakan operator logika.

Panduan ini menunjukkan cara menentukan flag dengan aturan CEL dan memperbarui spesifikasi evaluasi.

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  1. Menyelesaikan panduan memulai Men-deploy flag fitur.
  2. Lingkungan gcloud yang dikonfigurasi untuk mengelola resource App Lifecycle Manager.

Operator dan sintaksis logika

CEL mendukung operator logika standar untuk membuat kondisi yang kompleks:

  • && logika AND
  • || logika OR
  • ! logika NOT
  • in memeriksa apakah nilai ada dalam daftar

Menentukan atribut

Atribut CEL adalah titik data tertentu, seperti source.ip, header permintaan, atau jalur, yang digunakan dalam ekspresi boolean untuk menentukan kebijakan keamanan atau perutean.

Setiap atribut yang digunakan dalam kondisi CEL harus ditentukan dan dicantumkan secara eksplisit dalam array atribut EvaluationSpec. Jika atribut digunakan dalam suatu kondisi tetapi tidak ada dalam daftar, API akan menolak permintaan tersebut.

Membuat atribut

Anda dapat menggunakan App Lifecycle Manager untuk membuat atribut CEL.

Untuk membuat atribut paket, jalankan perintah:

gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
    --key="plan" \
    --attribute-value-type="STRING" \
    --location=global

Untuk membuat atribut negara, jalankan perintah:

gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
    --key="country" \
    --attribute-value-type="STRING" \
    --location=global

Untuk membuat atribut platform, jalankan perintah:

gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
    --key="platform" \
    --attribute-value-type="STRING" \
    --location=global

Mengonfigurasi flag dengan aturan CEL

Saat membuat atau memperbarui flag, tentukan logika evaluasi di evaluation-spec.

Misalnya, cuplikan ini mengaktifkan fitur untuk pelanggan premium di Jerman menggunakan aplikasi seluler mereka.

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"
      ]
    }'

Ganti PROJECT_ID, dan UNIT_KIND_NAME dengan nilai Anda.

Application integration

Aplikasi Anda harus memasukkan atribut ke dalam konteks evaluasi saat runtime.

Contoh 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)

Praktik terbaik

  • Urutan Evaluasi: Aturan dievaluasi secara berurutan. Aturan pertama yang dievaluasi ke true akan menentukan nilai flag.
  • Default Aman: Jika konteks pengguna tidak memiliki atribut yang diperlukan untuk suatu kondisi, mesin evaluasi akan melewati aturan tertentu tersebut.
  • Batas Karakter: Ekspresi CEL dapat berukuran hingga 4.096 byte (4 kB).

Langkah berikutnya