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 Kurzanleitung Funktions-Flags bereitstellen ausgeführt.
- Eine
gcloud-Umgebung, die für die Verwaltung von App Lifecycle Manager-Ressourcen konfiguriert ist. - Ein vorhandenes App-Angebot. Weitere Informationen zum Erstellen eines App Angebots finden Sie unter App-Angebot erstellen.
Ressourcenmodellierung
In einer Mehrmandanteneinrichtung empfehlen wir, eine Art der 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 Roll-outs für jeden Kunden manuell erstellen.
1. App-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"
Anwendungsintegration
Binden Sie das OpenFeature SDK in Ihren Dienst ein. Ihre Anwendung muss die customerID zur Laufzeit in den Kontext einfügen.
Go-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,
)
Mandantenspezifisches Targeting 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 Roll-out mit Filtern
In einfacheren Anwendungsfällen können Sie Wellen simulieren, indem Sie separate Roll-outs 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 Roll-outs auslösen
Sie können das Roll-out 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
- Weitere Informationen zu Experimenten und A/B-Tests.
- Weitere Informationen zur Fehlerbehebung.