Azure Event Hubs com Terraform

Azure Event Hubs com Terraform

Azure Event Hubs com Terraform

Neste artigo você vai criar um namespace Azure Event Hubs com Terraform, provisionando um namespace SKU Standard com três event hubs configurados para diferentes volumes de eventos: pedidos, pagamentos e notificações. Criar Azure Event Hubs com Terraform garante que toda a topologia de mensageria seja versionada como código, reproduzível em múltiplos ambientes e destruída com um único comando ao final dos testes.

Série: Kafka no Azure com Event Hubs
  • 📖 Art. 01: Kafka no Azure com Event Hubs
  • ⚙️ Art. 02 (este): Azure Event Hubs com Terraform
  • 🔒 Art. 03: Python e Kafka no Azure Event Hubs
  • 🔒 Art. 04: Kafka Connect no Azure Container Instances
  • 🔒 Art. 05: Schema Registry no Azure Event Hubs
  • 🔒 Art. 06: Monitoramento Kafka com Grafana no Azure

Sumário

Pré-requisitos

Para criar Azure Event Hubs com Terraform você precisa ter: (1) o Art. 01 desta série aplicado — o Resource Group rg-kafka-blog-castilho-eus deve existir; (2) Terraform ≥ 1.5 instalado; (3) Azure CLI autenticado (az login); (4) Storage Account para o tfstate (use a mesma da série). O módulo terraform-eventhub-modules referenciado no código está no repositório público e é clonado automaticamente pelo terraform init.

Arquitetura do namespace

O namespace Azure Event Hubs com Terraform que vamos criar usa o SKU Standard com 2 throughput units, suportando até 2 MB/s de entrada e 4 MB/s de saída. Dentro do namespace, três event hubs representam tópicos Kafka distintos, cada um dimensionado para o seu volume esperado de eventos.

Event HubPartiçõesRetençãoUso
evh-pedidos-blog-castilho-eus327 diasEventos de criação e atualização de pedidos
evh-pagamentos-blog-castilho-eus167 diasConfirmações e falhas de pagamento
evh-notificacoes-blog-castilho-eus83 diasPush notifications e emails

O número de partições é proporcional ao volume esperado: pedidos têm o maior throughput (32 partições), notificações têm o menor (8 partições). A retenção de notificações é menor (3 dias) porque uma notificação não entregue após 3 dias perde relevância.

Módulo terraform-eventhub-modules

O módulo terraform-eventhub-modules encapsula a criação do namespace Event Hubs e dos event hubs individuais. A interface do módulo recebe uma lista de event hubs com suas configurações — isso permite criar quantos event hubs forem necessários sem duplicar código. O módulo segue o padrão da série: naming convention com sufixo de região, tags obrigatórias e outputs com os IDs e connection strings necessários para os módulos seguintes.

Passo 1 — providers.tf

terraform {
  required_version = ">= 1.5"
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.110"
    }
  }
  backend "azurerm" {}
}

provider "azurerm" {
  features {}
}

Passo 2 — variables.tf

variable "tags" {
  type = map(string)
  default = {
    project     = "kafka-blog-castilho"
    environment = "lab"
    managed_by  = "terraform"
    series      = "kafka-azure"
  }
}

Passo 3 — main.tf: namespace e event hubs

O bloco principal do Azure Event Hubs com Terraform referencia o Resource Group via data source (criado no Art. 01) e chama o módulo passando a lista de event hubs. Cada item da lista define name, partition_count e message_retention_in_days.

data "azurerm_resource_group" "kafka" {
  name = "rg-kafka-blog-castilho-eus"
}

module "eventhub" {
  source              = "../../terraform-eventhub-modules"
  namespace_name      = "evhns-kafka-blog-castilho-eus"
  resource_group_name = data.azurerm_resource_group.kafka.name
  location            = data.azurerm_resource_group.kafka.location
  sku                 = "Standard"
  capacity            = 2
  tags                = var.tags

