Questa guida spiega come implementare i flag funzionalità di App Lifecycle Manager in un ambiente multi-tenant senza modificare il processo di deployment binario esistente.
Prerequisiti
Prima di iniziare, assicurati di:
- Aver completato la guida rapida Eseguire il deployment dei flag funzionalità.
- Aver configurato un ambiente
gcloudper gestire le risorse di App Lifecycle Manager. - Aver creato un'offerta SaaS. Per saperne di più su come creare un'offerta SaaS, consulta Creare un'offerta SaaS.
Modellazione delle risorse
In una configurazione multi-tenant, ti consigliamo di definire un tipo di unità per il tuo servizio o applicazione e un'unità per ogni istanza del servizio o dell'applicazione (che rappresenta un tenant o un deployment).
Per implementare i flag funzionalità in un ambiente multi-tenant, definisci gli attributi Common Expression Language (CEL) che identificano i tuoi tenant, configura l'applicazione in modo da inserire gli identificatori dei tenant in fase di runtime e utilizza le regole di valutazione per influenzare le funzionalità per tenant specifici.
Per i casi più semplici, puoi anche creare manualmente rollout separati per ogni cliente.
1. Crea un'offerta SaaS (se non l'hai già fatto)
gcloud beta app-lifecycle-manager saas create "SAAS_NAME" \
--project="PROJECT_ID" \
--location="global" \
--locations=name="LOCATION_1"
2. Crea un tipo di unità
gcloud beta app-lifecycle-manager unit-kinds create "tenant-service-kind" \
--project="PROJECT_ID" \
--location="global" \
--saas="SAAS_NAME"
3. Crea unità per i tenant
Quando crei le unità, utilizza le etichette per classificare i servizi dei tenant in gruppi (ad es. 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"
Definisci attributi e flag
Devi definire formalmente gli attributi (come customerID) per garantire la sicurezza dei tipi nelle regole di valutazione.
1. Crea l'attributo customerID
gcloud beta app-lifecycle-manager flags attributes create "customer-id-attr" \
--key="customerID" \
--attribute-value-type="STRING" \
--location=global
2. Crea il flag funzionalità
gcloud beta app-lifecycle-manager flags create "enhanced-search" \
--key="enhanced-search" \
--flag-value-type=BOOL \
--unit-kind="tenant-service-kind"
Integrazione di applicazioni
Integra l'SDK OpenFeature nel tuo servizio. L'applicazione deve inserire customerID nel contesto in fase di runtime.
Esempio in 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 il targeting specifico per il tenant
Utilizza le regole di valutazione per attivare una funzionalità per clienti specifici.
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"]
}'
Implementazione graduale manuale con filtri
Per i casi d'uso più semplici, puoi emulare le onde attivando manualmente rollout separati per ogni etichetta cliente.
1. Crea revisione e release
# 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. Attiva i rollout manuali
Puoi orchestrare manualmente il rollout attivando operazioni separate per gruppo target utilizzando --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"
Passaggi successivi
- Scopri di più su sperimentazione e test A/B.
- Scopri di più sulla risoluzione dei problemi.