Resources são os blocos fundamentais do Terraform, representando um componente de infraestrutura que será criado, atualizado ou destruído.

Sintaxe de um resource

resource "<tipo>" "<nome_local>" {
  argumento = valor
}
  • <tipo>: identificador do provider + tipo do recurso: aws_instance, google_storage_bucket, local_file
  • <nome_local>: nome para referenciar o resource dentro do Terraform (não é o nome real na cloud)
resource "aws_s3_bucket" "meu_bucket" {
  bucket = "meu-projeto-assets-2026"
 
  tags = {
    Environment = "production"
    Project     = "meu-projeto"
  }
}

Referenciando outros resources

Use <tipo>.<nome>.<atributo> para referenciar atributos de outro resource. O Terraform resolve automaticamente as dependências implícitas:

resource "aws_s3_bucket_versioning" "versioning" {
  bucket = aws_s3_bucket.meu_bucket.id
 
  versioning_configuration {
    status = "Enabled"
  }
}

Dependências explícitas

Quando uma dependência não está expressa via referência, use depends_on:

resource "aws_instance" "app" {
  # ...
  depends_on = [aws_iam_role_policy.permissao]
}

Data Sources

Data sources permitem consultar recursos existentes (não gerenciados pelo Terraform) para usar seus atributos:

data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"] # Canonical
 
  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-*-22.04-amd64-server-*"]
  }
}
 
resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"
}

Meta-argumentos

Meta-argumentoPropósito
depends_onDependência explícita
countCria N cópias do resource
for_eachCria uma cópia para cada elemento de um map/set
lifecycleControla comportamento de create/destroy/update
providerEspecifica qual provider alias usar

Exemplo com for_each

variable "buckets" {
  default = ["assets", "logs", "backups"]
}
 
resource "aws_s3_bucket" "varios" {
  for_each = toset(var.buckets)
  bucket   = "meu-projeto-${each.key}"
}

Ver também: terraform-providers | terraform-variaveis | terraform