En esta guía, se explica cómo implementar marcas de función de App Lifecycle Manager en un entorno de varios usuarios sin modificar el proceso de implementación binaria existente.
Requisitos previos
Antes de comenzar, asegúrate de contar con los siguientes aspectos:
- Completaste la guía de inicio rápido Implementa marcas de funciones.
- Un entorno de
gcloudconfigurado para administrar recursos de App Lifecycle Manager. - Una oferta de SaaS existente. Para obtener más información sobre cómo crear una oferta de SaaS, consulta Crea una oferta de SaaS.
Modelado de recursos
En una configuración de varios usuarios, te recomendamos que definas un tipo de unidad para tu servicio o aplicación, y una unidad para cada instancia del servicio o la aplicación (que representa un usuario o una implementación).
Para implementar marcas de funciones en un entorno de varios usuarios, define atributos de Common Expression Language (CEL) que identifiquen a tus usuarios, configura tu aplicación para insertar identificadores de usuarios en el tiempo de ejecución y usa reglas de evaluación para afectar las funciones de usuarios específicos.
En casos más simples, también puedes crear lanzamientos independientes de forma manual para cada cliente.
1. Crea una oferta de SaaS (si aún no lo hiciste)
gcloud beta app-lifecycle-manager saas create "SAAS_NAME" \
--project="PROJECT_ID" \
--location="global" \
--locations=name="LOCATION_1"
2. Crea UnitKind
gcloud beta app-lifecycle-manager unit-kinds create "tenant-service-kind" \
--project="PROJECT_ID" \
--location="global" \
--saas="SAAS_NAME"
3. Crea unidades para usuarios
Cuando crees unidades, usa Etiquetas para categorizar los servicios de los usuarios en grupos (p.ej., group=beta, group=preview, group=all).
# Create a unit for Tenant A (Beta group)
gcloud beta app-lifecycle-manager units create "tenant-a-service" \
--unit-kind="tenant-service-kind" \
--location="LOCATION_1" \
--labels="group=beta"
# Create a unit for Tenant B (Standard group)
gcloud beta app-lifecycle-manager units create "tenant-b-service" \
--unit-kind="tenant-service-kind" \
--location="LOCATION_1" \
--labels="group=all"
Define atributos y marcas
Debes definir formalmente los atributos (como customerID) para garantizar la seguridad de los tipos en las reglas de evaluación.
1. Crea el atributo customerID
gcloud beta app-lifecycle-manager flags attributes create "customer-id-attr" \
--key="customerID" \
--attribute-value-type="STRING" \
--location=global
2. Crea la marca de función
gcloud beta app-lifecycle-manager flags create "enhanced-search" \
--key="enhanced-search" \
--flag-value-type=BOOL \
--unit-kind="tenant-service-kind"
Integración de aplicaciones
Integra el SDK de OpenFeature en tu servicio. Tu aplicación debe insertar el customerID en el contexto en el tiempo de ejecución.
Ejemplo de Go:
// Inject customerID into the evaluation context
evalCtx := map[string]any{
"customerID": currentTenant.ID,
}
// Evaluate the flag
isEnabled, err := client.BooleanValue(
context.Background(),
"enhanced-search",
false,
evalCtx,
)
Configura la segmentación específica del usuario
Usa reglas de evaluación para habilitar una función para clientes específicos.
gcloud beta app-lifecycle-manager flags update "enhanced-search" \
--location="global"
--evaluation-spec='{
"rules": [{
"id": "allowlist-for-premium-tenants",
"condition": "customerID in [\"tenant-xyz-123\", \"tenant-abc-789\"]",
"target": "Enabled"
}],
"defaultTarget": "Disabled",
"attributes": ["projects/PROJECT_ID/locations/global/flagAttributes/customer-id-attr"]
}'
Lanzamiento gradual manual con filtros
Para casos de uso más simples, puedes emular ondas activando lanzamientos independientes de forma manual para cada etiqueta de cliente.
1. Crea una revisión y un lanzamiento
# Create a Revision (Snapshot)
gcloud beta app-lifecycle-manager flags revisions create "enhanced-search-rev-1" \
--location=global \
--flag="enhanced-search"
# Create a Release
gcloud beta app-lifecycle-manager flags releases create "release-of-enhanced-search" \
--location=global \
--unit-kind="tenant-service-kind" \
--revisions="enhanced-search-rev-1"
2. Activa lanzamientos manuales
Puedes organizar el lanzamiento de forma manual activando operaciones independientes por grupo objetivo con --unit-filter.
# Rollout to Beta group first
gcloud beta app-lifecycle-manager rollouts create "beta-rollout" \
--flag-release="release-of-enhanced-search" \
--rollout-kind="rollout-kind-of-enhanced-search" \
--location=global \
--rollout-orchestration-strategy="Google.Cloud.Simple.AllAtOnce" \
--unit-filter="labels.group == beta"
# After verification, rollout to the rest of the fleet
gcloud beta app-lifecycle-manager rollouts create "full-rollout" \
--flag-release="release-of-enhanced-search" \
--rollout-kind="rollout-kind-of-enhanced-search" \
--location=global \
--rollout-orchestration-strategy="Google.Cloud.Production" \
--unit-filter="labels.group == all"
¿Qué sigue?
- Obtén información sobre la experimentación y las pruebas A/B.
- Obtén información para solucionar problemas.