首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用地形创建3个ILB

需要使用地形创建3个ILB
EN

Stack Overflow用户
提问于 2022-09-03 06:57:40
回答 1查看 53关注 0票数 0

该代码用于创建一个ILB,但我需要使用下面的terraform代码创建三个ILB。但我无法为每一个人想出计算的逻辑。例如,如果我在模块中为ilb_name使用'for‘,如何引用ip地址和组管理器,每个地址都使用相同的地址。提前谢谢你的时间。

Terraform tf vars

代码语言:javascript
复制
ilb_name          = ["qat-rs-web","qat-rs-lb","qat-wi-web"]
project_id        = "cloudops-dev01-sb"

project_name      = "cloudops-dev01-sb"

region            = "us-east4"
#"us-west1"
subnetwork        = "cloudops-sb-sandbox-us-east4"
health_check_port = "4000"
ports             = [4000, 5000]
load_balancer_ip_name = "test-ilb-ip"


#instance-template
name_prefix  = "rs-instance-template"
instance_description = "rs instance template"
machine_type         = "n1-standard-2"
network              = "dev-shared"
subnetwork_project   = "dev-host"
compute_ip_address   = ["10.0.0.8","10.238.0.9","10.238.0.10"]
image_family         = "gold-centos-7"
source_image_project = "dev-tools"

group_manager_name = ["rs-web-igm","rs-lb-igm","wi-web-igm"]
base_instance_name = "qat-rs-app"
target_size        = "2" 

模块/ilb.tf

代码语言:javascript
复制
data "google_compute_image" "default_image" {
  family  = var.image_family
  project = var.source_image_project
}
resource "google_compute_address" "load_balancer_ip" {
  project      = var.project_id
  name         = "load-balancer-ip-name-${var.project_id}"
  subnetwork   = var.subnetwork
  address_type = "INTERNAL"
  address      = var.compute_ip_address
  region       = var.region
}

resource "google_compute_instance_template" "instance_template" {
  name_prefix          = var.name_prefix
  instance_description = var.instance_description
  machine_type         = var.machine_type
  region               = var.region
  #foll.
  project = var.project_id

  labels = var.labels

  // boot disk
  disk {
    source_image = data.google_compute_image.default_image.self_link
    auto_delete  = false
  }

  network_interface {
    network            = var.network
    subnetwork         = var.subnetwork
    subnetwork_project = var.subnetwork_project
  }


}

resource "google_compute_region_instance_group_manager" "rs_igm" {
  name               = var.group_manager_name
  base_instance_name = var.base_instance_name
  region             = var.region
  target_size        = var.target_size
  project = var.project_id

  version {
    instance_template = google_compute_instance_template.instance_template.id
  }


  update_policy {
    type                  = "PROACTIVE"
    minimal_action        = "REPLACE"
    max_surge_fixed       = 4
    max_unavailable_fixed = 0
  }
  auto_healing_policies {
    health_check      = google_compute_health_check.tcp.id
    initial_delay_sec = 300
  }
}


# Forwarding Rule
resource "google_compute_forwarding_rule" "default" {
  name    = var.name
  project = var.project_id
  region  = var.region
  subnetwork            = var.subnetwork
  load_balancing_scheme = "INTERNAL"
  backend_service       = google_compute_region_backend_service.default.self_link
  ip_protocol           = "TCP"
  ip_address            = google_compute_address.load_balancer_ip.address
  ports                 = var.ports
  service_label         = var.name
}

# Backend
resource "google_compute_region_backend_service" "default" {
  name                            = var.name
  project                         = var.project_id
  region                          = var.region
  protocol                        = "TCP"
  timeout_sec                     = 10
  connection_draining_timeout_sec = 10
  session_affinity                = var.session_affinity

  /* "backend" {
    for_each = var.backends
    content {
      description = lookup(backend.value, "description", null)
      group       = lookup(backend.value, "group", null)
    }
  }*/

   backend {
    group          = google_compute_region_instance_group_manager.rs_igm.instance_group
    balancing_mode = "UTILIZATION"
  }

  health_checks = [google_compute_health_check.tcp.self_link]

}

# Health Check(s)
resource "google_compute_health_check" "tcp" {
  name    = "${var.name}-hc"
  project = var.project_id

  tcp_health_check {
    port = var.health_check_port
  }
}

main.tf

代码语言:javascript
复制
module "qat_hosted_pacs_ilb" {
  source = "../modules/load_balancer/"
  for_each = toset([var.ilb_name])
  image_family = var.image_family
  source_image_project = var.source_image_project
  project_id = var.project_id
  #load_balancer_ip_name = var.load_balancer_ip_name
  compute_ip_address = each.value.compute_ip_address
  region = var.region
  network            = var.network
  subnetwork         = var.subnetwork
  subnetwork_project = var.subnetwork_project
  
  name_prefix = var.name_prefix
  instance_description = var.instance_description
  machine_type = var.machine_type
  labels = var.labels

  group_manager_name = each.value.group_manager_name
  base_instance_name = var.base_instance_name
  target_size = var.target_size

  name = each.value.ilb_name
  ports = var.ports

  
}
代码语言:javascript
复制
Error: Unsupported attribute

  on main.tf line 8, in module "qat_hosted_pacs_ilb":
   8:   compute_ip_address = each.value.compute_ip_address
    |----------------
    | each.value is "cloudops-dev01-ilb"

This value does not have any attributes.


Error: Unsupported attribute

  on main.tf line 19, in module "qat_hosted_pacs_ilb":
  19:   group_manager_name = each.value.group_manager_name
    |----------------
    | each.value is "cloudops-dev01-ilb"

This value does not have any attributes.


Error: Unsupported attribute

  on main.tf line 23, in module "qat_hosted_pacs_ilb":
  23:   name = each.value.ilb_name
    |----------------
    | each.value is "cloudops-dev01-ilb"

This value does not have any attributes.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-03 07:43:38

由于您将ilb_namegroup_manager_namecompute_ip_address保持为三个不同的列表,所以使用count比使用for_each更容易

代码语言:javascript
复制
module "qat_hosted_pacs_ilb" {
  source = "../modules/load_balancer/"
  count  = length(ilb_name)
  image_family = var.image_family
  source_image_project = var.source_image_project
  project_id = var.project_id
  #load_balancer_ip_name = var.load_balancer_ip_name
  compute_ip_address = var.compute_ip_address[count.index]
  region = var.region
  network            = var.network
  subnetwork         = var.subnetwork
  subnetwork_project = var.subnetwork_project
  
  name_prefix = var.name_prefix
  instance_description = var.instance_description
  machine_type = var.machine_type
  labels = var.labels

  group_manager_name = var.group_manager_name[count.index]
  base_instance_name = var.base_instance_name
  target_size = var.target_size

  name  = var.ilb_name[count.index]
  ports = var.ports  
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73590277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档