Subscription Vending no Azure: landing zones governadas

Para garantir que suas imagens ranqueiem bem no Google Imagens e cumpram os requisitos de acessibilidade, utilize estes textos descritivos:

Tipo de conteúdo: Laboratório prático com arquitetura explicada
Nível: Intermediário
Tecnologias: Azure Landing Zones, Azure Verified Modules, Terraform, GitHub Actions, OIDC, Azure Storage, Microsoft Entra ID, Azure Cost Management
Repositório: https://github.com/leomcoco/azure-subscription-vending-avm-lab
Tempo estimado de leitura: 7 minutos
Tempo estimado de laboratório: 1h30 a 2h

Criar uma subscription no Azure é fácil. O desafio começa quando uma empresa precisa criar várias subscriptions para times diferentes, com padrões mínimos de governança, custo, identidade, rede e rastreabilidade.

Em ambientes enterprise, uma subscription não deveria nascer vazia. Ela deveria nascer com uma baseline mínima: owner definido, centro de custo, tags, budget, RBAC, rede e um padrão claro de consumo.

Esse é o papel do Subscription Vending.

A ideia não é apenas criar subscriptions mais rápido. O objetivo é transformar a entrega de ambientes Azure em um processo padronizado, versionado e automatizado.


Onde o problema aparece

Normalmente, esse problema aparece em três cenários.

O primeiro é o crescimento natural do ambiente cloud. A empresa começa com poucas subscriptions, mas logo surgem ambientes de desenvolvimento, homologação, produção, dados, segurança, conectividade e aplicações críticas.

O segundo é a criação de subscriptions para workloads específicas. Cada squad ou aplicação precisa de um ambiente próprio, mas sem perder governança.

O terceiro, e talvez o mais comum, é o uso de subscriptions sandbox.

Sandbox costuma ser um dos casos em que mais se cria subscription. É comum que times precisem de ambientes temporários para PoC, testes, MVPs, validações técnicas ou estudos de novas soluções. O problema é que sandbox sem controle vira risco: custo sem dono, recursos esquecidos, permissões excessivas e falta de rastreabilidade.

Por isso, mesmo uma sandbox precisa nascer com alguns guardrails:

  • owner técnico;
  • centro de custo ou área responsável;
  • budget;
  • prazo ou ciclo de revisão;
  • tags obrigatórias;
  • permissões controladas;
  • escopo claro de uso;
  • restrições mínimas de região ou rede, quando necessário.

Subscription Vending ajuda justamente nesse ponto: criar um modelo repetível para entregar ambientes sem depender de ajustes manuais depois.


O que é Subscription Vending

Subscription Vending é um mecanismo de plataforma para entregar subscriptions ou application landing zones de forma automatizada e governada.

Na prática, a plataforma recebe uma solicitação, valida os dados, executa uma automação e entrega o ambiente com uma baseline mínima.

Um fluxo simples seria:

Solicitação
   ↓
Validação
   ↓
Pipeline
   ↓
Terraform
   ↓
Baseline governada
   ↓
Handoff para o time solicitante

Esse processo se conecta diretamente com Azure Landing Zones. A landing zone é o ambiente preparado para receber workloads. O vending é o mecanismo que ajuda a entregar esse ambiente de forma padronizada.


O que é AVM e por que usar

Neste laboratório eu usei Azure Verified Modules, ou simplesmente AVM.

AVM é uma iniciativa da Microsoft para oferecer módulos reutilizáveis de Infrastructure as Code para Azure, disponíveis para Terraform e Bicep. A ideia é evitar que cada time escreva tudo do zero e permitir deployments mais consistentes, alinhados a boas práticas e com manutenção centralizada.

No contexto deste laboratório, usei o módulo:

Azure/avm-ptn-alz-sub-vending/azure

Esse módulo foi criado para acelerar a entrega de landing zones individuais no Azure. Ele pode trabalhar com cenários mais completos, incluindo criação de subscription, associação a management group, rede, RBAC, budgets e outros componentes.

Como o meu ambiente de laboratório não permite criar novas subscriptions programaticamente, usei o modo com subscription existente. Isso deixa o laboratório mais acessível para quem estuda Azure ou não tem um contrato enterprise como EA, MCA ou MPA.


Arquitetura proposta

A proposta do laboratório foi criar o motor da automação, deixando a camada de portal para uma segunda etapa.

Neste primeiro artigo, o fluxo ficou assim:

Arquivo de solicitação
   ↓
GitHub Actions
   ↓
Validação dos dados
   ↓
Login no Azure com OIDC
   ↓
Terraform plan/apply
   ↓
Módulo AVM
   ↓
Baseline aplicada na subscription

A entrada é um arquivo versionado no GitHub. Esse arquivo representa a solicitação de uma landing zone.

Exemplo de dados que fazem sentido em uma solicitação:

InformaçãoPor que importa
Nome da aplicaçãoIdentifica a workload
AmbienteDefine se é dev, hml, prd ou sandbox
Product lineAjuda a diferenciar sandbox, corp-connected ou online
Owner técnicoDefine responsabilidade operacional
Owner de negócioDefine responsabilidade funcional
Centro de custoApoia FinOps e chargeback/showback
RegiãoEvita criação em regiões não planejadas
BudgetControla consumo
Grupos de acessoEvita permissão direta para usuários
RedeDefine se precisa de VNet, subnets ou conectividade

Arquitetura de Subscription Vending no Azure usando GitHub Actions, Terraform, OIDC e Azure Verified Module.

