
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.