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.
- 📖 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
- Arquitetura do namespace
- Módulo terraform-eventhub-modules
- Passo 1 — providers.tf
- Passo 2 — variables.tf
- Passo 3 — main.tf: namespace e event hubs
- Passo 4 — outputs.tf
- Passo 5 — Executar o Terraform
- Resultado do apply
- Verificar no Portal Azure
- Troubleshooting
- Próximos passos
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 Hub | Partições | Retenção | Uso |
|---|---|---|---|
evh-pedidos-blog-castilho-eus | 32 | 7 dias | Eventos de criação e atualização de pedidos |
evh-pagamentos-blog-castilho-eus | 16 | 7 dias | Confirmações e falhas de pagamento |
evh-notificacoes-blog-castilho-eus | 8 | 3 dias | Push 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:
| Recurso | Nome | Detalhe |
|---|---|---|
| Namespace | evhns-kafka-blog-castilho-eus | SKU Standard, 2 TUs, East US |
| FQDN Kafka | evhns-kafka-blog-castilho-eus.servicebus.windows.net | Porta 9093 (SASL_SSL) |
| Event Hub | evh-pedidos-blog-castilho-eus | 32 partições, 7 dias |
| Event Hub | evh-pagamentos-blog-castilho-eus | 16 partições, 7 dias |
| Event Hub | evh-notificacoes-blog-castilho-eus | 8 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.
- 📖 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.


