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