O Terraform é uma ferramenta de infraestrutura como código (IaC) que revolucionou a maneira como as equipes de DevOps, SRE e engenheiros de nuvem gerenciam e provisionam recursos de infraestrutura. Dessa forma, a idéia de hoje é a de explorar o que é o Terraform, seus benefícios e como você pode começar a usá-lo em seus projetos.
Então, o que é Terraform?
Terraform é uma ferramenta de código aberto desenvolvida pela Hashicorp que permite definir, criar e gerenciar infraestrutura de forma declarativa. Com o Terraform, você pode descrever sua infraestrutura desejada usando uma linguagem de configuração chamada Hashicorp Configuration Language (conhecido como HCL) ou JSON, e então usar o Terraform para criar e gerenciar essa infraestrutura em vários provedores de nuvem e serviços.
A principal filosofia por trás do Terraform é tratar a infraestrutura como código. Isso significa que você pode versionar, compartilhar e reutilizar suas configurações de infraestrutura da mesma forma que faz com o código de aplicativos.
Benefícios do Terraform
Multiplataforma
O Terraform suporta diversos provedores de nuvem, como AWS, Azure, Google Cloud, além de plataformas on-premises.
Declarativo
Você especifica o estado desejado da infraestrutura, e o Terraform se encarrega de determinar como alcançá-lo.
Planejamento e Previsibilidade
O comando terraform plan permite visualizar as mudanças antes de aplicá-las, reduzindo riscos.
Modularidade
Você pode criar módulos reutilizáveis para componentes comuns de infraestrutura.
Gerenciamento de Estado
O Terraform mantém um arquivo de estado que rastreia os recursos criados, facilitando o gerenciamento e a atualização da infraestrutura.
Legal, mas como dar os primeiros passos com o Terraform?
Instalação
Bom, a primeira coisa a se fazer para utilizar o Terraform, é fazer a sua instalação na sua máquina! O processo de instalação varia dependendo do seu sistema operacional, mas é geral é bem simples:
Windows
- Baixe o arquivo ZIP do site oficial do Terraform disponível em https://developer.hashicorp.com/terraform/install;
- Extraia o arquivo para um diretório da sua escolha (Algo como C:\Terraform);
- (OPCIONAL) Adicione o diretório ao PATH do sistema para que possa executar o Terraform de qualquer diretório.
Linux (Ubuntu / Debian)
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
macOS
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
Independente do sistema operacional, você pode validar a instalação do Terraform utilizando:
terraform version
Configuração do Provider
O próximo passo é configurar o provedor de nuvem que você deseja usar. Pela facilidade, vamos utilizar a AWS como exemplo!
1. Crie um novo diretório para o seu projeto Terraform:
mkdir meu-projeto-terraform
cd meu-projeto-terraform
2. Crie um arquivo chamado main.tf e adicione a configuração do provedor:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "us-west-2"
}
3. Inicialize o diretório do Terraform
terraform init
Definindo Recursos
Agora que temos o provider configurado, podemos começar a definir recursos. Vamos criar uma instância EC2 simples, para isso, adicione o seguinte código ao seu arquivo main.tf:
resource "aws_instance" "exemplo" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "exemplo-terraform"
}
}
Planejamento e Aplicação
Antes de criar os recursos, é uma boa prática revisar as mudanças que serão feitas:
terraform plan
Se estiver satisfeito com o plano, aplique as mudanças:
terraform apply
O Terraform solicitará confirmação antes de criar os recursos. Basta digitar yes para prosseguir.
Um ponto importante em relação ao comando apply, é que precisamos nos autenticar antes que ele faça efeito! Existem diversas formas de fazer isso para a AWS, basta checar a documentação do Terraform para escolher a melhor forma.
Destruindo Recursos
Quando não precisar mais dos recursos, você pode destruí-los com:
terraform destroy
Boas Práticas
- Versionamento: Mantenha seus arquivos Terraform em um sistema de controle de versão como o Git;
- Modularização: Divida configurações complexas em módulos reutilizáveis;
- Variáveis: Use variáveis para tornar suas configurações mais flexíveis e reutilizáveis;
- Workspaces: Utilize workspaces do Terraform para gerenciar múltiplos ambientes (dev, staging, prod) (Ou uma estratégia de pastas de ambiente);
- Estado Remoto: Armazene o estado do Terraform remotamente (por exemplo, no S3) para colaboração em equipe.
Casos de Uso Avançados
Infraestrutura Multi-Cloud
O Terraform brilha em cenários multi-cloud. Você pode definir recursos em diferentes provedores no mesmo arquivo de configuração:
provider "aws" {
region = "us-west-2"
}
provider "google" {
project = "meu-projeto-gcp"
region = "us-central1"
}
resource "aws_instance" "exemplo_aws" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
resource "google_compute_instance" "exemplo_gcp" {
name = "exemplo-terraform"
machine_type = "f1-micro"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
}
Criação de Módulos
Módulos são componentes reutilizáveis no Terraform. Veja um exemplo simples de um módulo para criar um bucket S3:
// modules/s3_bucket/main.tf
resource "aws_s3_bucket" "this" {
bucket = var.bucket_name
acl = "private"
tags = {
Environment = var.environment
Project = var.project
}
}
variable "bucket_name" {}
variable "environment" {}
variable "project" {}
output "bucket_id" {
value = aws_s3_bucket.this.id
}
Para usar este módulo:
module "meu_bucket" {
source = "./modules/s3_bucket"
bucket_name = "meu-bucket-unico"
environment = "production"
project = "meu-projeto"
}
output "bucket_id" {
value = module.meu_bucket.bucket_id
}
Conclusão
O Terraform é uma ferramenta poderosa que pode simplificar significativamente o gerenciamento de infraestrutura em ambientes de nuvem e on-premises. Ao tratar a infraestrutura como código, ele permite que equipes de DevOps e SRE automatizem a criação e gerenciamento de recursos de forma consistente e repetível.
Começar com Terraform é relativamente simples, mas dominar seus recursos avançados requer prática e experiência. À medida que você se familiariza com a ferramenta, você descobrirá maneiras cada vez mais poderosas de gerenciar sua infraestrutura, desde simples instâncias EC2 até complexas arquiteturas multi-cloud.
Lembre-se sempre de seguir as boas práticas, como versionamento de código, uso de módulos e gerenciamento adequado do estado. Com o tempo, você verá como o Terraform pode se tornar uma parte essencial do seu fluxo de trabalho de DevOps, permitindo que você gerencie infraestrutura com a mesma agilidade e confiabilidade que gerencia código de aplicativo.
🚀 A Toolbox agora tem um Discord público! 🎉
Quer tirar dúvidas sobre DevOps, automação, infraestrutura como código e muito mais? Agora temos um espaço para trocar ideias, compartilhar conhecimento e fortalecer a comunidade!
📢 Nosso Discord está aberto para todos que querem aprender, colaborar e crescer juntos no mundo da tecnologia. Seja você iniciante ou experiente, sua participação é bem-vinda!
🔗 https://discord.gg/RZ9ahphmDc
Junte-se a nós e faça parte dessa comunidade de aprendizado e evolução! 💡👨💻👩💻