Este guia explica como implementar flags de recursos do App Lifecycle Manager em um ambiente multilocatário sem modificar o processo de implantação binária atual.
Pré-requisitos
Antes de começar, verifique se você atende a estes requisitos:
- Concluiu o guia de início rápido de implantação de flags de recursos.
- Tem um ambiente
gcloudconfigurado para gerenciar recursos do App Lifecycle Manager. - Tem uma oferta de SaaS. Para mais informações sobre como criar uma oferta de SaaS, consulte Criar uma oferta de SaaS.
Modelagem de recursos
Em uma configuração multilocatária, recomendamos que você defina um tipo de unidade para seu serviço ou aplicativo e uma unidade para cada instância do serviço ou aplicativo (que representa um locatário ou implantação).
Para implementar flags de recursos em um ambiente multilocatário, defina atributos da Common Expression Language (CEL, na sigla em inglês) que identifiquem seus locatários, configure o aplicativo para injetar identificadores de locatários no ambiente de execução e use regras de avaliação para afetar recursos de locatários específicos.
Para casos mais simples, também é possível criar lançamentos separados para cada cliente.
1. Criar uma oferta de SaaS (se ainda não tiver feito isso)
gcloud beta app-lifecycle-manager saas create "SAAS_NAME" \
--project="PROJECT_ID" \
--location="global" \
--locations=name="LOCATION_1"
2. Criar um UnitKind
gcloud beta app-lifecycle-manager unit-kinds create "tenant-service-kind" \
--project="PROJECT_ID" \
--location="global" \
--saas="SAAS_NAME"
3. Criar unidades para locatários
Ao criar unidades, use rótulos para categorizar os serviços de locatários em grupos (por exemplo, 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"
Definir atributos e flags
É necessário definir formalmente os atributos (como customerID) para garantir a segurança de tipo nas regras de avaliação.
1. Criar o atributo customerID
gcloud beta app-lifecycle-manager flags attributes create "customer-id-attr" \
--key="customerID" \
--attribute-value-type="STRING" \
--location=global
2. Criar a flag de recurso
gcloud beta app-lifecycle-manager flags create "enhanced-search" \
--key="enhanced-search" \
--flag-value-type=BOOL \
--unit-kind="tenant-service-kind"
Integração do aplicativo
Integre o SDK do OpenFeature ao seu serviço. O aplicativo precisa injetar o customerID no contexto no ambiente de execução.
Exemplo 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,
)
Configurar a segmentação específica do locatário
Use regras de avaliação para ativar um recurso 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"]
}'
Lançamento gradual manual com filtros
Para casos de uso mais simples, é possível emular ondas acionando lançamentos separados manualmente para cada rótulo de cliente.
1. Criar revisão e lançamento
# 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. Acionar lançamentos manuais
É possível orquestrar manualmente o lançamento acionando operações separadas por grupo de destino usando --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"
A seguir
- Saiba mais sobre testes A/B e experimentos.
- Saiba mais sobre a solução de problemas.