Cómo segmentar con marcas y CEL

Common Expression Language (CEL) proporciona la lógica para evaluaciones de marcas sofisticadas basadas en reglas. Te permite crear reglas de segmentación precisas combinando varios atributos del usuario o de la solicitud con operadores lógicos.

En esta guía, se muestra cómo definir marcas con reglas de CEL y actualizar las especificaciones de evaluación.

Requisitos previos

Antes de comenzar, asegúrate de contar con los siguientes aspectos:

  1. Completaste la guía de inicio rápido para implementar marcas de funciones.
  2. Un entorno de gcloud configurado para administrar los recursos de App Lifecycle Manager.

Operadores lógicos y sintaxis

CEL admite operadores lógicos estándar para crear condiciones complejas:

  • && AND lógico
  • || OR lógico
  • ! NOT lógico
  • in comprueba si existe un valor en una lista

Define atributos

Los atributos de CEL son puntos de datos específicos, como source.ip, encabezados de solicitudes o rutas, que se usan en expresiones booleanas para definir políticas de seguridad o de enrutamiento.

Cualquier atributo que se use en una condición CEL debe definirse y enumerarse de forma explícita en el array de atributos de EvaluationSpec. Si se usa un atributo en una condición, pero no está en la lista, la API rechazará la solicitud.

Crea un atributo

Puedes usar App Lifecycle Manager para crear atributos de CEL.

Para crear un atributo del plan, ejecuta el siguiente comando:

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

Para crear un atributo de país, ejecuta el siguiente comando:

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

Para crear un atributo de plataforma, ejecuta el siguiente comando:

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

Configura una marca con reglas de CEL

Cuando crees o actualices una marca, define la lógica de evaluación en evaluation-spec.

Por ejemplo, este fragmento habilita una función para los clientes premium de Alemania que usan la app para dispositivos móviles.

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

Reemplaza PROJECT_ID y UNIT_KIND_NAME por tus valores.

Integración de aplicaciones

Tu aplicación debe insertar los atributos en el contexto de evaluación en el tiempo de ejecución.

Ejemplo de 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)

Prácticas recomendadas

  • Orden de evaluación: Las reglas se evalúan de forma secuencial. La primera regla que se evalúa como verdadera determina el valor de la marca.
  • Configuración predeterminada segura: Si un contexto del usuario no incluye un atributo obligatorio para una condición, el motor de evaluación omitirá esa regla específica.
  • Límites de caracteres: Las expresiones de CEL pueden tener un tamaño de hasta 4,096 bytes (4 KB).

¿Qué sigue?