1 of 21

Infraestrutura como código com Terraform

Rafael Dutra

https://www.linkedin.com/in/rafaeldutra/

2 of 21

  • Ocupação: Administrador de Sistemas e entusiasta Dev*Ops
  • Segurança da Informação - UNISINOS 2008 - ?
  • Linux desde 2005
  • Desenvolvedor: PHP (Laravel*), Shell Script, Ruby
  • Interesses: Vagrant, Puppet, Terraform, Ansible, Linux, CI/CD, Kubernetes, Cloud Computing, Desenvolvimento, IaC, Containers, Android, Video Games (FPS e RPG)...

Rafael Dutra

3 of 21

  • Tratar Infraestrutura como Software
    • Versionamento
      • Tags
      • Code Review
      • Merge Requests
    • Entrega contínua
  • Pipelines
  • Redução de erros e retrabalho
  • Infraestrutura imutável

Infraestrutura como código

4 of 21

  • Terraform é uma ferramenta que provê Infraestrutura como código (IaC), que permite criar infraestrutura em diferentes Cloud Providers (Google, AWS, Azure, Digital Ocean, OpenStack, etc)
  • Criada pela HashiCorp
  • Open Source
  • Escrita em GoLang

O que é Terraform

5 of 21

  • Cria máquinas, interfaces de rede, balanceadores de carga, discos, redes, vpn e etc
  • Replica a mesma infraestrutura para diferentes regiões, ou ainda para diferentes ambientes
  • Melhor rastreio da infraestrutura
  • Mudanças incrementais

O que Terraform faz

6 of 21

  • Gerenciamento de configuração
    • Responsabilidade do Ansible, Chef ou Puppet.
  • ..mas, é possível fazer alguns “truques”
  • Terraform não é agnóstico, é preciso escrever novamente o recurso para o Provedor de Cloud que você deseja utilizar

O que Terraform não faz

7 of 21

  • terraform init
  • terraform plan
  • terraform apply/destroy
    • -auto-approve

Comandos básicos

8 of 21

#rafael@shell:/home/rafael/aws

├── ec2.tf

├── provider.tf

└── variables.tf

Exemplo de arquivos .tf

9 of 21

resource "aws_instance" "web" {� ami = "ami-0378588b4ae11ec24"� instance_type = "t2.micro"�

tags = {� Name = "Web",

Application = "Application 1"� }�}

Código AWS

10 of 21

resource "digitalocean_droplet" "web" {

image = "ubuntu-18-04-x64"

name = "web-1"

region = "nyc3"

size = "s-1vcpu-1gb"

}

Código Digital Ocean

11 of 21

  • Utilizado pelo terraform para mapear recursos reais com a sua configuração
  • Performance para infraestruturas grandes
  • terraform.tfstate é um simples arquivo json
  • Ordem de dependência
  • Utilizar Backends
    • Bucket S3 (AWS)
    • Consul (HashiCorp)
    • GCS

Guardando estado

12 of 21

  • Módulos são códigos reutilizáveis onde apenas é passado um novo valor para a variável do recurso que deseja utilizar.
  • Diversos módulos podem ser encontrados em https://registry.terraform.io
  • Use sempre tags para o versionamento, tags irão salvar sua vida e seu trabalho.

Módulos

13 of 21

module "droplet-web-1" {

source = "raffaeldutra/droplet/digitalocean"

version = "1.0.4"

name = "web"

tags = [

"environment:dev"

"project:web-app"

"team-web-app"

]

}

Módulo Digital Ocean

14 of 21

  • Para trabalhar com múltiplos ambientes, Terraform utiliza workspaces.
  • Workspace é um comando do Terraform.
  • Workspace utilizam diferentes states para controlar em qual dos environments o recurso será/está criado.

Trabalhando com environments

15 of 21

  • terraform workspace show
  • terraform workspace list
  • terraform workspace new <env>
  • terraform workspace select <env>

Comandos para environments

16 of 21

module "droplet-web-1" {

source = "raffaeldutra/droplet/digitalocean"

version = "1.0.4"

name = "web-${terraform.workspace}"

tags = [

"environment:${terraform.workspace}",

"project:${terraform.workspace}-web-app",

"team-web-app"

]

}

Usando environments

17 of 21

  • Se queremos implementar apenas um pequeno componente dentro de um diretório
    • terraform plan -target=recurso.nome
    • terraform plan -target=modulo.nome
  • Para aplicar, seguimos mesma linha do plan
    • terraform apply -target=recurso.nome
    • terraform apply -target=module.nome

Criando infra em pedaços

18 of 21

Demonstrações

19 of 21

Perguntas?

20 of 21

Rafael Dutra

21 of 21

Obrigado