Cibler des indicateurs avec CEL

Le CEL (Common Expression Language) fournit la logique pour des évaluations sophistiquées des indicateurs basées sur des règles. Elle vous permet de créer des règles de ciblage précises en combinant plusieurs attributs d'utilisateur ou de requête à l'aide d'opérateurs logiques.

Ce guide vous explique comment définir des indicateurs avec des règles CEL et mettre à jour les spécifications d'évaluation.

Prérequis

À vérifier avant de commencer :

  1. Vous avez terminé le guide de démarrage rapide sur le déploiement de flags de fonctionnalité.
  2. Un environnement gcloud configuré pour gérer les ressources App Lifecycle Manager.

Opérateurs logiques et syntaxe

CEL est compatible avec les opérateurs logiques standards pour créer des conditions complexes :

  • && AND logique
  • || OU logique
  • ! NOT logique
  • in : vérifie si une valeur existe dans une liste

Définir des attributs

Les attributs CEL sont des points de données spécifiques, tels que source.ip, les en-têtes de requête ou les chemins d'accès, utilisés dans les expressions booléennes pour définir des stratégies de sécurité ou de routage.

Tout attribut utilisé dans une condition CEL doit être défini et listé de manière explicite dans le tableau d'attributs de EvaluationSpec. Si un attribut est utilisé dans une condition, mais qu'il est absent de la liste, l'API rejettera la requête.

Créer un attribut

Vous pouvez utiliser App Lifecycle Manager pour créer des attributs CEL.

Pour créer un attribut de plan, exécutez la commande suivante :

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

Pour créer un attribut de pays, exécutez la commande suivante :

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

Pour créer un attribut de plate-forme, exécutez la commande suivante :

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

Configurer un indicateur avec des règles CEL

Lorsque vous créez ou mettez à jour un indicateur, définissez la logique d'évaluation dans evaluation-spec.

Par exemple, cet extrait active une fonctionnalité pour les clients Premium en Allemagne qui utilisent leur application mobile.

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

Remplacez PROJECT_ID et UNIT_KIND_NAME par vos valeurs.

Intégration d'applications

Votre application doit injecter les attributs dans le contexte d'évaluation au moment de l'exécution.

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

Bonnes pratiques

  • Ordre d'évaluation : les règles sont évaluées de manière séquentielle. La première règle qui renvoie "true" détermine la valeur du flag.
  • Paramètres par défaut sécurisés : si un attribut requis pour une condition est manquant dans un contexte utilisateur, le moteur d'évaluation ignore cette règle spécifique.
  • Limites de caractères : la taille des expressions CEL ne doit pas dépasser 4 096 octets (4 ko).

Étapes suivantes