  event_hubs = [
    {
      name              = "evh-pedidos-blog-castilho-eus"
      partition_count   = 32
      message_retention = 7
    },
    {
      name              = "evh-pagamentos-blog-castilho-eus"
      partition_count   = 16
      message_retention = 7
    },
    {
      name              = "evh-notificacoes-blog-castilho-eus"
      partition_count   = 8
      message_retention = 3
    },
  ]
}

Passo 4 — outputs.tf

output "namespace_fqdn" {
  value = module.eventhub.namespace_fqdn
}

output "namespace_name" {
  value = module.eventhub.namespace_name
}

output "event_hub_names" {
  value = module.eventhub.event_hub_names
}

Passo 5 — Executar o Terraform

cp backend.hcl.example backend.hcl
# Editar backend.hcl com resource_group_name, storage_account_name, container_name, key

terraform init -backend-config=backend.hcl
terraform plan
terraform apply

O terraform plan mostrará a criação do namespace e dos 3 event hubs. O terraform apply leva cerca de 2-3 minutos para provisionar o namespace Azure Event Hubs com Terraform no Azure.

Resultado do apply

Após o apply do Azure Event Hubs com Terraform, os seguintes recursos estão disponíveis na sua subscription:

RecursoNomeDetalhe
Namespaceevhns-kafka-blog-castilho-eusSKU Standard, 2 TUs, East US
FQDN Kafkaevhns-kafka-blog-castilho-eus.servicebus.windows.netPorta 9093 (SASL_SSL)
Event Hubevh-pedidos-blog-castilho-eus32 partições, 7 dias
Event Hubevh-pagamentos-blog-castilho-eus16 partições, 7 dias
Event Hubevh-notificacoes-blog-castilho-eus8 partições, 3 dias

Verificar no Portal Azure

Para confirmar que o Azure Event Hubs com Terraform foi provisionado corretamente, acesse o Portal Azure → Resource Groups → rg-kafka-blog-castilho-eus → Event Hubs Namespace. Na aba Event Hubs do namespace, os três event hubs aparecem com suas respectivas configurações de partições. Na aba Overview, o endpoint Kafka é exibido no formato fqdn:9093.

Você também pode verificar via Azure CLI:

az eventhubs namespace show \
  --name evhns-kafka-blog-castilho-eus \
  --resource-group rg-kafka-blog-castilho-eus \
  --query "{name:name, sku:sku.name, kafkaEnabled:isKafkaEnabled}" \
  --output table

Troubleshooting

Erro: namespace name already taken — o nome do namespace é global no Azure. Se evhns-kafka-blog-castilho-eus já existe em outra subscription, altere o sufixo no variables.tf.

Erro: quota exceeded para throughput units — a subscription tem limite de TUs por região. Reduza capacity para 1 ou solicite aumento de quota no Portal Azure (Help + Support → New support request → Service limit).

Erro: partition_count cannot be decreased — no SKU Standard, o número de partições só pode ser aumentado, não reduzido. Faça terraform destroy e terraform apply com o novo valor para recriar o event hub.

Próximos passos

Com o namespace e os três event hubs do Azure Event Hubs com Terraform provisionados, o próximo artigo configura as auth rules SAS e consumer groups necessários para autenticar clientes Python que vão produzir e consumir mensagens no event hub de pedidos.

Série: Kafka no Azure com Event Hubs
  • 📖 Art. 01: Kafka no Azure com Event Hubs
  • ⚙️ Art. 02 (este): Azure Event Hubs com Terraform
  • 🔒 Art. 03: Python e Kafka no Azure Event Hubs
  • 🔒 Art. 04: Kafka Connect no Azure Container Instances
  • 🔒 Art. 05: Schema Registry no Azure Event Hubs
  • 🔒 Art. 06: Monitoramento Kafka com Grafana no Azure

Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI

🚀 Vamos nos conectar?

Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.

Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!


💬 Dúvidas ou Problemas?

Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!

Muito obrigado pela visita e até o próximo post!

Jefferson Castilho Especialista em Cloud & DevOps.

Este guia técnico é exclusivo do Blog do Castilho. Explore nossa para mais conteúdos sobre IA e Cloud.

 

Deixe uma resposta

Rolar para cima

Descubra mais sobre Blog do Castilho - Tecnologia | FinOps | DevOps | Cloud

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading