Terraform AWS - Как изменить маршрут по умолчанию для существующей таблицы маршрутов с nat-gateway на ec2? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть частная подсеть с маршрутизацией по умолчанию для nat-gateway. Оба были созданы terraform.

Теперь у меня есть другой код для поднятия ec2 для использования в качестве NAT в моем VPC (поскольку cloud-nat-gateway становится очень дорогим). Я пытаюсь изменить маршрут по умолчанию в моем rtb на этот новый ec2 и получаю ошибку ниже:

Ошибка: ошибка при применении плана:

1 произошла ошибка: * module.ec2-nat.aws_route.defaultroute_to_ec2-nat: 1 произошла ошибка: * aws_route.defaultroute_to_ec2-nat: Ошибка создания маршрута: RouteAlreadyExists: маршрут, обозначенный 0.0.0.0/0, уже существует. код состояния: 400, идентификатор запроса: 408deb59-d223-4c9f-9a28-209e2e0478e9

Я знаю, что этот маршрут уже существует, но как изменить этот уже существующий маршрут на новую цель? В этом случае мой новый сетевой интерфейс ec2?

Спасибо за вашу помощь.

Ниже приведен код, который я использую:

#####################
# FIRST TERRAFORM
# create the internet gateway

resource "aws_internet_gateway" "this" {
  count = "${var.create_vpc && length(var.public_subnets) > 0 ? 1 : 0}"

  vpc_id = "${aws_vpc.this.id}"

  tags = "${merge(map("Name", format("%s", var.name)), var.igw_tags, var.tags)}"
}

# Add default route (0.0.0.0/0) to internet gateway 

resource "aws_route" "public_internet_gateway" {
  count = "${var.create_vpc && length(var.public_subnets) > 0 ? 1 : 0}"

  route_table_id         = "${aws_route_table.public.id}"
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = "${aws_internet_gateway.this.id}"

  timeouts {
    create = "5m"
  }
}


#####################
# SECOND TERRAFORM
# Spin EC2 to run as NAT

resource "aws_instance" "ec2-nat" {
  count                       = "${var.instance_qtd}"
  ami                         = "${data.aws_ami.nat.id}"
  availability_zone           = "${var.region}a"
  instance_type               = "${var.instance_type}"
  key_name                    = "${var.aws_key_name}"
  vpc_security_group_ids      = ["${var.sg_ec2}","${var.sg_ops}"]
  subnet_id                   = "${var.public_subnet_id}"
  iam_instance_profile        = "${var.iam_instance_profile}"
  associate_public_ip_address = true
  source_dest_check           = false

  tags = {
    Name                          = "ec2-nat-${var.brand}-${var.role}-${count.index}"
    Brand                         = "${var.brand}"
    Role                          = "${var.role}"
    Type                          = "ec2-nat"
  }
}

# Add default route (0.0.0.0/0) to aws_instance.ec2-nat

variable "default_route" {
    default = "0.0.0.0/0"
}

resource "aws_route" "defaultroute_to_ec2-nat" {
  route_table_id              = "${var.private_route_id}"
  destination_cidr_block      = "${var.default_route}"
  instance_id                 = "${element(aws_instance.ec2-nat.*.id, 0)}"
}
...