Unidade 2 - Especialização DevOps

Infrastructure as Code com Terraform

Aprenda a provisionar, gerenciar e automatizar sua infraestrutura em nuvem através de código declarativo.

W
T

Desenvolvido pelo Prof. Waldinei Bispo de Lima

Recriado por Leonardo do Espirito Santo da Silva

Infrastructure as Code Visualization
16h
Carga Horária Total
4
Seções Teóricas
2
Estudos de Caso

O que você vai aprender

Domine os conceitos fundamentais e práticos de Infrastructure as Code com Terraform

💻

Infrastructure as Code

Compreenda os conceitos fundamentais de IaC, suas limitações da abordagem manual e benefícios da automação.

☁️

Terraform & HCL

Explore a linguagem HCL, estrutura de projetos e o ciclo de vida do Terraform (init, plan, apply, destroy).

Provedores & Recursos

Entenda como o Terraform se conecta a diferentes plataformas, com foco no provedor AWS.

Pronto para começar?

Explore os conceitos fundamentais de Infrastructure as Code e domine o Terraform

Começar Agora →

O que é Infrastructure as Code?

Infrastructure as Code (IaC) é um paradigma que trata a definição e o gerenciamento da infraestrutura (redes, servidores, bancos de dados, balanceadores de carga, etc.) da mesma forma que tratamos o código de uma aplicação.

Em vez de configurar servidores manualmente através de um console, com IaC descrevemos o estado desejado da infraestrutura em arquivos de configuração declarativos. Esses arquivos se tornam a única fonte da verdade.

  • Versionável

    Arquivos podem ser versionados em Git com histórico completo de mudanças

  • Reprodutível

    Crie ambientes idênticos (dev, teste, produção) a partir do mesmo código

  • Testável

    Valide mudanças antes de aplicá-las à produção

Terraform Infrastructure

Limitações da Abordagem Manual

⚠️ Problemas da Abordagem Manual

  • Configuration Drift: Estado real diverge do documentado
  • Downtime: Mudanças requerem paradas do sistema
  • Erros Humanos: Execução manual é propensa a falhas
  • Falta de Rastreabilidade: Difícil auditar quem fez o quê
  • Escalabilidade Limitada: Difícil replicar ambientes

Benefícios do IaC

  • Velocidade: Provisione ambientes em minutos
  • Consistência: Todos os ambientes são idênticos
  • Redução de Risco: Testes automatizados e code review
  • Auditoria: Histórico completo de mudanças
  • Custo: Otimize gastos com nuvem

Introdução ao Terraform

O Terraform é uma ferramenta de orquestração de infraestrutura criada pela HashiCorp que permite definir, provisionar e gerenciar infraestrutura em ambientes de nuvem de forma segura e eficiente.

Características Principais

  • 💡

    Agnóstico em Relação à Nuvem

    Funciona com AWS, Google Cloud, Azure, OpenStack e muito mais

  • 💡

    Linguagem Declarativa (HCL)

    Descreva o que você quer, não como fazer

  • 💡

    Ciclo de Vida Simples

    init → plan → apply → destroy

Visite o site oficial do Terraform →

DevOps Workflow

Linguagem HCL

O Terraform utiliza HCL (HashiCorp Configuration Language), uma linguagem declarativa projetada para ser fácil de ler e escrever por humanos.

Estrutura básica de um bloco HCL:

BLOCK_TYPE "BLOCK_LABEL" "BLOCK_LABEL" { IDENTIFIER = EXPRESSION # Argumentos atribuem valores a nomes }

Blocos

Contêineres para configurações. O tipo define o objeto sendo configurado (resource, variable, provider)

Argumentos

Atribuem valores a nomes dentro de um bloco

Rótulos

Nomes dados a um bloco (ex: tipo de recurso e nome local)

Expressões

Representam um valor, literal ou referência a outros valores

Próximo Passo: Prática

Agora que você compreende os conceitos fundamentais, explore exemplos práticos e estudos de caso

Ir para Prática

Fluxo de Trabalho do Terraform

Compreenda como o Terraform processa seu código Infrastructure as Code, desde a escrita do arquivo .tf até o provisionamento dos recursos na nuvem. O fluxo envolve o Developer escrevendo código HCL, o Terraform Core interpretando esse código, os Providers conectando-se aos serviços em nuvem (como AWS), e finalmente os Resources sendo criados.

Fluxo de Trabalho do Terraform

Componentes do Fluxo

  • Developer: Escreve arquivos .tf com código HCL
  • Terraform Core: Interpreta e processa o código
  • Provider (AWS): Conecta-se ao serviço em nuvem
  • Resources: S3 Buckets, EC2 Instances, etc.
  • State File: Mantém o estado da infraestrutura

Ciclo de Vida do Terraform

1

init

Inicializa um diretório Terraform, baixa providers e prepara o ambiente

2

plan

Cria um plano de execução mostrando quais recursos serão criados/modificados

3

apply

Executa o plano e provisiona os recursos na nuvem

4

destroy

Remove todos os recursos gerenciados pelo Terraform

Exemplo de Comando

$ terraform init $ terraform plan -out=tfplan $ terraform apply tfplan $ terraform destroy
Estudo de Caso 1

Website Estático no Amazon S3

Neste caso prático, você aprenderá a provisionar um bucket S3 da Amazon Web Services para hospedar um website estático, comparando a abordagem manual com a automatizada via Terraform.

Conceitos Abordados

  • 💻 Criação de buckets S3 com Terraform
  • 💻 Configuração de acesso público
  • 💻 Hospedagem de website estático
  • 💻 Comparação: Manual vs. Terraform

Lições Aprendidas

  • • Automação reduz tempo de provisionamento de horas para minutos
  • • Código é mais confiável que procedimentos manuais
  • • Fácil replicar a mesma infraestrutura em múltiplos ambientes
  • • Histórico de mudanças fica registrado no Git

Documentação AWS S3 Bucket →

Exemplo de Código

resource "aws_s3_bucket" "website" { bucket = "meu-website-estatico" } resource "aws_s3_bucket_website_configuration" "website" { bucket = aws_s3_bucket.website.id index_document { suffix = "index.html" } error_document { key = "error.html" } }
Estudo de Caso 2

Instância EC2 com Manipulações de Recursos

Aprenda a provisionar uma instância EC2 na AWS com Terraform, incluindo configurações de rede, segurança e manipulações de recursos durante o ciclo de vida.

Conceitos Abordados

  • 🗄️ Provisionamento de instâncias EC2
  • 🗄️ Configuração de VPC e Security Groups
  • 🗄️ Manipulação de recursos (update, replace)
  • 🗄️ State management e outputs

Pontos-Chave

  • • O Terraform gerencia o estado da infraestrutura
  • • Mudanças no código geram planos de execução claros
  • • Alguns recursos são substituídos, outros são atualizados
  • • Outputs permitem acessar informações dos recursos criados

Documentação AWS EC2 Instance →

Exemplo de Código

resource "aws_instance" "web" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" vpc_security_group_ids = [ aws_security_group.web.id ] tags = { Name = "WebServer" } } output "instance_ip" { value = aws_instance.web.public_ip }

Recursos Adicionais

Próxima Etapa

Você está preparado para a Unidade 3: Gerenciamento de Configuração com Ansible

Voltar ao Início