count
The count
parameter in Terraform allows you to create a specified number of identical resources. It is an integral part of a resource block that defines how many instances of a particular resource should be created.
Pros:
- Simple to use: The
count
parameter is straightforward for creating multiple instances of a resource. - Suitable for homogeneous resources: When all the resources you’re creating are identical except for an identifier,
count
is likely a good fit.
Cons:
- Lacks key-based identification:
count
doesn’t include a way to address a resource with a unique key directly; you have to rely on an index. - Immutable: If you remove an item from the middle of the
count
list, Terraform marks all subsequent resources for recreation which can be disruptive in certain scenarios.
count = 3 is added.
One EC2 had already been created, therefore it added 2 more. This feature is called… ” “.
Screenshot from aws console.
for_each
The for_each
loop in Terraform, used within the for_each
argument, iterates over a map or a set of strings, allowing you to create resources that correspond to the given elements.
Pros:
- Detailed declaration:
for_each
provides greater control when creating resources that require specific attributes or configurations. - Key-based identification: Resources created with
for_each
can be directly identified and accessed by their keys, making modifications more manageable. - Non-destructive updates: If you remove an item from the map or set, only that specific resource will be affected.
Cons:
- Complexity:
for_each
is more complex to use thancount
and requires more planning. - Requires a set or map: You must provide a set or map of items to iterate over, which might not be necessary or straightforward for all situations.
When to Use Count vs. For_each
Both constructs are powerful, but they shine in different situations. Here’s a quick reference to determine which to use:
Use Count when:
- You need to create a fixed number of similar resources.
- Resource differences can be represented by an index.
Use For_each when:
- You’re dealing with a collection of items that have unique identifiers.
- Your resources are not perfectly identical and require individual configurations.
- You plan to make future modifications that should not affect all resources.