> ## Content Index
> Fetch the complete content index at: https://www.azurebrasil.cloud/llms.txt
> Use this file to discover other available public pages before exploring further.

# Azure Landing Zones com Terraform: como padronizar e automatizar ambientes multi-cloud-ready
- URL: https://www.azurebrasil.cloud/blog/azure-landing-zones-com-terraform-como-padronizar-e-automatizar-ambientes-multi-cloud-ready/
- Published: 2025-05-08T19:56:33.000Z
- Updated: 2025-05-09T16:59:53.000Z
- Author: Ricardo Martins

## **Introdução**

À medida que as empresas migram para a nuvem e crescem em escala, se torna essencial garantir que todos os recursos sejam criados com segurança, governança e padrões consistentes desde o início.

As Azure Landing Zones, baseadas no Cloud Adoption Framework (CAF) da Microsoft, fornecem essa fundação. E quando combinadas com Terraform, elas permitem padronização, automação e versionamento — inclusive em cenários multi-cloud.

Neste artigo, você vai aprender como implementar Landing Zones no Azure usando módulos CAF Terraform, entendendo os componentes, práticas recomendadas e como começar.

---

## O que é uma Azure Landing Zone?

Uma Landing Zone é uma estrutura base de nuvem que define:

- Management groups
- Controle de identidade e acesso (RBAC)
- Políticas e compliance (Azure Policy)
- Redes e conectividade (Hub-and-Spoke)
- Monitoramento, logs e segurança
- Subscriptions padronizadas por ambiente

Com Terraform, você pode definir e manter essas zonas como infraestrutura como código (IaC) — promovendo reprodutibilidade e governança desde o primeiro deploy.

---

## Usando o projeto **CAF Terraform module** (enterprise-scale)

A Microsoft mantém um módulo oficial no GitHub para automatizar landing zones com Terraform:

🔗 [https://github.com/Azure/terraform-azurerm-caf-enterprise-scale](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale?ref=azurebrasil.cloud)

Este módulo provê:

- Estrutura de **management groups**
- Criação de **subscriptions associadas**
- Políticas e RBAC
- Deploy de recursos base: logs, redes, key vaults

---

## 📦 Estrutura da solução

![](https://storage.ghost.io/c/00/52/0052dced-0017-4d07-b190-1f5c48e0ab59/content/images/2025/05/mermaid-diagram-2025-05-08-155259-1.png)

---

## 🚀 Pré-requisitos

- Azure CLI autenticado (`az login`)
- Terraform ≥ v1.4 instalado
- Permissão: Owner ou User Access Administrator na subscription
- Uma conta no GitHub para usar os módulos CAF

---

## 🛠️ Exemplo prático com Terraform

### 1\. Estrutura mínima de arquivos

```bash
azure-landingzone-tf/
├── main.tf
├── variables.tf
└── terraform.tfvars
```

### 2\. `main.tf`

```hcl
provider "azurerm" {
  features {}
}

module "caf-enterprise-scale" {
  source  = "Azure/caf-enterprise-scale/azurerm"
  version = "4.1.1"

  default_location = "eastus"
  root_parent_id   = data.azurerm_client_config.current.tenant_id
  deploy_management_resources = true

  library_path = "${path.module}/lib"
}

```

### 3\. Inicializando e aplicando

```bash
terraform init
terraform plan
terraform apply

```

O Terraform irá:

- Criar management groups hierarquizados
- Atribuir políticas de segurança
- Criar diagnósticos e logs
- Preparar um ambiente alinhado ao CAF

---

## Expandindo com módulos reutilizáveis

Você pode adicionar módulos para:

- VNet Hub & Spoke
- Azure Firewall ou DDoS
- Key Vault + Secrets
- Monitoramento com Log Analytics
- Azure AD Role assignments

### Exemplo: módulo de VNet

```hcl
module "hub-networking" {
  source  = "Azure/terraform-azurerm-network/azurerm"
  version = "4.0.0"
  name    = "hub-vnet"
  location = "eastus"
  address_space = ["10.0.0.0/16"]
}

```

---

## 🔄 Integração com CI/CD

Você pode aplicar tudo via **GitHub Actions**, usando um fluxo YAML como:

```yaml
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: 1.4.6

      - run: terraform init
      - run: terraform apply -auto-approve
        env:
          ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
          ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
          ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
          ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}

```

Use o [Azure Service Principal](https://learn.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli?ref=azurebrasil.cloud) com permissões para deploy.

---

## Boas práticas com Landing Zones + Terraform

| Prática recomendada                           | Benefício                                    |
| --------------------------------------------- | -------------------------------------------- |
| Versionar módulos com Git                     | Controle de mudanças                         |
| Segmentar ambientes por Workspace (Dev, Prod) | Isolamento de estado e deploys independentes |
| Integrar com Azure Policy                     | Garantir compliance automático               |
| Utilizar RBAC mínimo necessário               | Menor risco operacional                      |
| Usar Backends remotos (ex: Azure Storage)     | Armazenamento seguro do terraform.tfstate    |

---

## Referências oficiais

- [Azure CAF Enterprise-scale com Terraform](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/enterprise-scale/terraform-overview?ref=azurebrasil.cloud)
- [Módulo oficial no GitHub](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale?ref=azurebrasil.cloud)
- [Terraform + Azure Landing Zones (docs)](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/landing-zone/terraform-landing-zone?ref=azurebrasil.cloud)

---

## Conclusão

Utilizar Azure Landing Zones com Terraform traz um grande ganho de controle, repetibilidade e segurança. Você consegue escalar a criação de ambientes com governança, políticas e rede já prontas — seja em uma empresa pequena ou em um ambiente multi-cloud complexo.

Automatize sua fundação na nuvem com Terraform e comece certo desde o início.