Sua porta de entrada para conhecer o TERRAFORM! 💜
Fala galera, tranquilo?
Nesse post quero lhes mostrar o poder do Terraform em ação com uma simples integração, que você pode fazer enquanto lê os passos que serão descritos aqui.
Porém, antes de tudo precisamos conhecer o Terraform.
O que é o Terraform?
De forma simples, o Terraform é uma ferramenta que permite a criação e gerência de recursos nos mais diversos provedores (AWS, GCP, Azure, Github, Kubernetes, etc). Tudo isso de forma automatizada através de linhas de código! Caso queira se aprofundar mais nessas possibilidades, recomendo demais dar uma olhada no site do Terraform.
Ferramentas necessárias
Para continuar com os passos seguintes, é necessário ter instalado na sua máquina o Terraform, que possui uma instalação bem simples (veja mais na documentação). E também será necessário ter o Docker instalado, para fazermos a integração.
Mão na massa
Iremos baixar uma imagem do Docker e criar um container em cima dela, utilizando apenas o Terraform! Relembrando, nesse post não pretendo entrar em muitos detalhes. Como dito no título, servirá como uma porta de entrada para você conhecer a ferramenta.
Configurando os providers
Obs: Estarei utilizando o exemplo descrito na documentação do Terraform (link)
Primeiro, no seu editor de texto de preferência, crie um arquivo main.tf
e nele coloque o seguinte trecho de código:
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "3.0.1"
}
}
}
provider "docker" {
host = "unix:///var/run/docker.sock"
}
Isso é a maneira de comunicar ao Terraform que nosso provider de recursos será o Docker.
Definindo nossos recursos (imagem e container)
Em seguida, nesse mesmo arquivo, vamos baixar nossa imagem do Docker, que será a do nginx:
resource "docker_image" "nginx" {
name = "nginx:1.23.3-alpine"
}
O bloco resource possui dois "parâmetros". O primeiro é o tipo de recurso que desejamos criar, nesse caso uma imagem, e o segundo é o identificador único desse recurso, que serve para diferenciar os blocos de código caso tenhamos mais de um recurso do mesmo tipo. Esse identificador também é importante para referenciarmos essa imagem, como faremos abaixo para criar o container:
resource "docker_container" "nginx" {
# referenciando o recurso da imagem
image = docker_image.nginx.image_id
name = "nginx_alpine"
ports {
internal = 80
external = 8080
}
}
Aqui estamos criando nossa container com base na imagem que definimos antes, configurando o nome do container e as portas. Tudo isso você pode encontrar com mais detalhes nas documentações de cada recurso.
• Documentação do recurso de imagem
• Documentação do recurso de container
Criando nossos recursos de fato
Para garantir que nossa configuração está ok, rode o comando terraform validate
. Após isso, use o comando terraform plan
para visualizar as alterações que o Terraform irá fazer. Você verá, ao final do resultado do comando, algo desse tipo:
Plan: 2 to add, 0 to change, 0 to destroy.
Esse comando serve como uma espécie de relatório, alertando o que será criado, modificado ou deletado. Para aplicar essas mudanças use o comando terraform apply
. Após isso, o Terraform perguntará se você realmente deseja aplicar essas mudanças, e basta digitar "yes" (essa etapa de confirmação pode ser ignorada usando a flag -auto-approve
). Agora é só aguardar as mudanças serem implementadas. Por fim, caso tudo dê certo, você receberá uma mensagem assim:
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Agora basta rodar o comando docker image ls
e docker container ls
para confirmar que seus recursos foram criados.
Bônus
Nesse post mostrei apenas o básico dessa integração para não tornar a leitura muito extensa e cansativa. Caso deseje ver algumas alterações a mais, como separação dos recursos em arquivos, uso de variáveis, explicação do arquivo terraform.tfstate
(que é criado após rodar o terraform apply
), dá uma olhada no vídeo que fiz cobrindo tudo que foi feito aqui, além das modificações adicionais que citei.
• Link para o vídeo: clique aqui
Conclusão
Esse é o poder do Terraform! Espero que isso tenha lhe incentivado a conhecê-lo mais!
Sinta-se a vontade para deixar sua opinião nos comentários, um abraço!