Skip to content

ricardoteix/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 criar o 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 = "projeto"
}

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 destruir 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

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published