Balancer

 avatar
unknown
terraform
3 months ago
2.9 kB
9
Indexable
terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}

provider "yandex" {
  token     = var.yc_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-b"
}

variable "yc_token" {
  type        = string
  sensitive   = true
}

variable "cloud_id" {
  type = string
}

variable "folder_id" {
  type = string
}

resource "yandex_vpc_network" "main" {
  name = "terraform-test"
}

resource "yandex_vpc_subnet" "main" {
  name           = "test-subnetwork"
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.main.id
  v4_cidr_blocks = ["10.132.0.0/16"]
}

resource "yandex_iam_service_account" "ig_sa" {
  name = "ig-service-account"
}

resource "yandex_resourcemanager_folder_iam_member" "ig_editor" {
  folder_id = var.folder_id
  role      = "editor"
  member    = "serviceAccount:${yandex_iam_service_account.ig_sa.id}"
}

resource "yandex_compute_instance_group" "web_group" {
  name               = "web-instance-group"
  service_account_id = yandex_iam_service_account.ig_sa.id

  instance_template {
    platform_id = "standard-v3"

    resources {
      cores = 2
      memory = 2
    }

    boot_disk {
      initialize_params {
        image_id = "fd804teg9bthv0h96s8v"
        size     = 10
      }
    }

    network_interface {
      network_id = yandex_vpc_network.main.id
      subnet_ids = [yandex_vpc_subnet.main.id]
      nat        = true
    }

    scheduling_policy {
      preemptible = true
    }

    metadata = {
      user-data = <<-EOF
        #cloud-config
        packages:
          - nginx
        runcmd:
          - systemctl enable nginx
          - systemctl start nginx
      EOF
    }
  }

    scale_policy {
    auto_scale {
      min_zone_size = 3
      initial_size  = 3

      max_size = 10

      cpu_utilization_target = 60

      measurement_duration  = 60
      warmup_duration       = 60
      stabilization_duration = 120
    }
  }

  allocation_policy {
    zones = ["ru-central1-b"]
  }

    deploy_policy {
    max_unavailable = 1
    max_expansion   = 1
  }

  load_balancer {
    target_group_name = "web-target-group"
  }

  depends_on = [yandex_resourcemanager_folder_iam_member.ig_editor]
}

resource "yandex_lb_network_load_balancer" "web_lb" {
  name = "web-load-balancer"

  listener {
    name        = "http-listener"
    port        = 80
    target_port = 80
    external_address_spec {
      ip_version = "ipv4"
    }
  }

  attached_target_group {
    target_group_id = yandex_compute_instance_group.web_group.load_balancer[0].target_group_id

    healthcheck {
      name = "http-check"
      http_options {
        port = 80
        path = "/"
      }
    }
  }
}

output "load_balancer_ip" {
  value = [
    for listener in yandex_lb_network_load_balancer.web_lb.listener :
    listener.external_address_spec
  ]
  description = "IP-адрес балансировщика"
}
Editor is loading...
Leave a Comment