Terraform, как получить динамический маршрут в таблице маршрутов на основе рабочей области

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)
}

Как добиться этого - динамический способ, основанный на рабочем пространстве / среде.

2
BalaB 13 Окт 2020 в 15:03

1 ответ

Лучший ответ

Для этого вы можете использовать динамический блок.

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)
}

Обычно, когда var.env равно DEV, второй route не создается.

2
Marcin 13 Окт 2020 в 12:09