Skip to content

coimbralex/terraform-zabbix

 
 

Repository files navigation

Introdução

Este projeto permite criar a infraestrutura mínima na AWS para execução de carga de trabalho baseada em uma única instância EC2. A proposta é criar todos os recursos necessários, como VPC, Subnet, Route Tables, EC2, RDS etc, para rodar um projeto em uma instância Ubuntu, 22.04 LTS.

O projeto a ser executado neste exemplo é o Zabbix.

Toda a infraestrutura será criada via Terraform.

Inclusão automática de hosts

Além de criaro EC2 e RDS com Zabbix, neste exemplo temos a automação de inclusão de instâncias como hosts do Zabbix. Isso quer dizer que, quando uma nova instância for criada na mesma região e vpc prevista neste exemplo, ela será incluída no Zabbix recém instalado por meio da Zabbix API utilizada via Python.

Para isso alguns recursos necessarios foram criados como:

  • Função Lambda para que é executada ao subir a instância;
  • Secret no Secrets Manager para armazenar credenciais e outros dados necessários;
  • Security Groups adicionais para o Zabbix Agent;
  • Profiles IAM para dar permissão à Lambda;
  • Recursos do Terraform para compactar e subir a função Lambda.

Terraform

Terraform é tecnologia para uso de infraestrutura como código (IaaC), assim como Cloudformation da AWS.

Porém com Terraform é possível definir infraestrutura para outras clouds como GCP e Azure.

Instalação

Para utilizar é preciso baixar o arquivo do binário compilado para o sistema que você usa. Acesse https://www.terraform.io/downloads

Iniciaizando o repositório

É preciso inicializar o Terraform na raiz deste projeto executando

terraform init

Definindo credenciais

O arquivo de definição do Terraform é o main.tf.

É nele que especificamos como nossa infraestrutura será.

É importante observar que no bloco do provider "aws" é onde definimos que vamos usar Terraform com AWS.

provider "aws" {
  region = "us-east-1"
  profile = "oficina-de-projetos"
}

Como Terraform cria toda a infra automaticamente na AWS, é preciso dar permissão para isso por meio de credenciais.

Apenar se ser possível especificar as chaves no próprio provider, esta abordagem não é indicada. Principalmente por este código estar em um repositório git, pois que tiver acesso ao repositório saberá qual são as credenciais.

Uma opção melhor é usar um profile da AWS configurado localmente.

Aqui usamos o profile chamado projeto. Para criar um profile execute o comando abaixo usando o AWS CLI e preencha os parâmetros solicitados.

aws configure --profile projeto

Variáveis - Configurações adicionais

Além da configuração do profile será preciso definir algumas variáveis.

Para evitar expor dados sensíveis no git, como senha do banco de dados, será preciso copiar o arquivo terraform.tfvars.exemplo para terraform.tfvars.

No arquivo terraform.tfvars redefina os valores das variáveis. Perceba que será necessário ter um domínio já no Route53 para que seja fornecido o Zone ID.

Todas as variáveis possíveis para este arquivo podem ser vistas no arquivo variables.tf. Apenas algumas delas foram utilizadas no exemplo.

Aplicando a infra definida

O Terraform provê alguns comandos básicos para planejar, aplicar e destroir a infraestrutura.

Ao começar a aplicar a infraestrutura, o Terraform cria o arquivo terraform.tfstate, que deve ser preservado e não deve ser alterado manualmente.

Por meio deste arquivo o Terraform sabe o estado atual da infraestrutura e é capar de adicionar, alterar ou remover recursos.

Neste repositório não estamos versionando este arquivo por se tratar de um repositório compartilhado e para estudo. Em um repositório real possívelmente você vai querer manter este arquivo preservado no git.

Verificando o que será criado, removido ou alterado

terraform plan

Aplicando a infraestrutura definida

terraform apply

ou, para confirmar automáticamente.

terraform apply --auto-approve

Destruindo toda sua infraestrutura

*CUIDADO!*
Após a execução dos comandos abaixo você perderá tudo que foi especificado no seu arquivo Terraform (banco de dados, EC2, EBS etc).
.

terraform destroy

ou, para confirmar automáticamente.

terraform destroy --auto-approve

Pós criação da infraestrutura

Após executar o terraform apply, é apresentado no terminal quantos recursos forma adicionados, alterados ou destruídos na sua infra.

No nosso código adicionamos mais algumas informações de saída (outputs) necessárias para acessarmos os recursos criados, como o banco de dados. Observe abaixo.

O acesso à aplicação será pelo endereço apresentado no projeto-dns, que também pode ser utilizado para acessar a instância.

O endereço host para o banco de dados RDS é apresentado em projeto-rds-addr.

Ser quiser observar os parâmetros do PHP no servidor acesse o endereço apresentado em server.

Apply complete! Resources: 23 added, 0 changed, 0 destroyed.

Outputs:

projeto-dns = "ec2-44-201-145-193.compute-1.amazonaws.com"
projeto-id = "i-0c3289412a3104db2"
projeto-ip = "44.201.145.193"
projeto-rds-addr = "projeto-rds.cmfcq1p7msvt.us-east-1.rds.amazonaws.com"
projeto-rds-endpoint = "projeto-rds.cmfcq1p7msvt.us-east-1.rds.amazonaws.com:3306"
server = "http://ec2-44-201-145-193.compute-1.amazonaws.com/info.php"

Recebendo notificação de implantação

Neste código nós também criamos recursos do SNS para notificar quando a implantação foi feita com sucesso.

No arquivo de .tfvars você deve especificar o email no qual deseja receber a notificação do final da implantação.

Fique atento para confirmar a inscrição do seu email no tópico SNS. Pouco após você executar o apply você receberá um email com o assunto AWS Notification - Subscription Confirmation e você deve clicar no Confirm subscription.

Após isso você deverá receber um email quando toda a implantação do Zabbix ocorrer. Observe que isso ocorre após o script user data finalizar a instação de tudo não apenas quando o Terraform terminar de subir a infra. Pode demorar um pouco mais do que esta parte.


Considerações finais

Este é um projeto para experimentações e estudo do Terraform. Mesmo proporcionando a criação dos recursos mínimos para execução do projeto na AWS, é desaconselhado o uso deste projeto para implantação de cargas de trabalho em ambiente produtivo.

Referências

  1. Terraform
  2. How to setup a basic VPC with EC2 and RDS using Terraform
  3. Variáveis Terraform para Packer
  4. Zabbix

About

Laboratório Zabbix_terraform_AWS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 54.1%
  • HCL 42.0%
  • Shell 3.9%