Hoje vamos abordar o quickstart de uma ferramenta muito bacana que eu estou estudando. O Terraform. Essa ferramenta foi criada e mantida pela Hashicorp e serve para realizar provisionamento de vários componentes de infraestrutura através de código, com base no conceito de IaC (Infraestructure as a Code) com foco em Cloud Providers como AWS, Azure, Google Cloud e etc. Ele pode ser utilizado junto a outros gerenciadores de configuracão como Ansible, Chef e Puppet, e também pode substituir o uso dos mesmos em vários casos. Vou manter uma série de postagens sobre o mesmo junto a um repositório de exemplos no Github que eu estou usando de Sandbox para meus estudos.
Link do Repositório
Neste exemplo vamos fazer o deploy de duas instâncias EC2 rodando um webserver simples abaixo de um ELB (Elastic Load Balancer) que irá distribuir a carga dos requests HTTP entre elas, além de fazer o register delas automaticamente e implementar rotinas de health checks básicas para monitorar a saúde das mesmas. Vamos lá.
Instalação do Terraform
O Terraform é um CLI que tem distribuição pra praticamente todas as plataformas. Em alguns casos você vai encontrar o mesmo no gerenciador de pacotes da sua distribuição, mas para fins generalistas vamos fazer a instalação diretamente da source da Hashicorp.Docs do Terraform
Linux
$ wget https://releases.hashicorp.com/terraform/0.10.8/terraform_0.10.8_linux_amd64.zip
$ unzip terraform_0.10.8_linux_amd64.zip
$ chmod +x terraform
$ sudo mv terraform /usr/bin
Mais opções de instação
Setup das Credenciais da AWS
Será necessário que você gere uma Access Key e uma Secret Key de acesso no console do IAM no painel da AWS para esse exemplo.Configuração das Credenciais via AWS CLI
$ aws configure
Configuração das credenciais via variáveis de ambiente
$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
variables.tf
Nosso arquivo é bem simples. Vamos criar somente 4 variáveis, a region onde iremos fizar a região default onde será realizado o deploy da nossa infraestrutura, a key_path onde teremos que alterar para apontar o caminho da sua chave pública. Será necessário especificar o caminho da home do seu usuário apontando para o arquivo id_rsa.pub, o ami onde iremos especificar o id da nossa AMI, neste exemplo estarei utilizando a versão mais recente da Amazon Linux e por fim o instance_type onde iremos utilizar o tamanho t2.micro.main.tf
Esse arquivo é o arquivo mais importante. Nele vamos definir nossos resources, ou seja, nossos security groups, as duas EC2 de exemplo e nosso load balance referenciando as duas. Todas as variáveis que utilizamos no arquivo variables.tf vão ser referenciadas aqui.Vamos começar declarando nosso cloud provider como AWS. Quando começarmos a configurar o ambiente, o Terraform irá procurar por essa configuração para fazer o bootstrap do nosso Deploy. Em seguida vamos criar as regras do nosso Security Group. Onde vamos liberar tráfego livre para a porta 80 da nossa aplicação.
Vamos criar dois objetos do tipo aws_instance chamados webserver001 e webserver002. Neles vamos referenciar a maioria das nossas variáveis criadas anteriormente, como o tipo da instância, o id da AMI, nossa Key Pair, Security Groups e etc.
Em seguida vamos configurar nosso Elastic Load Balancer. A configuração é bem simples. Iremos liberar a porta 80 como listener e referenciar as instâncias que estamos criando.
user-data
Vamos criar um diretório e dois arquivos .sh dentro. Esses scripts vão dar lugar ao user-data da instância, ou seja, são os scripts que serão executados no boot da máquina para realizar as configurações iniciais. Eles vão ser responsáveis por instalar o Apache (httpd) e iniciar o serviço dos mesmos. Em seguida vamos inserir uma imagem diferente em cada instância para diferenciarmos visualmente as instâncias durante o o teste. Bem simples.
$ mkdir user-data
$ touch user-data/{webserver001.sh,webserver002.sh}
webserver001.sh
webserver002.sh
Rodando o Deploy
Para realizar o deploy da nossa infra, vamos rodar o comando apply do Terraform. Esse comando irá ler todos os nosso resources que criamos nos arquivos e criar os mesmos na AWS via API. Mas antes precisamos executar o comando init para que o Terraform identifique o nosso cloud provider e faça o download de todos os assets necessários para o deploy do projeto.
$ terraform init
$ terraform apply
Agora no painel da AWS, vamos no console do EC2. Vamos aguardar que as duas instâncias fiquem com o state no modo running e passem em todos os Status Checks.
Agora na opção Load Balancers. Nele vamos para a aba Instances. Vamos verificar se todas as duas instâncias estão com o Status InService. Isso significa que as duas instâncias passaram em nossos health checks, ou seja, nosso serviço do Apache subiu conforme o previsto.
Agora vamos copiar o DNS do nosso Load Balancer e acessar o mesmo várias vezes no nosso Browser.
Destruindo nossa Infra (God Mode)
Para remover toda a infra que criamos é BEM simples e BEM divertido. As vezes quando estou estressado eu subo alguns templates do Terraform só pra destruir. Sério, queria que todas as pessoas do mundo sentissem isso.
$ terraform destroy
Veja os exemplos completos no Github
Espero ter ajudado! :)
parabéns pelo post
ResponderExcluir