Pular para o conteúdo principal

Terraform

Conceitos do terraform

O que é IaC ?

Infrastructure as Code (Infraestrutura como Código) é o processo de gerenciar e provisionar infraestrutura como servidores, redes e bancos de dados por meio de arquivos de configuração; invés de realizar a criação de recursos manualmente (clickops), a IaC permite automatizar esse processo de forma repetitiva, efêmera e consistente.

O que é terraform ?

Terraform é uma ferramenta de infraestrutura como código (IaC) que permite construir, alterar e versionar infraestrutura de forma segura e eficiente. Incluindo componentes de baixo nível como instâncias de computação, storage e networking; e também de alto nível como entradas DNS e recursos SaaS. O Terraform não é uma ferramenta de gerenciamento de configuração como o Ansible, logo elas não se competem e podem ser complementares, afinal provisionamento de infraestrutura e gerenciamento de configuração resolvem problemas diferentes.

Características do terraform

O Terraform é agnóstico à Cloud ou seja é capaz de funcionar com qualquer provedor de nuvem, e além disso ele trabalha com programação declarativa que significa que ao invés de escrever instruções passo a passo, você descreve o que deseja.

Lógica de funcionamento

Quando o Terraform é executado, ele lê todos os arquivos no diretório de trabalho que possuem uma extensão .tf e os concatenará. O código terraform utiliza a linguagem HCL (Hashicorp Configuration Language) Para configurar o provider e os recursos que queira criar é necessário criar o código dentro do arquivo main.tf , no exemplo abaixo, o provider ficou configurado para a AWS e o recurso é uma instância EC2 com alguns atributos especificados ...

provider "aws" {
region = "us-west-2"
}

resource "aws_instance" "helloworld" {
ami = "ami-09dd2e08d601bff67"
instance_type = "t3.micro"
tags = {
Name = "HelloWorld"
}
}

Para configurar as credenciais no terraform, apesar de possível, por segurança não é recomendado chumbar no código, o ideal é exporta-las para variáveis de ambiente ou se autenticar usando uma CLI nativa do Cloud Provider

Linux

export AWS_ACCESS_KEY_ID="sua-access-key"
export AWS_SECRET_ACCESS_KEY="sua-secret-key"
export AWS_DEFAULT_REGION="us-east-1"

ou

Windows

$env:AWS_ACCESS_KEY_ID="sua-access-key"
$env:AWS_SECRET_ACCESS_KEY="sua-secret-key"
$env:AWS_DEFAULT_REGION="us-east-1"

Após o código escrito no main.tf e as credenciais salvas, precisamos inicializar o espaço de trabalho com o comando terraform init, a inicialização é necessária pelo menos uma vez para todos os espaços de trabalho.

Então com o comando terraform plan é possível verificar o plano de mudanças para saber quais serão as alterações e depois use o comando terraform apply para aplicar as alterações no destino.

Se necessário, use terraform destroy para remover as alterações aplicadas.

Arquivos de configuração

main.tf É o arquivo de configuração principal do terraform

variables.tf É o arquivo com as declarações de variáveis (podendo atribuir valores ou não)

terraform.tfvars É o arquivo de atribuição de valores nas variáveis já declaradas em variables.tf

outputs.tf É o arquivo de configuração para dados de saída.

terraform.tfstate É o arquivo de estado do terraform

Backend remoto

Backend remoto é o arquivo de estado (terraform.tfstate) do terraform configurado para ser armazenado em um local centralizado e remoto como por exemplo um bucket em um provedor cloud ou até no próprio terraform cloud.

Com o backend remoto os membros da equipe podem trabalhar colaborativamente e ter uma unica fonte da verdade.

O backend remoto também pode ser utilizado em uma ferramenta de pipeline CI/CD

Comandos terraform

terraform -help

O comando acima ajuda a entender para que serve cada opção de comando.

terraform init

O comando acima inicializa o backend, instala os plugins necessários para conversar com os providers e deixa o terraform pronto para ser usado no diretório atual (workspace).

terraform validate

O comando acima valida se a sintaxe nos arquivos de configuração estão corretas.

terraform plan

O comando acima apenas mostra o plano de mudanças contendo os detalhes do que o terraform deve aplicar para casar com a configuração ou estado desejado .

terraform apply

O comando acima aplica as mudanças na infraestrutura do mundo real (cloud provider) conforme o plano de mudanças.

terraform destroy

O comando acima remove toda a infraestrutura do mundo real (cloud provider) que é gerenciada pelo terraform (terraform.tfstate)

terraform show

O comando acima mostra o arquivo de estado do terraform (terraform.tfstate)

terraform refresh

O comando acima atualiza o arquivo de estado (terraform.tfstate) com a infra existente no mundo real (cloud provider).

terraform import

O comando acima deixa você importar recursos de infraestrutura existentes para que você possa gerenciá-los com o Terraform.

terraform output

O comando acima retorna os dados de saída