In dieser Anleitung wird beschrieben, wie Sie App Lifecycle Manager-Funktions-Flags in einer Mehrmandantenumgebung implementieren, ohne den vorhandenen Prozess für die binäre Bereitstellung zu ändern.
Vorbereitung
Prüfen Sie zuerst, ob Sie Folgendes haben:
- Die Schnellstartanleitung Funktions-Flags bereitstellen durchgearbeitet.
- Eine
gcloud-Umgebung, die für die Verwaltung von App Lifecycle Manager-Ressourcen konfiguriert ist. - Ein vorhandenes SaaS-Angebot. Weitere Informationen zum Erstellen eines SaaS Angebots finden Sie unter SaaS-Angebot erstellen.
Ressourcenmodellierung
Bei einer Mehrmandanteneinrichtung empfehlen wir, eine Einheit für Ihren Dienst oder Ihre Anwendung und eine Einheit für jede Instanz des Dienstes oder der Anwendung zu definieren (die einen Mandanten oder eine Bereitstellung darstellt).
Wenn Sie Funktions-Flags in einer Mehrmandantenumgebung implementieren möchten, definieren Sie Attribute der Common Expression Language (CEL), mit denen Sie Ihre Mandanten identifizieren, konfigurieren Sie Ihre Anwendung so, dass Mandanten-IDs zur Laufzeit eingefügt werden, und verwenden Sie Auswertungsregeln, um Funktionen für bestimmte Mandanten zu beeinflussen.
In einfacheren Fällen können Sie auch separate Rollouts für jeden Kunden manuell erstellen.
1. SaaS-Angebot erstellen (falls noch nicht geschehen)
gcloud beta app-lifecycle-manager saas create "SAAS_NAME" \
--project="PROJECT_ID" \
--location="global" \
--locations=name="LOCATION_1"
2. UnitKind erstellen
gcloud beta app-lifecycle-manager unit-kinds create "tenant-service-kind" \
--project="PROJECT_ID" \
--location="global" \
--saas="SAAS_NAME"
3. Einheiten für Mandanten erstellen
Verwenden Sie beim Erstellen von Einheiten Labels , um Mandantendienste in Gruppen zu kategorisieren (z.B. 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"
Attribute und Flags definieren
Sie müssen Attribute wie customerID formell definieren, um die Typsicherheit in Auswertungsregeln zu gewährleisten.
1. Attribut „customerID“ erstellen
gcloud beta app-lifecycle-manager flags attributes create "customer-id-attr" \
--key="customerID" \
--attribute-value-type="STRING" \
--location=global
2. Funktions-Flag erstellen
gcloud beta app-lifecycle-manager flags create "enhanced-search" \
--key="enhanced-search" \
--flag-value-type=BOOL \
--unit-kind="tenant-service-kind"
Anwendungseinbindung
Binden Sie das OpenFeature SDK in Ihren Dienst ein. Ihre Anwendung muss die customerID zur Laufzeit in den Kontext einfügen.
Beispiel:
// 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,
)
Mandantenspezifische Ausrichtung konfigurieren
Verwenden Sie Auswertungsregeln, um eine Funktion für bestimmte Kunden zu aktivieren.
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"]
}'
Manuelles schrittweises Rollout mit Filtern
In einfacheren Anwendungsfällen können Sie Wellen emulieren, indem Sie separate Rollouts für jedes Kundenlabel manuell auslösen.
1. Revision und Release erstellen
# 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. Manuelle Rollouts auslösen
Sie können das Rollout manuell orchestrieren, indem Sie mit --unit-filter separate Vorgänge pro Zielgruppe auslösen.
# 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"
Nächste Schritte
- Informationen zu Experimenten und A/B-Tests.
- Informationen zur Fehlerbehebung