Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraform - Infraestrutura como código

Terraform - Infraestrutura como código

Apresentação realizada no 3º CloupUp em Porto Alegre/RS

Rafael Dutra

November 09, 2019
Tweet

More Decks by Rafael Dutra

Other Decks in Technology

Transcript

  1. Rafael Dutra • 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)...
  2. • 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
  3. • 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
  4. • 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
  5. • 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
  6. resource "aws_instance" "web" { ami = "ami-0378588b4ae11ec24" instance_type = "t2.micro"

    tags = { Name = "Web", Application = "Application 1" } } Código AWS
  7. resource "digitalocean_droplet" "web" { image = "ubuntu-18-04-x64" name = "web-1"

    region = "nyc3" size = "s-1vcpu-1gb" } Código Digital Ocean
  8. • 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
  9. • 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
  10. 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
  11. • 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
  12. • terraform workspace show • terraform workspace list • terraform

    workspace new <env> • terraform workspace select <env> Comandos para environments
  13. 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
  14. • 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