1 of 28

/COMO TRABALHAR COM MÚLTIPLOS AMBIENTES NO TERRAFORM

TDC INNOVATION 2023

MAIN.TF

2 of 28

<ANTONIO.JUNIOR>

WHO.TF

Principal Cloud & DevOps Solution Architect

Microsoft MVP Azure

3 of 28

/ACELERANDO DESENVOLVIMENTO E A GESTÃO DE INFRAESTRUTURA COMO CODIGO

/01

/ORGANIZANDO SEU CÓDIGO

/03

/ESTRATÉGIAS PARA TRABALHAR COM MULTIPLOS AMBIENTES

/02

/COMPARANDO AS ESTRATÉGIAS

/04

/AGENDA

Automatizando sua infraestrutura com o Terraform

Organizando seus ambientes de forma inteligente

Aumentando a flexibilidade de uso do Terraform

Escolhendo a abordagem mais adequada para o seu projeto

AGENDA.TF

4 of 28

TERRAFORM.TF

/ACELERANDO

DESENVOLVIMENTO E A GESTÃO DE INFRAESTRUTURA COMO CODIGO

5 of 28

/O QUE É O TERRAFORM?

TERRAFORM.TF

  • O Terraform é uma ferramenta open-source que permite criar e gerenciar a infraestrutura de maneira declarativa.
  • Utiliza a linguagem HashiCorp Configuration Language (HCL) para descrever a infraestrutura desejada.
  • É compatível com diversos provedores de nuvem e outros sistemas de infraestrutura.

O Terraform é uma ferramenta de infraestrutura como código que permite criar, alterar e versionar a infraestrutura de maneira segura e eficiente.

6 of 28

/TERRAFORM WORKFLOW

/WRITE

/PLAN

/APPLY

TERRAFORM.TF

Define a infraestrutura em arquivos de configuração

Revisa as mudanças que o Terraform irá aplicar em sua infraestrutura

Terraform provisiona sua infraestrutura e atualiza arquivo de estado

7 of 28

/DON'T REPEAT YOURSELF

DRY.TF

Elimine a repetição de código com o Terraform!

8 of 28

/CÓDIGO SIMPLIFICADO E REUTILIZÁVEL

DRY.TF

O princípio "Don't Repeat Yourself" (DRY) prega eliminar a duplicação de código.�

O Terraform permite a criação de módulos reutilizáveis que podem ser compartilhados entre diferentes projetos e ambientes.

Dessa forma, evita-se a repetição de código e facilita-se a manutenção e atualização da infraestrutura.

9 of 28

/ESTRATÉGIAS PARA TRABALHAR COM MULTIPLOS AMBIENTES

ENV.TF

10 of 28

/FLEXIBILIDADE

ENV.TF

Ao trabalhar com múltiplos ambientes, é importante manter a separação e consistência das configurações.

O Terraform oferece estratégias para gerenciar esses ambientes, como o uso de diretórios ou workspaces.

11 of 28

/ESTRATÉGIAS

/POR WORKSPACES

ENV.TF

  • A estratégia por diretórios envolve a criação de pastas separadas para cada ambiente (dev, prod, staging).

  • Cada pasta contém os arquivos de configuração específicos para o respectivo ambiente.

  • Essa abordagem facilita a organização do código e permite reutilizar módulos entre diferentes ambientes.

/POR DIRETÓRIOS

  • A estratégia por workspaces envolve o uso de workspaces do Terraform para separar as configurações de diferentes ambientes.

  • Cada workspace possui seu próprio estado, permitindo a alteração independente das configurações.

  • É possível alternar facilmente entre os workspaces para provisionar e gerenciar diferentes ambientes.

12 of 28

/ORGANIZANDO SEU CÓDIGO

STAGE.TF

13 of 28

/ORGANIZAÇÃO EFICIENTE

/MÓDULOS

STAGE.TF

A organização do código por ambientes envolve a criação de estruturas de diretórios ou workspaces, conforme discutido anteriormente.

/ESTRUTURA

É recomendado o uso de módulospara compartilhar configurações comuns entre os ambientes. Essa abordagem facilita a manutenção, atualização e colaboração no código do Terraform.

14 of 28

/SEPARE SEUS AMBIENTES COM DIRETÓRIOS

STAGE.TF

Na estratégia de diretórios, cada ambiente possui sua própria pasta com os arquivos de configuração correspondentes.

Essa abordagem permite uma separação das configurações e facilita a reutilização de código entre diferentes ambientes.

Cada pasta pode conter os módulos, variáveis e arquivos de configuração específicos para o respectivo ambiente.

15 of 28

