Pular para o conteúdo
Entre em contato

O que é Terraform e como podemos começar a usá-lo?

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.

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

  1. Baixe o arquivo ZIP do site oficial do Terraform disponível em https://developer.hashicorp.com/terraform/install;
  2. Extraia o arquivo para um diretório da sua escolha (Algo como C:\Terraform);
  3. (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! 💡👨‍💻👩‍💻