BLOG

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.

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

  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! 💡👨‍💻👩‍💻

    Foto de João Heytor

    João Heytor

    DevOps por escolha e colaborador por natureza! Prazer!

    Esta gostando do conteúdo ? Compartilhe!