Fluxo de Subscription Vending com arquivo de solicitação, GitHub Actions, Terraform, OIDC e AVM.


O que foi validado no laboratório

O laboratório não tenta representar uma landing zone enterprise completa. O objetivo foi demonstrar uma baseline prática, simples e reproduzível.

A automação validada entregou:

ComponenteResultado
Resource GroupCriado por Terraform
TagsAplicadas para governança e rastreabilidade
VNetCriada para simular uma base de rede
SubnetsWorkload e Private Endpoints
RBACAcesso via grupos do Microsoft Entra ID
BudgetCriado no escopo da subscription
State remotoArmazenado em Azure Storage
OIDCAutenticação sem client secret
IdempotênciaReexecução sem mudanças

O ponto mais importante não foi criar uma VNet ou um Resource Group. Isso é simples.

O valor está na esteira: uma solicitação versionada, validada e aplicada por automação, com rastreabilidade e possibilidade de evolução para self-service.


Repositório GitHub com estrutura de laboratório para Subscription Vending no Azure.

Repositório GitHub com documentação, request file, workflow e código Terraform do laboratório.


Workflow do GitHub Actions executado com sucesso usando Terraform e Azure OIDC.

GitHub Actions executando o motor de automação do Subscription Vending.


Budget, RBAC e tags

Três pontos deixam o laboratório mais próximo de um cenário real: budget, RBAC e tags.

O budget foi criado no escopo da subscription, com alertas de 80% e 100%. Isso é especialmente importante em ambientes sandbox, onde recursos de teste podem ser esquecidos facilmente.

O RBAC foi aplicado por grupos, e não diretamente por usuários. Isso facilita auditoria e evita dependência de pessoas específicas.

As tags foram usadas para registrar informações como aplicação, ambiente, product line, centro de custo, criticidade e request ID. Em ambientes com muitas subscriptions, esse tipo de metadado ajuda bastante em inventário, FinOps e governança.


Recursos Azure criados por Terraform como parte da baseline de Subscription Vending.

Resource Group, VNet, subnets, tags, RBAC e budget criados pela automação.


Idempotência: o teste que realmente importa

Depois do primeiro apply, executei novamente o workflow com apply=false.

O resultado foi:

No changes. Your infrastructure matches the configuration.

Esse é um ponto importante para qualquer automação com Infrastructure as Code.

A execução confirmou que:

  • o Terraform state remoto estava funcionando;
  • a automação conseguiu reler os recursos existentes;
  • não havia drift;
  • a configuração estava alinhada com o ambiente real;
  • o workflow poderia ser executado novamente sem recriar recursos.

Esse print é uma evidência do laboratório, porque mostra que a automação não apenas cria recursos, mas também mantém consistência.


Terraform plan no GitHub Actions mostrando que a infraestrutura está alinhada com o código.

Reexecução do workflow confirmando idempotência: nenhuma alteração necessária.


O que fica no GitHub

Para não transformar este artigo em uma documentação extensa, deixei os detalhes operacionais no repositório.

No GitHub estão os pontos mais práticos:

  • scripts de preparação;
  • workflow GitHub Actions;
  • configuração Terraform;
  • exemplo de request file;
  • troubleshooting;
  • workflow de destroy;
  • contrato para uso futuro com repository_dispatch;
  • documentação para replicar o laboratório.

Essa separação deixa o artigo mais objetivo: aqui o foco é explicar o modelo, as decisões e o resultado. No GitHub fica o passo a passo executável.


Próximo passo: portal self-service

O motor já está preparado para receber chamadas via repository_dispatch.

Isso permite evoluir para um fluxo como:

Microsoft Forms ou Power Automate
   ↓
Aprovação
   ↓
GitHub repository_dispatch
   ↓
GitHub Actions
   ↓
Terraform
   ↓
Landing zone governada

Esse será o próximo passo: criar uma experiência de entrada mais próxima de um portal self-service, sem alterar o motor Terraform já validado.


Aprendizados

O principal aprendizado é que Subscription Vending não deve ser tratado apenas como criação de subscription.

Ele precisa considerar:

  • padrão de solicitação;
  • validação antes do deployment;
  • identidade da automação;
  • permissões no Azure;
  • state remoto;
  • governança mínima;
  • FinOps;
  • rastreabilidade;
  • modelo de evolução para self-service.

Também ficou claro que sandbox merece atenção especial. Por ser um ambiente usado para testes e experimentação, ele tende a ser criado com frequência. Justamente por isso, precisa de um modelo simples, mas governado.

Uma sandbox pode ter menos controles que produção, mas não deveria nascer sem dono, sem budget e sem prazo de revisão.


Conclusão

Subscription Vending ajuda a transformar a criação de ambientes Azure em um processo mais governado, repetível e rastreável.

Neste laboratório, usei uma subscription existente para simular a entrega de uma landing zone com AVM, Terraform e GitHub Actions. A automação entregou uma baseline com rede, RBAC, budget, tags e state remoto, além de validar idempotência em uma nova execução.

Mais do que o laboratório em si, o ponto principal é o modelo:

a subscription ou landing zone não deve nascer vazia; ela deve nascer pronta para ser consumida dentro dos guardrails definidos pela plataforma.

Esse modelo pode começar simples, como neste laboratório, e evoluir para cenários mais maduros com portal self-service, aprovação, ITSM, Azure Policy, management groups e conectividade corporativa.


Referências oficiais

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *