https://github.com/chcdc/cluster-rabbitmq-example
A simple example repository for creating a rabbitmq cluster with three nodes.
https://github.com/chcdc/cluster-rabbitmq-example
ansible chcdc devops hacktoberfest rabbitmq terraform
Last synced: about 2 months ago
JSON representation
A simple example repository for creating a rabbitmq cluster with three nodes.
- Host: GitHub
- URL: https://github.com/chcdc/cluster-rabbitmq-example
- Owner: chcdc
- Created: 2025-03-18T00:55:13.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-14T20:35:07.000Z (about 1 year ago)
- Last Synced: 2025-06-14T21:34:42.673Z (about 1 year ago)
- Topics: ansible, chcdc, devops, hacktoberfest, rabbitmq, terraform
- Language: HCL
- Homepage:
- Size: 15.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Cluster RabbitMQ na AWS
Este projeto automatiza a criação e configuração de um cluster RabbitMQ na AWS usando **Terraform** para provisionar a infraestrutura e **Ansible** para configurar os serviços.
## 📋 Visão Geral
O projeto cria um cluster RabbitMQ altamente disponível com:
- **1 nó master** para coordenação do cluster
- **2 nós worker** para distribuição de carga
- **Spot Instances** para redução de custos
- **Configuração automática** do cluster
- **Interface web** do RabbitMQ habilitada
## 🏗️ Arquitetura
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ RabbitMQ │ │ RabbitMQ │ │ RabbitMQ │
│ Master Node │◄──►│ Worker Node 1 │◄──►│ Worker Node 2 │
│ (t3.small) │ │ (t3.small) │ │ (t3.small) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────────┐
│ AWS VPC │
│ Security Groups │
│ Multiple Subnets │
└─────────────────────┘
```
## 🚀 Pré-requisitos
### Ferramentas Necessárias
- **Terraform** >= 1.0
- **Ansible** >= 2.9
- **AWS CLI** configurado
- **Chave SSH** (`~/.ssh/id_rsa.pub`)
### Configuração AWS
```bash
# Configure suas credenciais AWS
aws configure
```
### Variáveis Obrigatórias
Você precisa definir as seguintes variáveis no Terraform:
- `vpc_id`: ID da VPC onde as instâncias serão criadas
- `subnet_ids`: Lista de IDs das subnets
## 📁 Estrutura do Projeto
```
cluster-rabbitmq-example/
├── terraform/ # Infraestrutura como código
│ ├── main.tf # Recursos principais
│ ├── variables.tf # Variáveis configuráveis
│ ├── outputs.tf # Outputs do Terraform
│ ├── providers.tf # Configuração de provedores
│ └── modules/
│ └── spot-instance/ # Módulo para spot instances
├── ansible/ # Configuração e automação
│ ├── main.yml # Playbook principal
│ ├── aws_ec2.yml # Inventário dinâmico AWS
│ ├── ansible.cfg # Configurações do Ansible
│ ├── group_vars/ # Variáveis por grupo
│ │ └── debian.yml # Configurações específicas do Debian
│ └── roles/
│ └── rabbitmq/ # Role do RabbitMQ
│ ├── tasks/ # Tarefas de configuração
│ ├── templates/ # Templates de configuração
│ ├── handlers/ # Handlers para restart de serviços
│ └── vars/ # Variáveis do role
└── README.md # Este arquivo
```
## 🛠️ Instalação e Uso
### 1. Provisionar Infraestrutura
```bash
cd terraform/
# Inicializar Terraform
terraform init
# Revisar o plano de execução
terraform plan
# Aplicar as mudanças
terraform apply
```
### 2. Configurar Cluster RabbitMQ
```bash
cd ../ansible/
# Verificar inventário de hosts
ansible-inventory -i aws_ec2.yml --graph
# [Opcional] Gerar inventário estático
ansible-playbook -i aws_ec2.yml generate_inventory.yml
# Aplicar configurações do RabbitMQ
ansible-playbook main.yml
```
## ⚙️ Configurações
### Terraform - Variáveis Principais
| Variável | Descrição | Padrão | Obrigatório |
|----------|-----------|--------|-------------|
| `vpc_id` | ID da VPC | - | ✅ |
| `subnet_ids` | Lista de IDs das subnets | - | ✅ |
| `debian_instance_count` | Número de nós worker | 2 | ❌ |
| `debian_instance_master_count` | Número de nós master | 1 | ❌ |
| `debian_instance_type` | Tipo de instância | t3.small | ❌ |
| `spot_price` | Preço máximo spot | 0.016 | ❌ |
| `key_name` | Nome da chave SSH | ssh-key | ❌ |
| `allowed_ssh_cidr` | CIDRs permitidos para SSH | ["0.0.0.0/0"] | ❌ |
### Exemplo de arquivo `terraform.tfvars`:
```hcl
vpc_id = "vpc-12345678"
subnet_ids = ["subnet-12345678", "subnet-87654321"]
debian_instance_count = 2
debian_instance_master_count = 1
spot_price = "0.020"
allowed_ssh_cidr = ["10.0.0.0/8", "172.16.0.0/12"]
```
## 🌐 Acesso ao RabbitMQ
Após a instalação, você pode acessar:
- **Interface Web**: `http://:15672`
- **Usuário padrão**: Configurado pelo Ansible
- **Porta AMQP**: 5672
- **Porta Management**: 15672
## 🔧 Troubleshooting
### Problemas Comuns
**1. Erro de credenciais AWS**
```bash
aws configure list
aws sts get-caller-identity
```
**2. Instâncias spot não disponíveis**
- Aumente o `spot_price` no `variables.tf`
- Considere usar instâncias on-demand
**3. Falha na configuração do cluster**
```bash
# Verificar logs do Ansible
ansible-playbook main.yml -vvv
# Verificar conectividade
ansible all -i aws_ec2.yml -m ping
```
**4. Chave SSH não encontrada**
```bash
# Verificar se a chave existe
ls -la ~/.ssh/id_rsa.pub
# Gerar nova chave se necessário
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
## 🔐 Segurança
### Recomendações de Segurança
- ✅ Use CIDRs específicos em `allowed_ssh_cidr`
- ✅ Configure usuários específicos do RabbitMQ
- ✅ Use SSL/TLS em produção
- ✅ Implemente backup regulares
- ✅ Monitore logs de acesso
### Security Groups
O projeto cria security groups com as seguintes regras:
- **SSH (22)**: Acesso restrito por CIDR
- **RabbitMQ Management (15672)**: Interface web
- **RabbitMQ AMQP (5672)**: Comunicação entre aplicações
- **Tráfego interno**: Comunicação entre nós do cluster
## 📊 Monitoramento
O RabbitMQ Management Plugin é habilitado automaticamente e fornece:
- Dashboard com métricas em tempo real
- Monitoramento de filas
- Gestão de usuários e permissões
- Visualização da topologia do cluster
## 🤝 Contribuindo
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abra um Pull Request
## 🆘 Suporte
Para problemas e dúvidas:
1. Verifique a seção de [Troubleshooting](#🔧-troubleshooting)
2. Abra uma issue neste repositório
---
**⚠️ Aviso**: Este projeto usa spot instances para reduzir custos, mas elas podem ser interrompidas pela AWS. Para ambientes de produção, considere usar instâncias on-demand ou reserved instances.