Terraform how to get dynamic route in route table

Viewed 937

Terraform how to get dynamic route in route table based on the workspace

UAT

resource "aws_vpn_gateway" "micorsoft_vpn_gw" { 
  vpc_id = aws_vpc.default.id

  tags = {
    Name = "micorsoft"
  }
}

resource "aws_route_table" "private" { 
  vpc_id = aws_vpc.default.id
  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.default.id
  }
  
  route {
    cidr_block     = "0.0.0.0/0"
    gateway_id     =  aws_vpn_gateway.micorsoft_vpn_gw.id
  }

  tags = merge(map("Name", "${var.namespace}-${var.environment}"), var.tags)
}

DEV

resource "aws_route_table" "private" { 
  vpc_id = aws_vpc.default.id
  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.default.id
  }
 
  tags = merge(map("Name", "${var.namespace}-${var.environment}"), var.tags)
}

How to achieve this is dynamic way based on workdspace/environment

1 Answers

You can use dynamic block for that.

resource "aws_route_table" "private" { 
  vpc_id = aws_vpc.default.id

  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.default.id
  }
  
  dynamic "route" {
      for_each = var.env == "DEV" ? toset([]) : toset([1])
      content {
        cidr_block     = "0.0.0.0/0"
        gateway_id     =  aws_vpn_gateway.micorsoft_vpn_gw.id
      }      
  }

  tags = merge(map("Name", "${var.namespace}-${var.environment}"), var.tags)
}

Basically, when the var.env is DEV, no second route will be created.

Related