image.png!

O Terraform é um software de código aberto normalmente utilizado para construção, manutenção e versionamento de uma infraestrutura de maneira eficiente e segura, através de linguagem declarativa. Atualmente uma grande variedade de nuvens públicas ( AWS, GCP, Azure, Digital Ocean…) e privadas, como OpenStack, tem suporte para ter implentações de infraestrutura por código com o Terraform. Inclusive essa é uma das habilidades que as empresas estão buscando de maneira mais incisiva no mercado, pois com a ascenção de microserviços e do Cloud Computing, quem domina a infraestrutura como código está um passo a frente dos demais, pois com alguns comandos temos uma infraestrutura rodando na nuvem.

Para iniciarmos é importante que você tenha instalado o Terraform na sua máquina, como esse é um processo bem simples e você pode estar lendo esse artigo de qualquer SO, deixarei o link da página de downloads para facilitar sua chegada ao site da Terraform, aonde você irá procurar pelo seu sistema operacional e a forma de realizar a instalação.

image.png!

Após a instalação vamos começar a criar nossa infraestrutura, o que é pré-requisito para fazermos esse tutorial:

  • Ter um usuário criado na AWS, com permissões para provisionar EC2.
  • Ter a access-key e secret-key do usuário.

Caso você não tenha um usuário, ele pode ser criado de maneira simples pelo IAM da sua conta root na AWS, e as chaves necessárias podem ser criadas pela guia CREDENCIAIS DE SEGURANÇA. Agora vamos iniciar criando nosso primeira arquivo que se chamará “main.tf”, nele vamos configurar nossa conexão com a AWS, para isso, vou deixar aqui o código que iremos utilizar, é importante ressaltar que encontramos os templates nas documentações oficiais do Terraform. Nosso arquivo “main.tf” ficará assim:

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "4.25.0"
    }
  }
}
provider "aws" {
  region     = "us-east-1"
  access_key = "access_key"
  secret_key = "secret_key"
}

A única coisa a ser substituída será os valores na frente das chaves de access_key e secret_key pois você irá colocar os valores do seu usuário específico, e a region se você utilizar outra na AWS, pode modificar conforme a sua preferência.

Após isso, vamos para o nosso passo número 2, que é criar um Security Group, que é um grupo no qual podemos ter um controle de tráfego sobre quem tem permissão para acessar e sair dos recursos. Então crie na mesma pasta um outro arquivo chamado “security_group.tf” e escreva o seguinte:

resource "aws_security_group" "SG_TF" {
  name        = "SG_TF"
  description = "Permite acesso SSH as instancias"

  ingress {
    description      = "libera_ssh"
    from_port        = 22
    to_port          = 22
    protocol         = "tcp"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
}

Nesse código na primeira linha mostra que estamos criando um recurso que é um Security Group e o nome que estamos dando a esse grupo que no caso é SG_TF, nesse grupo que criamos só vamos configurar uma coisa, que é uma regra de entrada na porta 22 para podermos acessar nossas instâncias via SSH, como é um teste vamos liberar de qualquer IP, por isso o cidr_blocks está com “0.0.0.0/0”.

Agora a parte 3, desencadeia o nosso terceiro arquivo a ser criado que é o “instance.tf” aonde vamos de fato criar nossas instâncias EC2 na AWS, para esse step é necesário que vc crie uma “Key Pair” na AWS e baixe ela na sua máquina e coloque na pasta aonde estamos criando. Se você nunca criou, você encontrará facilmente dentro de EC2 no menu lateral em “Redes e Segurança” a opção “Pares de chave”. Após isso vamos para o que vamos escrever em nosso código:

resource "aws_instance" "luiz_teste" {
  count = 2
  ami           = "ami-090fa75af13c156b4"
  instance_type = "t2.micro"
  key_name = "terraform-teste" 
  
  tags = {
    Name = "luiz_teste"
    env = "tst"
  }

  vpc_security_group_ids = [ aws_security_group.SG_TF.id ]  
} 

Estamos criando 2 instâncias utilizando uma imagem da Amazon Linux que se enquadra no nosso plano gratuito, o tipo de instância é o t2.micro que também faz parte do plano gratuito, visto que nosso propósito é somente de subir a infraestrutura. O key_name é o nome do par de chaves que você criou dentro da AWS e por último a identificação das instâncias dentro do security group que criamos para nossa infra.

Agora, com nosso terminal aberto vamos utilizar três comandos, primeiro usaremos um $ terraform init, depois um $ terraform plan, que irá fazer o planejamento de tudo que será criado na AWS. Após isso vamos para o último comando que é o $ terraform apply onde toda a mágica vai ocorrer.

Se verificarmos no Console da AWS vamos verificar que rapidamente tudo está funcionando e no seu devido lugar como podemos ver abaixo:

image.png!

image.png!

Conclusão

Se você não aprendeu Terraform, eu te aconselho a começar a olhar com mais carinho para essa tecnologia, pela facilidade e demanda que ela tem tido ultimamente, na internet achamos vários materiais gratuitos da ferramenta que facilitam e muito nossa aprendizagem, caso você nunca tenha tido contato com a ferramenta. Após esse artigo, creio que você conseguirá dar seus primeiros passos na Infra as Code.