Sling Academy
Home/DevOps/Using ‘count’ in Terraform to create multiple resources

Using ‘count’ in Terraform to create multiple resources

Last updated: February 03, 2024

Overview

Terraform by HashiCorp is a highly popular Infrastructure as Code (IaC) tool that allows developers and operations teams to define infrastructure through code to automate deployment, management, and scaling of cloud and on-premises resources. One powerful feature Terraform offers is the count parameter, which enables users to create multiple instances of a resource without having to duplicate code. This tutorial will guide you through using count in Terraform with various examples, ranging from basic to advanced.

Basic Usage of count

The count parameter in Terraform allows for the creation of multiple resources based on a numerical count. It is particularly useful when you need several instances of the same resource but don’t wish to create each one manually. This not only saves time but also keeps your configurations dry (Don’t Repeat Yourself).

Basic Usage of count

Let’s start with a simple example where we create multiple instances of an AWS EC2 instance.

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

In this example, the count parameter is set to 3, which tells Terraform to create three instances of the AWS EC2 resource. Each instance will be identical, having the same AMI and instance type.

Accessing Individual Resources

When you create multiple resources using count, you may need to access each resource individually. This can be done using the syntax resource_type.resource_name[count_index].

For instance, to output the IP address of the first EC2 instance created above, you would use:

output "first_instance_ip" {
  value = aws_instance.example[0].public_ip
}

Conditionally Creating Resources

Another powerful feature of count is its ability to conditionally create resources. This enables you to control the creation of resources based on variables or conditions within your configuration.

resource "aws_instance" "conditional_example" {
  count         = var.create_instances ? 3 : 0
  ami           = var.ami_id
  instance_type = var.instance_type
}

In the example above, the number of instances created is determined by the boolean variable create_instances. If create_instances is true, three instances are created; otherwise, no instances are created.

Advanced Usage of count

As we progress to more advanced examples, let’s examine how to use count with loops and dynamically configure each instance.

Creating Unique Resources with Loops

Loops in Terraform can be used in combination with count to create uniquely configured resources. For example, let’s create multiple EC2 instances with unique tags.

resource "aws_instance" "loop_example" {
  count         = 3
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "Instance-${count.index+1}"
  }
}

In this example, each EC2 instance will have a unique tag with its numbering starting from 1. This demonstrates how you can dynamically configure resources using count and looping constructs.

Complex Conditional Creation

For more complex conditions, we can integrate count with Terraform’s powerful expressions to fine-tune the creation of our resources. Let’s create instances based on a list of provided AMIs, but only if the list isn’t empty.

resource "aws_instance" "complex_conditional" {
  count         = length(var.amis) > 0 ? length(var.amis) : 0
  ami           = var.amis[count.index]
  instance_type = "t2.micro"
}

This example highlights how count combined with Terraform expressions can provide a flexible and powerful way to manage the creation of your infrastructure.

Conclusion

Understanding and utilizing the count parameter in Terraform can significantly streamline your infrastructure as code practices. By enabling the creation of multiple resources through a single declaration, count helps maintain clean and efficient configurations. Whether you’re looking to simplify repetitive resource definitions, introduce conditional resource creation, or dynamically configure resources, count is a tool that should be in every Terraform practitioner’s toolkit.

Next Article: What are plan, apply, and destroy in Terraform?

Previous Article: Terraform: How to achieve zero-downtime deployments

Series: Terraform Tutorials

DevOps

You May Also Like

  • How to reset Ubuntu to factory settings (4 approaches)
  • Making GET requests with cURL: A practical guide (with examples)
  • Git: What is .DS_Store and should you ignore it?
  • NGINX underscores_in_headers: Explained with examples
  • How to use Jenkins CI with private GitHub repositories
  • Terraform: Understanding State and State Files (with Examples)
  • SHA1, SHA256, and SHA512 in Terraform: A Practical Guide
  • CSRF Protection in Jenkins: An In-depth Guide (with examples)
  • Terraform: How to Merge 2 Maps
  • Terraform: How to extract filename/extension from a path
  • JSON encoding/decoding in Terraform: Explained with examples
  • Sorting Lists in Terraform: A Practical Guide
  • Terraform: How to trigger a Lambda function on resource creation
  • How to use Terraform templates
  • Understanding terraform_remote_state data source: Explained with examples
  • Jenkins Authorization: A Practical Guide (with examples)
  • Solving Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
  • Understanding Artifacts in Jenkins: A Practical Guide (with examples)
  • Using Jenkins with AWS EC2 and S3: A Practical Guide