-
Notifications
You must be signed in to change notification settings - Fork 0
Organizando o Terraform Pastas, Modules, Workspaces e Terragrunt
🗂️ Diretório
Olhar pra infraestrutura como código como produto pode ser util. Se precisamos versionar um serviço como uma VM com load-balancer já crie um produto, caso necessário utilizar uma vm com load-balancer em outro projeto, apenas reutilize o código.
Dentro do repositório vai existir uma pasta para cada ambiente e os comando do terraform serão executados dentro delas.
- Pontos Positivos
- Fácil adição e remoção de ambientes
- Mudanças em um ambiente não interfere nos outros ambientes
- Pontos Negativos
- Duplicidade excessiva
- Impossibilidade de alterar todos ao mesmo tempo
Veja o seguinte provisonamento de um appservice
resource "azurerm_windows_web_app" "appservice" {
name = "appservice-${lower(var.ambiente)}"
resource_group_name = azurerm_resource_group.rg.id
location = var.location
service_plan_id = azurerm_service_plan.service_plan.id
site_config {
}
}
Quando definir as variaveis dentro de tfvars e passar o comando:
terraform plan -var-file="main.tfvars"
terraform apply -var-file="main.tfvars" -auto-approve
Será provisionado com os valores declarados dentro do arquivo ou seja, se a variavel ambiente tem o valor de "Dev" o nome do app service acima será : appservice-dev
Também é possível usar o tfvars individual dentro de cada pasta passando o comando:
terraform plan -var-file="path/main.tfvars"
terraform apply -var-file="path/main.tfvars" -auto-approve
Podemos dividir em pastas utilizando TFState e TFplan por ambiente usando o sub comando -state:
terraform plan -var-file="path/main.tfvars" -state="path/main.tfplan"
terraform apply -var-file="path/main.tfvars" -state="path/main.tfplan"
terraform destroy -var-file="path/main.tfvars" -state="path/main.tfplan"
Assim gerando um tfplan em cada basta, atribuindo os recursos a cada pasta do seu ambiente
Modulo é um contêiner que guarda as configurações
- Pontos Positivos:
- Versionamento
- Padronização
- Pontos Negativos:
- Complexidade
Assim é o esqueleto de um modulo:
module "dev" {
source = "../infra"
ambiente = "dev"
location = "westus2"
}
No source ficam as informações que serão provisionadas
Workspaces são espaços de trabalho e são gerenciados pelo comando
terraform workspace
alguns subcomandos são:
- show: mostra em qual workspace estamos
- list: lista todos os workspace
- select "name" : seleciona o workspace
- new "name" : cria um novo workspace
- delete "name" : apaga o workspace
Não muda a configuração de pastas mas ajuda a testar os scripts
Podemos apenas selecionando com qual workspace queremos trabalhar seguindo os seguintes comandos:
terraform workspace select name
terraform plan
terraform apply
Yeoman é um Gerador de templetes
- Instalar o Node JS
- Com o NodeJS instalado rode o comando:
npm install -g yo
- Instalamos agora o gerador de templete terraform
npm install -g generator-az-terra-module
- Crie uma pasta chamada go-work no disco local C:\ e adicione como variável de ambiente com o nome GOPATH
É uma ferramenta externa ao terraforma que utiliza o conceito Don't repeat yourself (DRY). Conceito que evita retrabalho e replicações.
Tem alguns comandos executados por linha de comando terragrunt?
- apply-all
- destroy-all
- plan-all
- output-all
Para usar devemos:
- Rodar na linha de comando se já tiver o chocolatey instalado:
choco install terragrunt
- Devemos criar um arquivo com a extensão .hcl passando as configurações de Remote State
- Crie pastas para separar por recurso e inclua em cada um arquivo com a extensão .hcl para pegar as informações das pastas superiores, esse arquivo deve conter a seguinte instrução:
include {
path = find_in_parent_folders()
}
- Após isso basta rodar os comandos citados acima