Slide 1

Slide 1 text

Infraestrutura como código Terraform Rafael Dutra

Slide 2

Slide 2 text

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)...

Slide 3

Slide 3 text

MAS ANTES … UMA BREVE HISTÓRIA Infraestrutura como código

Slide 4

Slide 4 text

2001

Slide 5

Slide 5 text

2005 Versionamento de código

Slide 6

Slide 6 text

2005 Gerência de configuração

Slide 7

Slide 7 text

2007 Cloud Computing

Slide 8

Slide 8 text

2008 Plataforma de repositórios de software

Slide 9

Slide 9 text

2009 Cultura entre times

Slide 10

Slide 10 text

2010 Ambientes de desenvolvimento

Slide 11

Slide 11 text

2011 Plataforma de repositórios de software

Slide 12

Slide 12 text

2012 Gerência de configuração

Slide 13

Slide 13 text

2013 Ambientes de desenvolvimento

Slide 14

Slide 14 text

2014 Infraestrutura como código

Slide 15

Slide 15 text

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.

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

● terraform init ● terraform plan ● terraform apply/destroy ○ -auto-approve Comandos básicos

Slide 20

Slide 20 text

#rafael@shell:/home/rafael/aws ├── ec2.tf ├── provider.tf └── variables.tf Arquivos de exemplo .tf

Slide 21

Slide 21 text

Código AWS resource "aws_instance" "web" { ami = "ami-0378588b4ae11ec24" instance_type = "t2.micro" tags = { Name = "Web", Application = "Application 1" } }

Slide 22

Slide 22 text

● AWS (Amazon Web Services) ○ Criando uma simples máquina ○ Deletar máquina virtual Demonstração

Slide 23

Slide 23 text

Código Digital Ocean resource "digitalocean_droplet" "web" { image = "ubuntu-18-04-x64" name = "web-1" region = "nyc3" size = "s-1vcpu-1gb" }

Slide 24

Slide 24 text

● Digital Ocean ○ Criando uma simples máquina virtual ○ Verificando o arquivo .tfstate ○ Deletar máquina virtual Demonstração

Slide 25

Slide 25 text

● 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

Slide 26

Slide 26 text

● 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

Slide 27

Slide 27 text

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" ] }

Slide 28

Slide 28 text

● Digital Ocean ○ Criando uma máquina virtual com módulos ○ Deletar máquina virtual Demonstração

Slide 29

Slide 29 text

● 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

Slide 30

Slide 30 text

● terraform workspace show ● terraform workspace list ● terraform workspace new ● terraform workspace select Comandos para envs

Slide 31

Slide 31 text

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" ] }

Slide 32

Slide 32 text

https://www.terraform.io https://www.terraform.io/docs/configuration/index.html https://www.terraform.io/docs/providers/type/network-index.ht ml https://www.terraform.io/docs/state/index.html https://www.terraform.io/docs/providers/index.html https://www.terraform.io/docs/modules/index.html Links

Slide 33

Slide 33 text

@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

Slide 34

Slide 34 text

Perguntas?

Slide 35

Slide 35 text

Obrigado