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-argumento | Propósito |
|---|---|
depends_on | Dependência explícita |
count | Cria N cópias do resource |
for_each | Cria uma cópia para cada elemento de um map/set |
lifecycle | Controla comportamento de create/destroy/update |
provider | Especifica 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