Upgrade & Secure Your Future with DevOps, SRE, DevSecOps, MLOps!

We spend hours on Instagram and YouTube and waste money on coffee and fast food, but won’t spend 30 minutes a day learning skills to boost our careers.
Master in DevOps, SRE, DevSecOps & MLOps!

Learn from Guru Rajesh Kumar and double your salary in just one year.


Get Started Now!

Terraform Tutorials: How to set condition in Terraform Program?

Method 1: conditional expression

Terraform doesn’t support if statements. Luckily we can achieve the same result by using a specific parameter called count.
You can think about it this way: you can set count to 1 on a specific resource and get one copy of that resource.
However, setting the same count parameter to 0 you won’t get any resource created.

If condition is true then the result is true_val. If condition is false then the result is false_val.


<CONDITION> ? <TRUE_VAL> <FALSE_VAL>

resource "aws_instance" "example" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
  count         = var.create_instance ? 1 : 0

  tags = {
    Name = "My EC2 Instance"
  }
}

Method 2: Depends_on

Implicit dependencies are the primary way that Terraform understands the relationships between your resources. Sometimes there are dependencies between resources that are not visible to Terraform, however. The depends_on argument is accepted by any resource or module block and accepts a list of resources to create explicit dependencies for.

Add the following to main.tf. Since both the instance and the SQS Queue are dependent upon the S3 Bucket, Terraform waits until the bucket is created to begin creating the other two resources.



variable "instance_type" {
  default = "t2.micro"
}

resource "aws_instance" "example" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = var.instance_type

  tags = {
    Name = "My EC2 Instance"
  }
}

resource "aws_s3_bucket" "example_bucket" {
  depends_on = [aws_instance.example]
  bucket     = "my-unique-bucket-name"
  acl        = "private"
}

resource "aws_s3_bucket" "example" {
  acl    = "private"
}

resource "aws_instance" "example_c" {
  ami           = data.aws_ami.amazon_linux.id
  instance_type = "t2.micro"

  depends_on = [aws_s3_bucket.example]
}

module "example_sqs_queue" {
  source  = "terraform-aws-modules/sqs/aws"
  version = "2.1.0"

  depends_on = [aws_s3_bucket.example, aws_instance.example_c]
}

Example code for terraform calling multiple modules in dependson


# main.tf
module "module1" {
  source = "./module1"
}

module "module2" {
  source = "./module2"
}

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

  depends_on = [
    module.module1,
    module.module2
  ]
}

In this example, we have two modules, module1 and module2, and an EC2 instance defined in the aws_instance resource. The depends_on argument specifies that the instance should be created only after both module1 and module2 have been created.

DevOps Certification, SRE Certification, and DevSecOps Certification by DevOpsSchool

Explore our DevOps Certification, SRE Certification, and DevSecOps Certification programs at DevOpsSchool. Gain the expertise needed to excel in your career with hands-on training and globally recognized certifications.