Terraform: Gerenciando dependências entre recursos – guia prático

No Terraform, a ordem de criação dos recursos é fundamental. Se você tentar criar uma instância EC2 antes da VPC ou do Security Group, o provisionamento vai falhar. Para resolver isso, o Terraform oferece duas formas de gerenciar dependências entre recursos: dependências implícitas (automáticas) e dependências explícitas (manuais, com depends_on).

Neste guia, você vai aprender como e quando usar cada uma, com exemplos práticos na AWS.

⚡ Resumo rápido

No Terraform, as dependências entre recursos podem ser de dois tipos:

TipoComo funcionaQuando usar
ImplícitaAutomática, baseada em referências✅ Sempre que possível (recomendado)
ExplícitaManual, com depends_on✅ Quando não há referência direta entre recursos

Regra de ouro: Prefira dependências implícitas. Use depends_on apenas quando necessário.

O que são dependências no Terraform?

Dependências definem a ordem de criação dos recursos. Se o recurso A precisa de informações do recurso B (como um ID ou ARN), o recurso B deve ser criado antes do recurso A.

O Terraform constrói um grafo de dependências automaticamente e usa esse grafo para determinar a ordem correta de criação, atualização e destruição dos recursos.

Exemplo de Dependência Implícita

Vamos usar um exemplo simples de criar uma instância do AWS EC2 que depende de uma VPC e um grupo de segurança.

resource "aws_vpc" "example_vpc" {
cidr_block = "10.0.0.0/16"
}

resource "aws_security_group" "example_sg" {
vpc_id = aws_vpc.example_vpc.id
description = "Allow SSH"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}

resource "aws_instance" "example_instance" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"

vpc_security_group_ids = [aws_security_group.example_sg.id]
subnet_id = aws_vpc.example_vpc.default_subnet_id
}

Neste exemplo:

  • O grupo de segurança aws_security_group.example_sg depende da VPC aws_vpc.example_vpc porque usa vpc_id = aws_vpc.example_vpc.id.

A instância aws_instance.example_instance depende tanto da VPC quanto do grupo de segurança, pois usa vpc_security_group_ids e subnet_id.

Dependências Explícitas

As dependências explícitas são aquelas que você define manualmente usando o atributo depends_on. Isso é útil quando não tem uma referência direta entre os recursos, mas você ainda precisa garantir uma ordem específica de criação.

Exemplo de Dependência Explícita

Imagine que você tem um bucket do S3 que deve ser criado antes de uma instância EC2, mas não há uma referência direta entre eles. Você pode usar depends_on para forçar essa ordem.

resource "aws_s3_bucket" "example_bucket" { 
bucket = "my-example-bucket"
}
resource "aws_instance" "example_instance" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
depends_on = [aws_s3_bucket.example_bucket]
}

Neste caso, o Terraform garantirá que o bucket S3 seja criado antes da instância EC2 por causa do depends_on.

👨‍💻 Sobre o autor
Este artigo foi escrito por Gabriel Munhoz, DevOps na DeltaOps, com experiência em infraestrutura como código, automação e cloud computing.
Conecte-se com Gabriel no LinkedIn pelo nosso ex DevOps, Gabriel Munhoz.

✨ Nos acompanhe nas redes sociais e até a próxima!

https://deltaops.com.br

https://www.linkedin.com/company/deltaopscloud

✨ Referência: