У меня есть сценарий использования, в котором я хотел создать 2 балансировщика нагрузки приложения, одно будет общедоступным, другое будет частным с использованием модулей terraform.
Я знаю, что мы можем создать 2 каталога с одинаковым кодомдля приватных и общедоступных параметров соответственно, но я пытался создать оба балансировщика нагрузки, используя интерполяцию terraform, как упомянуто ниже.
Модуль ALB:
resource "aws_alb" "default" {
name = "${var.name}-${var.env_name}-${var.internal == "false" ? "public" : "private" }"
internal = "${var.internal == "false" ? "false" : "true" }"
security_groups = ["${var.internal == "false" ? var.sg80 : var.instance_in_all }"]
subnets = ["${var.internal == "false" ? var.public_subnets : var.private_subnets }"]
}
main.tf из того места, где я вызываю модуль alb.
module "public-alb" {
source = "../../modules/alb"
name = "example"
internal = "false" #internal: Give it false for public load balancer.
env_name = "production"
vpc_id = "${module.vpc.vpc_id}"
public_subnets = "${module.vpc.public_subnets}"
private_subnets = "${module.vpc.public_subnets}" #This does not matter here because check condition in internal file.
sg80 = "${module.security-group.sg80}"
instance_in_all = "${module.security-group.instance_in_all}" #This does not matter here because check condition in internal file.
}
module "private-alb" {
source = "../../modules/alb"
name = "example"
internal = "true" #internal: Give it false for public load balancer.
env_name = "production"
vpc_id = "${module.vpc.vpc_id}"
private_subnets = "${module.vpc.public_subnets}"
public_subnets = "${module.vpc.public_subnets}" #This does not matter here because check condition in internal file.
sg80 = "${module.security-group.sg80}" #This does not matter here because check condition in internal file.
instance_in_all = "${module.security-group.instance_in_all}"
}
Итак, для общего балансировщика нагрузки я должен передать частные подсети и внутреннюю группу безопасности с частным балансировщиком нагрузки.передать открытые подсети и внешнюю группу безопасности, потому что я передаю эти переменные из variables.tf (упомянутого ниже), в котором нет необходимости.
variable "vpc_id" {}
#variable "private_subnets" { type = "list"}
variable "sg80" {}
variable "public_subnets" {
type = "list"
}
variable "name" {}
variable "internal" {}
variable "env_name" {}
variable "private_subnets" {
type = "list"
}
variable "instance_in_all" {}
Я хотел бы знать, является ли это правильным способом или отдельнымкаталог является единственным обходным решением на данный момент.