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

Terraform - Infraestrutura como código

Rafael Dutra
September 28, 2019

Terraform - Infraestrutura como código

A small introduction for those who wants to use Terraform for Infrastructure as code using AWS (Amazon Web Services) and Digital Ocean as examples for this tutorial

Rafael Dutra

September 28, 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. Infraestrutura como código • Tudo é código. • Versionamento da

    Infraestrutura. • Pipelines para builds automatizados. • Redução de erros humanos. • Sem retrabalho, crie apenas uma vez e repita múltiplas vezes. • Infraestrutura imutável.
  3. O que é Terraform? • 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
  4. O que Terraform faz • Criar: 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 de sua infraestrutura. • Mudanças incrementais.
  5. O que Terraform não faz • Gerenciamento de configuração. ◦

    precisamos de outra ferramenta para isso, como 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.
  6. Código AWS resource "aws_instance" "web" { ami = "ami-0378588b4ae11ec24" instance_type

    = "t2.micro" tags = { Name = "Web", Application = "Application 1" } }
  7. • AWS (Amazon Web Services) ◦ Criando uma simples máquina

    ◦ Deletar máquina virtual Demonstração
  8. • Digital Ocean ◦ Criando uma simples máquina virtual ◦

    Verificando o arquivo .tfstate ◦ Deletar máquina virtual Demonstração
  9. • 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. Guardando o estado
  10. • 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 Terraform
  11. Módulo Digital Ocean module "droplet-web-1" { source = "raffaeldutra/droplet/digitalocean" version

    = "1.0.4" name = "web" tags = [ "environment:dev" "project:web-app" "team-web-app" ] }
  12. • Digital Ocean ◦ Criando uma máquina virtual com módulos

    ◦ Deletar máquina virtual Demonstração
  13. • 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
  14. • terraform workspace show • terraform workspace list • terraform

    workspace new <env> • terraform workspace select <env> Comandos para envs
  15. Usando environments module "droplet-web-1" { source = "raffaeldutra/droplet/digitalocean" version =

    "1.0.4" name = "web" tags = [ "environment:${terraform.workspace}", "project:${terraform.workspace}-web-app", "team-web-app" ] }
  16. @raffaeldutra gmail | origin | steam | uplay https://rafaeldutra.me https://registry.terraform.io/modules/raffaeldutra

    https://hub.docker.com/u/raffaeldutra https://app.vagrantup.com/raffaeldutra/ https://linkedin.com/in/rafaeldutra https://github.com/raffaeldutra https://gitlab.com/raffaeldutra https://speakerdeck.com/raffaeldutra Rafael Dutra