Ir para o conteúdo

Azure Data Lake Storage (Terraform)

Esta seção detalha a configuração da infraestrutura do Azure Data Lake Storage Gen2 (ADLS Gen2) utilizando Terraform. O objetivo é provisionar os containers necessários para as diferentes camadas do pipeline de dados (Landing Zone, Bronze, Silver e Gold), garantindo uma estrutura organizada, padronizada e otimizada para o processamento de dados em larga escala.

A documentação a seguir cobre os principais arquivos de configuração do Terraform, explicando a função de cada um e um guia passo a passo para a implantação e gerenciamento desses recursos no Azure, com foco em boas práticas e considerações de ambiente.


Estrutura do Módulo Terraform (ADLS)

O módulo Terraform para o ADLS está localizado em iac/adls/ e é composto pelos seguintes arquivos, cada um com uma responsabilidade específica na definição da infraestrutura:

  • main.tf: Contém a definição dos recursos Azure a serem criados, neste caso, os containers do ADLS Gen2.
  • output.tf: Define os valores que serão expostos após a aplicação do Terraform, facilitando a integração com outros módulos ou a consulta de informações.
  • provider.tf: Configura o provedor Azure (azurerm), especificando a versão e as funcionalidades necessárias para interagir com os serviços do Azure.
  • variables.tf: Declara as variáveis de entrada utilizadas pelo módulo, permitindo a parametrização e reutilização do código Terraform em diferentes ambientes ou contextos.

main.tf - Definição dos Containers

Este arquivo é o coração do módulo, responsável por instanciar os recursos do Azure. Aqui, são criados os quatro containers (Landing Zone, Bronze, Silver e Gold) dentro de uma Storage Account existente. A utilização de containers distintos para cada camada do pipeline de dados (Landing Zone, Bronze, Silver, Gold) é uma prática recomendada para organizar os dados com base em seu estágio de processamento e qualidade, facilitando a governança e o acesso.

# Define uma variável local para o nome da Storage Account existente.
# Em um módulo Terraform mais complexo, 'storage_account_name' seria tipicamente
# uma variável de entrada definida em 'variables.tf' e passada para este módulo.
variable "storage_account_name" {
  type        = string
  description = "The name of the existing Azure Storage Account where containers will be created."
  default     = "armazensatc" # Valor padrão para fins de demonstração
}

# Cria o container 'landing-zone'
# Destinado a dados brutos, sem transformações, diretamente da fonte.
resource "azurerm_storage_container" "landing-zone" {
  name                  = "landing-zone"
  storage_account_name  = var.storage_account_name
  container_access_type = "private" # Garante que o acesso é restrito e requer autenticação.
}

# Cria o container 'bronze'
# Armazena dados brutos, mas já com alguma estrutura ou formato padronizado (ex: Parquet).
resource "azurerm_storage_container" "bronze" {
  name                  = "bronze"
  storage_account_name  = var.storage_account_name
  container_access_type = "private"
}

# Cria o container 'silver'
# Contém dados limpos, transformados e enriquecidos, prontos para análise.
resource "azurerm_storage_container" "silver" {
  name                  = "silver"
  storage_account_name  = var.storage_account_name
  container_access_type = "private"
}

# Cria o container 'gold'
# Armazena dados agregados e prontos para consumo por aplicações de BI ou Machine Learning.
resource "azurerm_storage_container" "gold" {
  name                  = "gold"
  storage_account_name  = var.storage_account_name
  container_access_type = "private"
}

\ src/iac/adls/main.tf

output.tf - Saídas do Módulo

O arquivo output.tf define os valores que o módulo Terraform exportará após a conclusão da aplicação. Isso é extremamente útil para:

  1. Integração: Permitir que outros módulos Terraform ou scripts acessem informações sobre os recursos criados.
  2. Validação: Facilitar a verificação programática dos nomes dos recursos provisionados.
  3. Visibilidade: Fornecer um resumo claro dos nomes dos containers criados diretamente na saída do comando terraform apply.

output "adls_container_landing_zone" {
  description = "Name of the created storage container landing-zone"
  value       = azurerm_storage_container.landing-zone.name
}

output "adls_container_bronze" {
  description = "Name of the created storage container bronze"
  value       = azurerm_storage_container.bronze.name
}

output "adls_container_silver" {
  description = "Name of the created storage container silver"
  value       = azurerm_storage_container.silver.name
}

output "adls_container_gold" {
  description = "Name of the created storage container gold"
  value       = azurerm_storage_container.gold.name
}
\ src/iac/adls/output.tf

provider.tf - Configuração do Provedor Azure

Este arquivo é responsável por configurar o provedor que o Terraform usará para interagir com a infraestrutura cloud. No caso, o provedor azurerm é especificado, juntamente com sua versão mínima exigida. A fixação da versão (version = "3.3.0") é uma boa prática para garantir a reprodutibilidade do deploy e evitar que atualizações de provedor com mudanças incompatíveis (breaking changes) afetem inesperadamente sua infraestrutura.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.3.0" # Fixa a versão para garantir consistência e evitar breaking changes.
    }
  }
}

# Configura o provedor Microsoft Azure.
# O bloco 'features {}' é usado para habilitar ou desabilitar funcionalidades específicas do provedor,
# embora muitas vezes seja deixado vazio para usar as configurações padrão.
provider "azurerm" {
  features {}
}
\ src/iac/adls/provider.tf

variables.tf - Variáveis de Entrada

Este arquivo declara as variáveis de entrada que permitem a parametrização do módulo Terraform. A utilização de variáveis é fundamental para tornar o código reutilizável e adaptável a diferentes ambientes ou configurações sem a necessidade de modificar o código-fonte diretamente. As descrições (description) são cruciais para a documentação interna e para quem for utilizar o módulo, enquanto os valores default são úteis para testes rápidos ou para definir valores comuns.

# Define o nome do grupo de recursos como uma variável.
# Este grupo de recursos deve existir previamente ou ser criado por outro módulo Terraform.
variable "resource_group_name" {
  description = "O nome do grupo de recursos onde a Storage Account e os containers serão provisionados."
  type        = string
  default     = "rg-adls-terraform-demo" # Valor padrão para demonstração. Pode ser sobrescrito via CLI ou .tfvars.
}

# Define a localização (região Azure) como uma variável.
# É importante que esta localização seja a mesma da Storage Account existente.
variable "location" {
  description = "A localização (região Azure) onde os recursos serão criados."
  type        = string
  default     = "eastus" # Exemplo de região. Escolha uma região Azure que atenda aos seus requisitos de latência e soberania de dados.
}
\ src/iac/adls/variables.tf