Terraform Advanced — depends_on Advanced
When Terraform can’t infer a dependency, you need explicit depends_on.
When You Need depends_on
Terraform auto-detects dependencies from references:
subnet_id = aws_subnet.main.id → implicit dependency ✅
But some dependencies are invisible:
IAM policy must propagate before EC2 can assume role
SG rule must exist before instance launches
Example: IAM Propagation Delay
resource "aws_iam_role_policy_attachment" "eks" {
role = aws_iam_role.eks.name
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
}
resource "aws_eks_cluster" "main" {
name = "prod"
role_arn = aws_iam_role.eks.arn
# ...
depends_on = [aws_iam_role_policy_attachment.eks]
# Without this, EKS creation may fail because IAM hasn't propagated
}
depends_on for Modules
module "app" {
source = "./modules/app"
depends_on = [module.networking, module.database]
}
Anti-Pattern: Overusing depends_on
# ❌ Anti-pattern: depends_on when a reference would work
resource "aws_instance" "app" {
subnet_id = aws_subnet.main.id # Already creates dependency
depends_on = [aws_subnet.main] # Redundant!
}
💡 Production Tip: Only use
depends_onwhen there’s no attribute reference between resources. If you’re referencing an attribute, the dependency is already implicit.
What’s Next?
Force resource replacement on external changes.