/COMO TRABALHAR COM MÚLTIPLOS AMBIENTES NO TERRAFORM
TDC INNOVATION 2023
MAIN.TF
<ANTONIO.JUNIOR>
WHO.TF
Principal Cloud & DevOps Solution Architect
Microsoft MVP Azure
/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
TERRAFORM.TF
/ACELERANDO
DESENVOLVIMENTO E A GESTÃO DE INFRAESTRUTURA COMO CODIGO
/O QUE É O TERRAFORM?
TERRAFORM.TF
O Terraform é uma ferramenta de infraestrutura como código que permite criar, alterar e versionar a infraestrutura de maneira segura e eficiente.
/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
/DON'T REPEAT YOURSELF
DRY.TF
Elimine a repetição de código com o Terraform!
/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.
/ESTRATÉGIAS PARA TRABALHAR COM MULTIPLOS AMBIENTES
ENV.TF
/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.
/ESTRATÉGIAS
/POR WORKSPACES
ENV.TF
/POR DIRETÓRIOS
/ORGANIZANDO SEU CÓDIGO
STAGE.TF
/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.
/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.
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
/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"
}
/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"
}
/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.
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
/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
/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
/COMPARANDO �AS ESTRATÉGIAS
COMPARE.TF
/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
/LADO A LADO
COMPARE.TF
YOUR LOGO HERE
/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
/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
/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.
/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