No Terraform, as dependências entre os recursos são gerenciadas de duas maneiras: dependências implícitas e dependências explícitas. Isso garante que os recursos sejam provisionados na ordem correta.
Dependências Implícitas
As dependências implícitas são aquelas que o Terraform entende automaticamente com base nas referências entre os recursos. Quando um recurso usa uma propriedade de outro recurso, o Terraform entende que existe uma dependência entre esses 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.
É uma dica simples que gera muito valor no seu desenvolvimento. Além disso, não posso esquecer de mencionar que o artigo foi feito pelo nosso DevOps, Gabriel Munhoz.
✨ Nos acompanhe nas redes sociais e até a próxima!
https://www.linkedin.com/company/deltaopscloud/
✨ Referência:
https://developer.hashicorp.com/terraform/tutorials/configuration-language/dependencies