Essa estratégia é simples e direta: você cria um diretório para cada ambiente e mantém os arquivos de configuração do Terraform separados. Cada ambiente tem seus próprios arquivos de configuração, o que significa que você pode ajustar as configurações de cada ambiente de acordo com suas necessidades.

Com essa estratégia, podemos ter uma configuração específica para cada ambiente, sem precisar repetir o mesmo código várias vezes. Usando variáveis ​​do Terraform, podemos configurar as diferenças entre cada ambiente.

STAGE.TF

16 of 28

/DEV.TF

STAGE.TF

# environments/development/main.tf

�module "azure_vm" {

source = "../../modules/azure/vm

vm_name = "dev-vm"

vm_size = "Standard_B2s

os_disk_size_gb = "30"

admin_username = var.admin_username

admin_password = var.admin_password

resource_group_name = "dev-rg"

location = "eastus"

}

17 of 28

/STAGING.TF

STAGE.TF

# environments/development/main.tf

�module "azure_vm" {

source = "../../modules/azure/vm

vm_name = stg-vm"

vm_size = "Standard_B2s

os_disk_size_gb = "30"

admin_username = var.admin_username

admin_password = var.admin_password

resource_group_name = stg-rg"

location = "eastus"

}

18 of 28

/GERENCIE AMBIENTES COM WORKSPACES

STAGE.TF

A estratégia de workspaces utiliza os recursos de workspaces do Terraform para gerenciar diferentes ambientes.

Cada workspace contém seu próprio estado e configurações, permitindo a alteração independente de cada ambiente.

Essa abordagem é útil quando os ambientes compartilham grande parte das configurações, com variações mínimas.

19 of 28

Essa estratégia envolve o uso de workspaces no Terraform para manter o código para cada ambiente em um único diretório.

Um workspace é uma instância isolada de um conjunto de recursos no Terraform. Cada workspace tem seu próprio estado.

Por padrão, o Terraform tem um único workspace chamado “default”, mas você pode criar novos workspaces para gerenciar recursos em diferentes ambientes.

STAGE.TF

20 of 28

/BACKEND

STAGE.TF

terraform {

backend "azurerm" {

resource_group_name = "tfstate-rg"

storage_account_name = "tfstateacc"

container_name = "tfstate"

key = "terraform.tfstate"

}

}

$ terraform workspace new dev

$ terraform workspace select dev

21 of 28

/MAIN.TF

STAGE.TF

# main.tf

resource "azurerm_resource_group" "rg" {

name = "rg-${terraform.workspace}"

location = "eastus"

}

$ terraform workspace select prod

$ terraform plan -var-file=/environments/production/prod.tfvars

22 of 28

/COMPARANDOAS ESTRATÉGIAS

COMPARE.TF

23 of 28

/RAIO-X

Ao escolher entre as estratégias de diretórios e workspaces, é importante considerar as necessidades e características do projeto.

Cada abordagem possui vantagens e desvantagens, e a escolha dependerá dos requisitos e preferências da equipe.

YOUR LOGO HERE

COMPARE.TF

24 of 28

/LADO A LADO

COMPARE.TF

YOUR LOGO HERE

25 of 28

/DIRETÓRIOS

COMPARE.TF

/PRÓS

Cada ambiente tem sua propria configuração

/CONTRAS

Pode ser ajustado de acordo com cada necessidade

É fácil visualizar e gerenciar as configurações de cada ambiente

É fácil esquecer de aplicar uma alteração em todos os ambiente

Pode ser tedioso manter vários arquivos separados

Requer duplicação de arquivos em cada ambiente

26 of 28

/WORKSPACES

COMPARE.TF

/PRÓS

Mais fácil de gerenciar muitos ambientes

/CONTRAS

Usa uma única fonte de verdade para o código, não há duplicação

Permite que você crie instâncias separadas, a alternância entre os workspaces é fácil 

A configuração compartilhada precisa ser gerenciada com cuidado para garantir que seja aplicada em todos os workspaces

Requer mais cuidado para evitar conflitos

27 of 28

/CONCLUSÃO

END.TF

Em geral, a estratégia de separação por workspaces é mais flexível e 

escalável para projetos maiores.

No entanto, a estratégia de separação por diretórios pode ser mais fácil de implementar e entender para projetos menores ou menos complexos.

É importante escolher a estratégia que melhor atenda às necessidades específicas do seu projeto. Em alguns casos, pode até ser possível usar uma combinação de ambas as estratégias para atender às suas necessidades.

28 of 28

/OBRIGADO!

/PERGUNTAS?

asilva@unicast.com.br�github.com/asilvajunior

unicast.com.br

Avalie esta apresentação, acesse o repositório e baixe o conteúdo apresentado!

THANKS.TF