Dynamic Blocks are more or less another way to implement a loop. Here are a few facts which you should keep in mind -
- Collections - You need to have collections .e.g. -
- Iterator - To create a you need to define an iterator.
- Content - Content is something onto which you wanna iterate.
Here is the syntax of
-
2. How to create your first terraform dynamic block
Before we implement our first terraform dynamic block let's first see an example without dynamic block.
In this example, we are going to create two ingress rules for the 80 and 443. So if we do not use dynamic block then we need to create two ingress rules blocks inside the terraform file.
. Both ingress rules are exactly the same apart from the port numbers .i.e. -provider "aws" {
region ="us-east-1"
}
//security
resource "aws_security_group" "sg1" {
ingress {
description = "ingress_rule_1"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "ingress_rule_2"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
"Name" = "Static Inbound Rule"
}
}
The same terraform file can be improved by using dynamic block, now look at the following terraform file -
provider "aws" {
region ="us-east-1"
}
//locals
locals {
ingress_rules = [{
port = 443
description = "Ingress rules for port 443"
},
{
port = 80
description = "Ingree rules for port 80"
}]
}
//security
resource "aws_security_group" "sg1" {
dynamic "ingress" {
for_each = local.ingress_rules
content {
description = ingress.value.description
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
tags = {
"Name" = "Dynamic Inbound Rule"
}
}
Now you can imagine, if you need to define more than 2 ingress rules then using dynamic block can help you to reduce the line of code inside your terraform file.
Comments
Post a Comment