Colocando em prática o conceito “Infrastructure as Code” com Terraform

“Infrastructure as Code” com Terraform

Olá a todos, meu nome é Hugo Cesar, sou engenheiro na Social Miner atuando como SysAdmin com foco em DevOps. Hoje vamos iniciar a construção de uma infraestrutura automatizada e estruturada dentro da AWS utilizando Terraform.

Terraform é uma “ferramenta de orquestração” open source desenvolvida pela HashiCorp, na qual você pode definir uma infraestrutura como código para aumentar a produtividade e transparência.

Projetada para provisionar toda network, serviços e servidores na maioria das clouds públicas, através de declarativos que podem ser compartilhados entre os membros da equipe, tratados como código, editados, revisados e versionados. Também pode-se ter um histórico completo das versões da sua infraestrutura, que por sua vez, pode ser compartilhada e reutilizada.

Capaz de realizar conjuntos de alterações complexos aplicados à sua infraestrutura com mínima interação humana. Com um plano de execução e gráfico de recursos, você sabe exatamente o que o Terraform mudará e em que ordem, evitando muitos possíveis erros humanos.

Que tal um exemplo?

Nesse primeiro post mostrarei como subir uma instância Linux dentro da AWS, junto com toda a estrutura necessária. Esse será um exemplo bem básico, só para sabermos como o Terraform funciona (fica aqui uma promessa de um tutorial bem mais complexo para meus próximos posts).

Bom, então precisaremos de:

  • Uma VPC;
  • Uma Subnet;
  • Um Internet Gateway;
  • Uma Route Table;
  • E por fim, o servidor deverá estar acessível através da porta TCP 22 para podermos acessa-lo via SSH, então precisaremos também de um Security Group contendo uma regra que libere esse acesso.

Antes de começar, não se esqueça de definir como variáveis de ambiente seu ID de chave de acesso (ACCESS_KEY_ID) e sua Chave de acesso secreta (SECRET_ACCESS_KEY) da AWS, através dos comandos:

Em casos de dúvidas de como obte-los, clique aqui.

Com as variáveis de ambiente criadas, vamos começar criando um Key Pair para podermos associa-lo a instância e o utilizarmos para acessa-la.

Acesse o painel da AWS, vá para a seção do serviço EC2. Entre na aba Key Pairs e clique em Create Key Pair.

AWS Console Create Key Pair

Após clicar em “Create” será feito o download do arquivo “teste.pem”. Vamos conceder a permissão de acesso recomendada pela AWS para o nosso arquivo baixado através do comando:

E move-lo para a pasta de nosso projeto.

Retornando ao Terraform…

Seus templates são escritos em uma linguagem declarativa chamada HCL (HashiCorp Configuration Language) com a extensão “.tf “. Então, já dentro da pasta de nosso projeto, crie um arquivo chamado “main.tf ”.

Primeiro diremos ao Terraform que usaremos a AWS como provedor e a região na qual nossos recursos serão implementados.

Agora iremos informar que criaremos uma VPC, uma Subnet e um Internet Gateway. Atenção para a referência do ID da VPC declarado por: tipo e nome do recusro, e o que queremos extrair separados por “.”. Com isso mostramos ao Terraform que queremos criar a Subnet e o Internet Gateway dentro da VPC que foi declarada.

Na declaração da Route Table também referenciaremos a VPC pelo seu ID. Mas agora informaremos que a rota para todos os IPs (0.0.0.0/0) que não são de nossa rede local, passará pelo nosso Internet Gateway (referenciado do mesmo modo que fazemos com o ID da VPC). 

Associaremos essa Route Table à nossa Subnet através do recurso chamado aws_route_table_association.

Criaremos um EC2 do tipo t2.micro que use a imagem “Amazon Linux AMI” como SO, o nome da Key Pair (que criamos no início do tutorial) para ser acessada e a referência do ID da Subnet que iremos colocar essa instância.

Por fim, referenciado na instância, teremos ID do Security Group que tamém estaremos criando como recurso, já configurando uma regra de Ingress (entrada) e Egress (saída).

Você pode configurar outros parâmetros durante a declaração de seus recursos, os mesmos estão acessíveis no site do Terraform (Documentação do recurso aws_instance).

A AMI das imagens principais pode ser adquirida no console da AWS após o login. Simule a instalação de uma instância clicando em Lauch Instance e navegue pelas imagens principais. O número da imagem que começa com “ami” é exibido lá:

Enfim…

Antes de criarmos a infraestrutura, precisamos instalar o Plugin AWS para o Terraform. Dentro da pasta de nosso projeto, execute o comando “terraform init:

Para ver o que o Terraform fará antes de realizar o deploy dos recursos, é recomendado sempre executar o comando “terraform plan” para verificar suas alterações antes de soltá-las no mundo:

Hora da verdade

Para aplicar as alterações execute o comando “terraform apply”. Com o comando “terraform plan” já validado, podemos adicionar a opção “auto-approve, que aprovará automaticamente as alterações, ficando “terraform apply -auto-approve”:

Agora vamos validar se nossos recursos foram todos criados dentro do console da AWS:

E por fim, acessaremos nossa instância através de seu IP púbico (para validar nosso deploy via Terraform):

Funcionou!

Bom, por hoje é só, espero que tenham gostado! Vou ficando por aqui e, caso queira deletar o que o Terraform criou, basta executar o comando “terraform destroy” seguidamente de “yes e todos os recursos criados através do “main.tf” serão removidos:

Published by

Hugo Barbiellini

Gamer, Narguileiro e DevOps :)

One thought on ““Infrastructure as Code” com Terraform”

Leave a Reply

Your email address will not be published. Required fields are marked *