O que é o Terraform?
O Terraform é uma ferramenta criada pela HashiCorp de infraestrutura como código (IaC) que nos permite provisionar e gerenciar recursos de infraestrutura de maneira automatizada através de linguagem declarativa. O terraform garante a idempotencia, graças a ter estado declarativo, grafo de dependências, fase de planejamento do terraform entre outras características.
Esta POC foi feita com o intuito de registrar meus estudos/contato inicial com o Terraform servindo como base para maiores aprofundamentos no futuro. Este provisiona tanto um arquivo local, quanto uma estrutura na AWS. Sendo que a estrutura de arquivos para o provisionamento na AWS esta disponível em dois formatos, um com arquivos declarativos mais diretos (configuração monolítica) disponível na branch main e com um formato usando module (configuração modular) disponível na branch feature/module.
terraform init
terraform plan
terraform apply
terraform destroy
- Usado para declarar um recurso que será gerenciado pelo Terraform. Recursos podem ser máquinas virtuais, redes, bancos de dados, entre outros.
resource "local_file" "example" {
content = exampleContent
filename = "${path.module}/exemple.txt"
}
- Usado para consultar dados externos que não são gerenciados diretamente pelo Terraform. Pode ser usado para obter informações sobre recursos existentes, como subnets, AMIs, etc.
data "local_file" "read_example_file" {
filename = "${path.module}/exemple.txt"
}
- Usado para expor informações sobre os recursos gerenciados pelo Terraform.
output "data-source-result" {
value = data.local_file.read_example_file.content_base64
}
- Permite definir variáveis que podem ser usadas para parametrizar sua configuração
variable "conteudo" {
type = string
default = "Texto que ira aparecer dentro do arquivo"
}
.:
resource "local_file" "exemplo" {
content = var.conteudo
filename = "${path.module}/exemplo.txt"
}
- Usado para configurar o provedor de infraestrutura que o Terraform utilizará para gerenciar os recursos
provider "aws" {
region = "us-east-1"
}
- Usado para configurar o backend onde o estado do Terraform será armazenado.
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "terraform.tfstate"
region = "us-east-1"
}
}
- Permitem organizar e reutilizar blocos de configuração Terraform.
module "example" {
source = "./modules/example"
// Configurações específicas do módulo
}
- Arquivos de configuração com linguagem declarativa criado pelo dev.
- Arquivo de variáveis do Terraform
- Arquivo com o estado atual da infra
- Backup do arquivo .tfstate