google_compute_instance_group

Creates a group of dissimilar Compute Engine virtual machine instances. For more information, see the official documentation and API

Example Usage - Empty instance group

resource "google_compute_instance_group" "test" {
  name        = "terraform-test"
  description = "Terraform test instance group"
  zone        = "us-central1-a"
  network     = google_compute_network.default.id
}

Example Usage - With instances and named ports

resource "google_compute_instance_group" "webservers" {
  name        = "terraform-webservers"
  description = "Terraform test instance group"

  instances = [
    google_compute_instance.test.id,
    google_compute_instance.test2.id,
  ]

  named_port {
    name = "http"
    port = "8080"
  }

  named_port {
    name = "https"
    port = "8443"
  }

  zone = "us-central1-a"
}

Example Usage - Recreating an instance group in use

Recreating an instance group that's in use by another resource will give a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy as shown in this example to avoid this type of error.

resource "google_compute_instance_group" "staging_group" {
  name      = "staging-instance-group"
  zone      = "us-central1-c"
  instances = [google_compute_instance.staging_vm.id]
  named_port {
    name = "http"
    port = "8080"
  }

  named_port {
    name = "https"
    port = "8443"
  }

  lifecycle {
    create_before_destroy = true
  }
}

data "google_compute_image" "debian_image" {
  family  = "debian-11"
  project = "debian-cloud"
}

resource "google_compute_instance" "staging_vm" {
  name         = "staging-vm"
  machine_type = "e2-medium"
  zone         = "us-central1-c"
  boot_disk {
    initialize_params {
      image = data.google_compute_image.debian_image.self_link
    }
  }

  network_interface {
    network = "default"
  }
}

resource "google_compute_backend_service" "staging_service" {
  name      = "staging-service"
  port_name = "https"
  protocol  = "HTTPS"

  backend {
    group = google_compute_instance_group.staging_group.id
  }

  health_checks = [
    google_compute_https_health_check.staging_health.id,
  ]
}

resource "google_compute_https_health_check" "staging_health" {
  name         = "staging-health"
  request_path = "/health_check"
}

Argument Reference

The following arguments are supported:


The named_port block supports:

Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

Timeouts

This resource provides the following Timeouts configuration options: configuration options:

Import

Instance groups can be imported using the zone and name with an optional project, e.g.

In Terraform v1.5.0 and later, use an import block to import instance groups using one of the formats above. For example:

import {
  id = "projects/{{project_id}}/zones/{{zone}}/instanceGroups/{{instance_group_id}}"
  to = google_compute_instance_group.default
}

When using the terraform import command, instance groups can be imported using one of the formats above. For example:

$ terraform import google_compute_instance_group.default {{zone}}/{{instance_group_id}}
$ terraform import google_compute_instance_group.default {{project_id}}/{{zone}}/{{instance_group_id}}
$ terraform import google_compute_instance_group.default projects/{{project_id}}/zones/{{zone}}/instanceGroups/{{instance_group_id}}