├── .gitignore ├── CONTRIBUTING.md ├── CONTRIBUTORS.md ├── LICENSE.md ├── README.md ├── extras └── lab │ └── Vagrantfile └── modulos ├── modulo_00 ├── tnp_01.md ├── tnp_02.md └── tnp_03.md ├── modulo_01 ├── exercicio │ └── descricao.md ├── extras.md ├── tnp_01.md ├── tnp_02.md ├── tnp_03.md ├── tnp_04.md ├── tnp_05.md ├── tnp_06.md ├── tnp_07.md ├── tnp_08.md ├── tnp_09.md └── workstation │ └── Vagrantfile └── modulo_02 ├── tnp_01.md ├── tnp_02.md └── tnp_03.md /.gitignore: -------------------------------------------------------------------------------- 1 | extras/lab/.vagrant/* 2 | modulos/modulo_01/workstation/.vagrant/* 3 | .vagrant/* 4 | .vscode/* 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribuindo 2 | 3 | Ao contribuir para este repositório, primeiro discuta a alteração que deseja efetuar via [Issues](https://github.com/igordcsouza/terraform-na-pratica/issues). Toda contribuição precisa ser feita via [Pull Request](https://github.com/igordcsouza/terraform-na-pratica/pulls)! 4 | 5 | Toda e qualquer contribuição, assim como material preexistente, será mantido de forma gratuita para a comunidade no Github ou qualquer outra plataforma que tome seu lugar. 6 | 7 | --- 8 | 9 | [Início](/README.md) 10 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | 2 | ## Contribuidores 3 | 4 | 5 | 6 | 7 | Renato Assis 8 | 9 | --- 10 | 11 | [Início](/README.md) 12 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Igor Souza 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Terraform na Prática - #TNP

2 | 3 |

Um curso sobre Terraform totalmente em português brasileiro 🇧🇷

4 | 5 |

O primeiro módulo está sendo gravado em vídeo e será postado no Youtube.

6 | 7 | > **Autor: [Igor Souza](https://twitter.com/igordcsouza)** 8 | 9 | --- 10 | [![prs-badge]][prs-link]   [![Telegram][telegram-badge]][telegram-link]   [![Twitter][twitter-badge]][twitter-intent] 11 | 12 | --- 13 | 14 | ## 📖 Sumário 15 | 16 | ### Módulo 0 17 | 1. [Apresentação do Curso.](modulos/modulo_00/tnp_01.md) 18 | 1. [Como submeter exercícios no Github?](modulos/modulo_00/tnp_02.md) 19 | 1. [Como sugerir melhorias para o curso?](modulos/modulo_00/tnp_03.md) 20 | 21 | ### Módulo 1 [ [Youtube](https://www.youtube.com/playlist?list=PLVGIivuHGmJpyciRgdZ-x4avdzlsdCTmH) ] 22 | 1. [TNP 1.1 - Apresentação do Módulo.](modulos/modulo_01/tnp_01.md) 23 | 1. [TNP 1.2 - Executando o Terraform com Docker.](modulos/modulo_01/tnp_02.md) 24 | 1. [TNP 1.3 - Começando a brincadeira.](modulos/modulo_01/tnp_03.md) 25 | 1. [TNP 1.4 - Arquivo de Estado! Amor ou Ódio?](modulos/modulo_01/tnp_04.md) 26 | 1. [TNP 1.5 - Utilizando os provisionadores!](modulos/modulo_01/tnp_05.md) 27 | 1. [TNP 1.6 - Integrando recursos!](modulos/modulo_01/tnp_06.md) 28 | 1. [TNP 1.7 - Deploy do nosso serviço!](modulos/modulo_01/tnp_07.md) 29 | 1. [TNP 1.8 - Criando um loadbalance!](modulos/modulo_01/tnp_08.md) 30 | 1. [TNP 1.9 - Utilizando DNS!](modulos/modulo_01/tnp_09.md) 31 | 1. [TNP 1.10 - Criando regra de firewall!](modulos/modulo_01/tnp_10.md) 32 | 1. [Exercícios](modulos/modulo_01/exercicio/descricao.md) 33 | 1. [Extras](modulos/modulo_01/extras.md) 34 | 35 | 36 | ### Conhecendo o Repo 37 | 1. [Como contribuir](#Como-contribuir) 38 | 1. [Contribuidores](#Contribuidores) 39 | 1. [Sobre o Autor](#Sobre-o-Autor) 40 | 1. [Licença](#Licença) 41 | 42 | --- 43 | 44 | ## Como Contribuir 45 | 46 | Veja o arquivo [CONTRIBUTING.md](CONTRIBUTING.md) 47 | 48 | --- 49 | ## Contribuidores 50 | 51 | Veja o arquivo [CONTRIBUTORS.md](CONTRIBUTORS.md) 52 | 53 | --- 54 | 55 | ## Sobre o Autor 56 | 57 | --- 58 | 59 | ## Licença 60 | 61 | ![mit-license](https://img.shields.io/badge/license-MIT-green) 62 | 63 | Veja o arquivo [LICENSE.md](LICENSE.md) 64 | 65 | --- 66 | 67 | 70 | [prs-badge]:https://img.shields.io/static/v1?label=%E2%9D%A4%20Pull%20Requests&message=S%C3%A3o%20Bem%20Vindos!&color=brightgreen&style=for-the-badge 71 | [prs-link]:https://github.com/igordcsouza/terraform-na-pratica/pulls 72 | [telegram-badge]:https://img.shields.io/static/v1?label=Telegram&message=Terraform%20Community%20Course&color=blue&style=for-the-badge 73 | [telegram-link]:https://t.me/joinchat/CUkknxSgMV4HdAfz12O-nQ 74 | [twitter-badge]:https://img.shields.io/twitter/url/http/shields.io.svg?style=for-the-badge&logo=twitter 75 | [twitter-intent]:https://twitter.com/intent/tweet?url=https://github.com/igordcsouza/terraform-na-pratica&via=igordcsouza&text=Um%20curso%20de%20terraform%20totalmente%20em%20🇧🇷&hashtags=TNP,TerraformNaPratica,curso,terraform,free 76 | 77 | -------------------------------------------------------------------------------- /extras/lab/Vagrantfile: -------------------------------------------------------------------------------- 1 | VAGRANTFILE_API_VERSION = "2" 2 | BOX_MEM = ENV['BOX_MEM'] || "2048" 3 | BOX_NAME = ENV['BOX_NAME'] || "centos/7" 4 | CLUSTER_HOSTS = ENV['CLUSTER_HOSTS'] || "vagrant_hosts" 5 | 6 | Vagrant.require_version ">= 1.5.0" 7 | 8 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 9 | 10 | config.vm.define :seiya do |seiya_config| 11 | seiya_config.vm.box = BOX_NAME 12 | seiya_config.vm.network :private_network, ip: "10.1.42.70" 13 | seiya_config.vm.hostname = "seiya.local" 14 | seiya_config.ssh.forward_agent = true 15 | seiya_config.vm.provider "virtualbox" do |v| 16 | v.name = "hashicorp-lab" 17 | v.customize ["modifyvm", :id, "--memory", BOX_MEM] 18 | v.customize ["modifyvm", :id, "--ioapic", "on"] 19 | v.customize ["modifyvm", :id, "--cpus", "2"] 20 | v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] 21 | v.customize ["modifyvm", :id, "--natdnsproxy1", "on"] 22 | end 23 | seiya_config.vm.provision :hosts do |provisioner| 24 | provisioner.add_host '10.1.42.70', ['seiya.local'] 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /modulos/modulo_00/tnp_01.md: -------------------------------------------------------------------------------- 1 | # TNP 0.1 - Apresentação do Curso! 2 | 3 | Esse é o primeiro vídeo do primeiro módulo então deixa eu aproveitar para explicar algumas coisas e te contar um segredinho! 4 | 5 | 6 | 🎥 [TNP 0.1 - Apresentação do Módulo!]() 7 | 8 | 9 | Vamos as perguntas: 10 | 11 | 1. O primeiro módulo pode ser visto de graça? 12 | 1. Quem sou eu? 13 | 1. Como o curso está dividido? 14 | 1. Eu vou aprender Terraform com AWS? 15 | 1. Qual versão do Terraform será utilizada? 16 | 1. Qual sistema operacional eu preciso utilizar? 17 | 1. Vamos ver outras ferramentas além do Terraform? 18 | 1. Existe algum grupo para os alunos? 19 | 1. Tem exercícios? 20 | 21 | --- 22 | [Próximo Capítulo](/modulos/modulo_00/tnp_02.md) 23 | 24 | [Início](/README.md) 25 | -------------------------------------------------------------------------------- /modulos/modulo_00/tnp_02.md: -------------------------------------------------------------------------------- 1 | # TNP 0.2 - Como submeter os exercícios no Github! 2 | 3 | Bom, se você chegou até aqui é por que está minimamente interessado em conhecer mais o curso. Nesse video eu vou te explicar como você pode submeter seus exercícios à correção (minha e de outras pessoas) direto para o nosso repositório do Github! 4 | 5 | 6 | 🎥 [TNP 0.2 - Como submeter exercícios no Github!]() 7 | 8 | 9 | 1. Criar uma conta no Github! 10 | 1. Acessando o repositório do curso. 11 | 1. Configurando sua conta! 12 | 1. Clonando o projeto! 13 | 1. Fazendo nosso primeiro PR! 14 | 1. Qual o tempo para ter uma resposta? 15 | 16 | 17 | --- 18 | [Próximo](/modulos/modulo_00/tnp_03.md) 19 | 20 | [Início](/README.md) 21 | -------------------------------------------------------------------------------- /modulos/modulo_00/tnp_03.md: -------------------------------------------------------------------------------- 1 | # TNP 0.3 - Como sugerir melhorias para o curso? 2 | 3 | 🎥 [TNP 0.3 - Como sugerir melhorias para o curso?]() 4 | 5 | 1. Acessando o repositório do projeto! 6 | 1. Abrindo uma issue! 7 | 1. Utilizando tags da maneira correta! 8 | 1. Enviando pull requests! 9 | 1. Manda o pio no twitter! 10 | 11 | 12 | --- 13 | 14 | [Início](/README.md) 15 | -------------------------------------------------------------------------------- /modulos/modulo_01/exercicio/descricao.md: -------------------------------------------------------------------------------- 1 | # Como enviar sua resposta? 2 | 3 | * Faça um pull request com uma nova pasta dentro da pasta de exercícios. 4 | * Essa pasta deve ser criada com seu nome de usuário do Github. 5 | * Abra um pull request 6 | 7 | # Exercício 8 | 9 | --- 10 | [Próximo Capítulo](/modulos/modulo_01/extras.md) 11 | 12 | [Início](/README.md) 13 | -------------------------------------------------------------------------------- /modulos/modulo_01/extras.md: -------------------------------------------------------------------------------- 1 | # Extras 2 | 3 | --- 4 | 5 | [Início](/README.md) 6 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_01.md: -------------------------------------------------------------------------------- 1 | # TNP 1.1 - Apresentação do Módulo! 2 | 3 | Esse é o primeiro video do primeiro módulo então deixa eu aproveitar para explicar algumas coisas! 4 | 5 | 6 | 🎥 [TNP 1.1 - Apresentação do Módulo!]() 7 | 8 | 9 | Vamos as perguntas: 10 | 11 | 1. Qual vai ser nosso projeto? 12 | * Vamos entender como montar um projeto, na DigitalOcean, pronto para produção utilizando Terraform e Docker. 13 | * Droplets 14 | * LoadBalancer 15 | * Firewall 16 | * DNS 17 | * Banco de Dados 18 | 1. Por que vamos utilizar a DigitalOcean? 19 | * Facilidade em ver os custos. 20 | * Simplicidade para criar e gerenciar os serviços. 21 | * Poucos serviços facilitam o entendimento do dashboard. 22 | * Curva de aprendizado menor. 23 | 1. A DigitalOcean deu algum cupon de desconto? 24 | * Cupon de desconto default. [Acesse aqui](https://try.digitalocean.com/performance/) 25 | 1. A DigitalOcean patrocina o curso? 26 | * Vamos enviar um tweet pedindo? ("@digitalocean help us to learn Terraform! Please be the first sponsor of `terraform-na-pratica`. cc @igordcsouza" 27 | * Vamos aplicar para o [Write for Donations](https://www.digitalocean.com/write-for-donations/) e tentar ganhar os $300 pra investir nos módulos do curso e ajudar algum outro projeto. 28 | 1. Nosso ambiente de trabalho 29 | * Criando uma máquina zerada com VirtualBox + Vagrant no Linux. 30 | * [Acesse aqui](/modulos/modulo_01/workstation/Vagrantfile) 31 | 32 | 33 | --- 34 | [Próximo Capítulo](/modulos/modulo_01/tnp_02.md) 35 | 36 | [Início](/README.md) 37 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_02.md: -------------------------------------------------------------------------------- 1 | # TNP 1.2 - Executando o Terraform com Docker containers 2 | 3 | 🎥 [TNP 1.2 - Executando o Terraform com Docker containers](https://www.youtube.com/watch?v=1HhoFVtoxlU) 4 | 5 | Comandos utilizados nesse video: 6 | 7 | ```sh 8 | sudo yum update -y 9 | curl -fsSL https://get.docker.com | sh; 10 | sudo systemctl status docker 11 | sudo systemctl start docker 12 | sudo systemctl status docker 13 | docker images 14 | sudo usermod -aG docker vagrant 15 | logoff to vm 16 | login to vm 17 | docker --version 18 | docker images 19 | docker pull hashicorp/terraform:latest 20 | docker run -it hashicorp/terraform --version 21 | sudo yum install vim -y 22 | vim ~/.bashrc 23 | echo 'alias terraform="docker run --rm -it hashicorp/terraform"' >> ~/.bashrc 24 | cat ~/.bashrc 25 | terraform --version 26 | source ~/.bashrc 27 | terraform --version 28 | echo 'alias terraform-old="docker run --rm -it hashicorp/terraform:0.11.14"' >> ~/.bashrc 29 | source ~/.bashrc 30 | terraform-old --version 31 | ``` 32 | 33 | Explicação sobre o parâmetro `--rm` 34 | 35 | 🎥 [TNP 1.2.1 - Adicionando comando para remover o container!](https://www.youtube.com/watch?v=osy_yz7lh1k) 36 | 37 | >❗ Sugestão: para não acumular um monte de container a cada execução do comando terraform adicionar o flag --rm https://docs.docker.com/engine/reference/run/#clean-up---rm 38 | 39 | ```sh 40 | echo 'alias terraform="docker run --rm -it hashicorp/terraform"' >> ~/.bashrc 41 | ``` 42 | 43 | 44 | 45 | 46 | --- 47 | [Próximo Capítulo](/modulos/modulo_01/tnp_03.md) 48 | 49 | [Início](/README.md) 50 | 51 | 52 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_03.md: -------------------------------------------------------------------------------- 1 | # TNP 1.3 - Começando a brincadeira 2 | 3 | Nesse vídeo vamos conhecer os principais comandos do Terraform (`terraform init, terraform plan, terraform apply e terraform destroy`) e entender um pouco de como funcionam as variáveis. 4 | Também falaremos rapidamente sobre o arquivo de estado. 5 | 6 | 🎥 [TNP 1.3 - Começando a brincadeira](https://www.youtube.com/watch?v=1HhoFVtoxlU) 7 | 8 | 9 | ``mkdir terraform_digital_ocean`` 10 | 11 | ``cd terraform_digital_ocean`` 12 | 13 | ``vim carro.tf`` 14 | 15 | ``` hcl 16 | provider "digital_ocean"{ 17 | 18 | } 19 | ``` 20 | 21 | ``terraform init`` 22 | 23 | ``vim ~/.bashrc`` 24 | 25 | ``` bash 26 | alias terraform="docker run --rm -v $(pwd):/app/ -w /app/ -it hashicorp/terraform" 27 | ``` 28 | 29 | ``source ~/.bashrc`` 30 | 31 | ``terraform init`` 32 | 33 | ``mv carro.tf main.tf`` 34 | 35 | ``vim main.tf`` 36 | 37 | ``` hcl 38 | provider "digitalocean" { 39 | token = "" 40 | } 41 | ``` 42 | 43 | ``terraform init`` 44 | 45 | ``vim main.tf`` 46 | 47 | ``` hcl 48 | provider "digitalocean" { 49 | token = "" 50 | } 51 | 52 | resource "digitalocean_droplet" "web" { 53 | image = "ubuntu-18-04-x64" 54 | name = "web-1" 55 | region = "nyc3" 56 | size = "s-1vcpu-1gb" 57 | } 58 | ``` 59 | 60 | ``terraform plan -out planejamento`` 61 | 62 | ``terraform apply "planejamento"`` 63 | 64 | ``vim terraform.tfstate`` 65 | 66 | ``rm planejamento`` 67 | 68 | ``vim main.tf`` 69 | 70 | ``` hcl 71 | variable "do_token" { 72 | default = "" 73 | } 74 | 75 | provider "digitalocean" { 76 | token = "${var.do_token}" 77 | } 78 | 79 | resource "digitalocean_droplet" "web" { 80 | image = "ubuntu-18-04-x64" 81 | name = "web-1" 82 | region = "nyc3" 83 | size = "s-1vcpu-1gb" 84 | } 85 | ``` 86 | 87 | ``terraform apply`` 88 | 89 | ``vim main.tf`` 90 | 91 | ``` hcl 92 | variable "do_token" {} 93 | 94 | provider "digitalocean" { 95 | token = "${var.do_token}" 96 | } 97 | 98 | resource "digitalocean_droplet" "web" { 99 | image = "ubuntu-18-04-x64" 100 | name = "web-1" 101 | region = "nyc3" 102 | size = "s-1vcpu-1gb" 103 | } 104 | ``` 105 | 106 | ``vim ~/.bashrc`` 107 | 108 | ``` bash 109 | alias terraform="docker run --rm -v $(pwd):/app/ -w /app/ -e TF_VAR_do_token="" -it hashicorp/terraform" 110 | ``` 111 | 112 | ``source ~/.bashrc`` 113 | 114 | ``terraform plan`` 115 | 116 | ``terraform apply`` 117 | 118 | ``vim ~/.bashrc`` 119 | 120 | ``` bash 121 | export DIGITALOCEAN_TOKEN="" 122 | 123 | alias terraform="docker run --rm -v $(pwd):/app/ -w /app/ -e DIGITALOCEAN_TOKEN=$DIGITALOCEAN_TOKEN -it hashicorp/terraform" 124 | ``` 125 | 126 | ``source ~/.bashrc`` 127 | 128 | 129 | ``vim main.tf`` 130 | 131 | ``` hcl 132 | provider "digitalocean" {} 133 | 134 | resource "digitalocean_droplet" "web" { 135 | image = "ubuntu-18-04-x64" 136 | name = "web-1" 137 | region = "nyc3" 138 | size = "s-1vcpu-1gb" 139 | } 140 | ``` 141 | 142 | ``terraform destroy`` 143 | 144 | --- 145 | [Próximo Capítulo](/modulos/modulo_01/tnp_04.md) 146 | 147 | [Início](/README.md) 148 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_04.md: -------------------------------------------------------------------------------- 1 | # TNP 1.4 - Arquivo de Estado! Amor ou Ódio? 2 | 3 | Numa conta zerada é simples de acessar o painel de controle e ver o que criamos, mas como fazer isso sem precisar acessar o painel de controle? 4 | 5 | Vamos conhecer essa `feature` do Terraform que é motivo de muito amor e ódio dentro da comunidade! 6 | 7 | Nesse vídeo vamos entender um pouco como ela pode ser utilizada e até criarmos alguns problemas para ver como ela se comporta! 8 | 9 | 🎥 [TNP 1.4 - Arquivo de Estado! Amor ou Ódio?]() 10 | 11 | 1. O que é o [arquivo de estado](https://www.terraform.io/docs/state/)? 12 | 1. Como exibir conteudo do arquivo de estado. 13 | 1. Alguns problemas: 14 | * Se você perder o arquivo, vai precisar importar os recursos. 15 | * Múltiplos usuários podem acabar alterando o arquivo ao mesmo tempo. 16 | * Precisa compartilhar com outras pessoas. 17 | * Armazena senhas passadas para execução. 18 | 1. Importando recursos. 19 | * Importando o droplet perdido! 20 | 1. Arquivo remoto 21 | * Migrando nosso arquivo de estado para o [app.terraform.io](https://app.terraform.io) 22 | * Como e por que travar nosso arquivo de estado. 23 | * Visualizando o historico. 24 | 1. Travando o arquivo. 25 | 1. Dados Sensíveis 26 | 27 | --- 28 | 29 | [Próximo Capítulo](/modulos/modulo_01/tnp_05.md) 30 | 31 | [Início](/README.md) 32 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_05.md: -------------------------------------------------------------------------------- 1 | # TNP 1.5 - Áreas de trabalho (Workspaces)! 2 | 3 | Numa conta zerada é simples de acessar o painel de controle e ver o que criamos, mas como fazer isso sem precisar acessar o painel de controle? 4 | 5 | Vamos conhecer essa `feature` do Terraform que é motivo de muito amor e ódio dentro da comunidade! 6 | 7 | Nesse vídeo vamos entender um pouco como ela pode ser utilizada e até criaremos alguns problemas para ver como ela se comporta! 8 | 9 | 🎥 [TNP 1.5 - Áreas de trabalho (Workspaces)!]() 10 | 11 | 1. O que é `workspaces`? 12 | 1. Como funciona? 13 | 1. Atualizando codigo para utilizar workspaces. 14 | 1. Boas praticas. 15 | 1. Migrando dados entre `workspaces` 16 | * Criei meu ambiente de staging no `workspace` padrão e quero utilizar o padrão como produção. Como fazer sem destruir a infra existente? 17 | * [Texto em ingles](https://dev.to/igordcsouza_87/migrating-resources-from-the-default-workspace-to-a-new-one-3ojc) 18 | 1. Utilizando na prática 19 | 20 | --- 21 | 22 | [Próximo Capítulo](/modulos/modulo_01/tnp_06.md) 23 | 24 | [Início](/README.md) 25 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_06.md: -------------------------------------------------------------------------------- 1 | # TNP 1.6 - Utilizando os provisionadores! 2 | 3 | Numa conta zerada é simples de acessar o painel de controle e ver o que criamos, mas como fazer isso sem precisar acessar o painel de controle? 4 | 5 | 🎥 [TNP 1.6 - Utilizando os provisionadores!](https://www.terraform.io/docs/provisioners/index.html) 6 | 7 | 1. O que é um provisionador? 8 | 1. Como utilizar? 9 | 1. Utilizando-o ao destruir um recurso. 10 | 1. Fazendo deploy de um servico utilizando containers! 11 | 12 | --- 13 | 14 | [Próximo Capítulo](/modulos/modulo_01/tnp_07.md) 15 | 16 | [Início](/README.md) 17 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_07.md: -------------------------------------------------------------------------------- 1 | # TNP 1.7 - Configurando um Load Balancer! 2 | 3 | Agora podemos acessar nosso servico direto pelo ip da maquina, mas o que acontece se tivermos 2 maquinas? Precisaremos mandar os 2 enderecos para quem quiser acessar? Nao ne?! Entao vamos configurar um load balancer inteligentinho para fazer o trabalho de dividir as requisicoes para ambas as maquinas. 4 | 5 | 🎥 [TNP 1.7 - Configurando um LoadBalancer!](https://www.terraform.io/docs/provisioners/index.html) 6 | 7 | 1. Criando um load balancer. 8 | 1. Integrando o load balancer com os droplets criados. 9 | 1. Adicionando um DNS para esse load balancer. 10 | 11 | --- 12 | 13 | [Próximo Capítulo](/modulos/modulo_01/tnp_08.md) 14 | 15 | [Início](/README.md) 16 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_08.md: -------------------------------------------------------------------------------- 1 | # TNP 1.8 - Regras de firewall! 2 | 3 | Temos um DNS, apontando para um load balancer... mas o que acontece se eu tentar acessar direto o ip e a porta da minha maquina? 4 | Para evitar esse tipo de coisa, vamos adicionar um firewall a nossa infra permitindo apenas acesso vindo do load balancer. 5 | 6 | 🎥 [TNP 1.8 - Regras de firewall!](https://www.terraform.io/docs/provisioners/index.html) 7 | 8 | 1. Criando uma regra de firewall. 9 | 1. Integrando a regra as maquinas e ao loadbalancer. 10 | 1. Validando as regras de firewall. 11 | 12 | --- 13 | 14 | [Próximo Capítulo](/modulos/modulo_01/tnp_09.md) 15 | 16 | [Início](/README.md) 17 | -------------------------------------------------------------------------------- /modulos/modulo_01/tnp_09.md: -------------------------------------------------------------------------------- 1 | # TNP 1.9 - Provisionando nosso banco de dados! 2 | 3 | Ate esse momento estavamos utilizando um servico de terceiros para gerenciar nosso banco, nao e o caso de passarmos a gerenciar o nosso proprio postgres ainda mas vamos tentar manter todo o nosso setup dentro de apenas um servico pois isso facilita ainda mais o controle de gastos e dependencias de servicos. Logico, isso tudo ligado ao fator que queremos aprender como gerenciar nosso postgres com o terraform :) 4 | 5 | 🎥 [TNP 1.9 - Proovisionando nosso banco de dados!!]() 6 | 7 | 1. Conhecendo o recurso para provisionar banco de dados na Digital Ocean. 8 | 1. Criando nosso primeiro banco de dados. 9 | 1. Passando parametros do banco para nossa aplicacao. 10 | 1. Testando nossa aplicacao. 11 | 12 | --- 13 | 14 | [Próximo Capítulo](/modulos/modulo_01/tnp_10.md) 15 | 16 | [Início](/README.md) 17 | -------------------------------------------------------------------------------- /modulos/modulo_01/workstation/Vagrantfile: -------------------------------------------------------------------------------- 1 | ANSIBLE_PLAYBOOK = ENV['ANSIBLE_PLAYBOOK'] || "site.yml" 2 | VAGRANTFILE_API_VERSION = "2" 3 | BOX_MEM = ENV['BOX_MEM'] || "2048" 4 | BOX_NAME = ENV['BOX_NAME'] || "centos/7" 5 | 6 | Vagrant.require_version ">= 1.5.0" 7 | 8 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 9 | 10 | config.vm.define :tnp do |tnp_config| 11 | tnp_config.vm.box = BOX_NAME 12 | tnp_config.vm.network :private_network, ip: "10.1.42.70" 13 | tnp_config.vm.hostname = "tnp.local" 14 | tnp_config.ssh.forward_agent = true 15 | tnp_config.vm.provider "virtualbox" do |v| 16 | v.name = "tnp" 17 | v.customize ["modifyvm", :id, "--memory", BOX_MEM] 18 | v.customize ["modifyvm", :id, "--ioapic", "on"] 19 | v.customize ["modifyvm", :id, "--cpus", "2"] 20 | v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] 21 | v.customize ["modifyvm", :id, "--natdnsproxy1", "on"] 22 | end 23 | tnp_config.vm.provision :hosts do |provisioner| 24 | provisioner.add_host '10.1.42.70', ['tnp.local'] 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /modulos/modulo_02/tnp_01.md: -------------------------------------------------------------------------------- 1 | # TNP 2.1 - Automatizando o nosso deploy! 2 | 3 | Ate agora executamos todas as vezes da nossa maquina, mas e se quisermos parar de fazer isso e delegar esse trabalho para uma plataforma de CI? 4 | Vamos ver como podemos integrar nosso codigo com plataformas de CI/CD e entender alguns dos desafios que essa pratica pode nos trazer. 5 | 6 | 🎥 [TNP 2.1 - Automatizando o nosso deploy!]() 7 | 8 | 1. Por que automatizar? 9 | 1. Qual a melhor plataforma para utilizar com o Terraform? 10 | 1. Configurando nosso plataforma. 11 | * Workspace 12 | * Arquivo de estado 13 | * Variaveis 14 | 1. Testando nosso pipeline. 15 | 16 | --- 17 | 18 | [Próximo Capítulo](/modulos/modulo_02/tnp_02.md) 19 | 20 | [Início](/README.md) 21 | -------------------------------------------------------------------------------- /modulos/modulo_02/tnp_02.md: -------------------------------------------------------------------------------- 1 | # TNP 2.2 - Run Atlantis... RUN!! 2 | 3 | Nesse capitulo vamos ver umas das ferramentas mais bacanas, na minha opniao, para se usar com o `Terraform`. 4 | O nome dessa ferramente e [RunAtlantis](https://www.runatlantis.io/), com ela podemos comentar pull requests no github com a saida do comando `terraform plan` e de dentro dos comentarios do proprio pull request podemos ordenar a execucao do pipeline comentando `terraform apply`. 5 | 6 | 🎥 [TNP 2.2 - Run Atlantis... RUN!!]() 7 | 8 | 1. Possivel futuro do atlantis! 9 | 1. Configurando nossa propria instancia do Atlantis. 10 | 1. Testando o atlantis. 11 | 12 | --- 13 | 14 | [Próximo Capítulo](/modulos/modulo_01/tnp_07.md) 15 | 16 | [Início](/README.md) 17 | -------------------------------------------------------------------------------- /modulos/modulo_02/tnp_03.md: -------------------------------------------------------------------------------- 1 | # TNP 2.3 - Deployando nosso kubernetes na Digital Ocean!! 2 | 3 | Nem so de hype vivera o seu codigo, mas o momento de estudo e o melhor momento pra brincar com essas ferramentas hypadas! 4 | Vamos aprender como configurar um Kubernetes (vai ser basico galera, nao vamos nos aprofundar por aqui) na Digital Ocean e vamos fazer deploy de alguns dos nossos servicos e sistemas nele. 5 | 6 | 🎥 [TNP 2.3 - Deployando nosso kubernetes na Digital Ocean!!]() 7 | 8 | 1. Possivel futuro do atlantis! 9 | 1. Configurando nossa propria instancia do Atlantis. 10 | 1. Testando o atlantis. 11 | 12 | --- 13 | 14 | [Próximo Capítulo](/modulos/modulo_01/tnp_07.md) 15 | 16 | [Início](/README.md) 17 | --------------------------------------------------------------------------------