google_compute_region_network_endpoint_group

A regional NEG that can support Serverless Products and proxying traffic to external backends.

Recreating a region network endpoint group that's in use by another resource will give a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy to avoid this type of error.

To get more information about RegionNetworkEndpointGroup, see:

Open in Cloud Shell

Example Usage - Region Network Endpoint Group Functions

// Cloud Functions Example
resource "google_compute_region_network_endpoint_group" "function_neg" {
  name                  = "function-neg"
  network_endpoint_type = "SERVERLESS"
  region                = "us-central1"
  cloud_function {
    function = google_cloudfunctions_function.function_neg.name
  }
}

resource "google_cloudfunctions_function" "function_neg" {
  name        = "function-neg"
  description = "My function"
  runtime     = "nodejs10"

  available_memory_mb   = 128
  source_archive_bucket = google_storage_bucket.bucket.name
  source_archive_object = google_storage_bucket_object.archive.name
  trigger_http          = true
  timeout               = 60
  entry_point           = "helloGET"
}

resource "google_storage_bucket" "bucket" {
  name     = "cloudfunctions-function-example-bucket"
  location = "US"
}

resource "google_storage_bucket_object" "archive" { 
  name   = "index.zip"
  bucket = google_storage_bucket.bucket.name
  source = "path/to/index.zip"
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Cloudrun

// Cloud Run Example
resource "google_compute_region_network_endpoint_group" "cloudrun_neg" {
  name                  = "cloudrun-neg"
  network_endpoint_type = "SERVERLESS"
  region                = "us-central1"
  cloud_run {
    service = google_cloud_run_service.cloudrun_neg.name
  }
}

resource "google_cloud_run_service" "cloudrun_neg" {
  name     = "cloudrun-neg"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Appengine

// App Engine Example
resource "google_compute_region_network_endpoint_group" "appengine_neg" {
  name                  = "appengine-neg"
  network_endpoint_type = "SERVERLESS"
  region                = "us-central1"
  app_engine {
    service = google_app_engine_flexible_app_version.appengine_neg.service
    version = google_app_engine_flexible_app_version.appengine_neg.version_id
  }
}

resource "google_app_engine_flexible_app_version" "appengine_neg" {
  version_id = "v1"
  service    = "appengine-network-endpoint-group"
  runtime    = "nodejs"

  entrypoint {
    shell = "node ./app.js"
  }

  deployment {
    zip {
      source_url = "https://storage.googleapis.com/${google_storage_bucket.appengine_neg.name}/${google_storage_bucket_object.appengine_neg.name}"
    }
  }

  liveness_check {
    path = "/"
  }

  readiness_check {
    path = "/"
  }

  env_variables = {
    port = "8080"
  }

  handlers {
    url_regex        = ".*\\/my-path\\/*"
    security_level   = "SECURE_ALWAYS"
    login            = "LOGIN_REQUIRED"
    auth_fail_action = "AUTH_FAIL_ACTION_REDIRECT"

    static_files {
      path = "my-other-path"
      upload_path_regex = ".*\\/my-path\\/*"
    }
  }

  automatic_scaling {
    cool_down_period = "120s"
    cpu_utilization {
      target_utilization = 0.5
    }
  }

  delete_service_on_destroy = true
}

resource "google_storage_bucket" "appengine_neg" {
  name     = "appengine-neg"
  location = "US"
}

resource "google_storage_bucket_object" "appengine_neg" {
  name   = "hello-world.zip"
  bucket = google_storage_bucket.appengine_neg.name
  source = "./test-fixtures/hello-world.zip"
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Appengine Empty

// App Engine Example
resource "google_compute_region_network_endpoint_group" "appengine_neg" {
  name                  = "appengine-neg"
  network_endpoint_type = "SERVERLESS"
  region                = "us-central1"
  app_engine {
  }
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Psc

resource "google_compute_region_network_endpoint_group" "psc_neg" {
  name                  = "psc-neg"
  region                = "asia-northeast3"

  network_endpoint_type = "PRIVATE_SERVICE_CONNECT"
  psc_target_service    = "asia-northeast3-cloudkms.googleapis.com"
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Psc Service Attachment

resource "google_compute_network" "default" {
  name = "psc-network"
}

resource "google_compute_subnetwork" "default" {
  name          = "psc-subnetwork"
  ip_cidr_range = "10.0.0.0/16"
  region        = "europe-west4"
  network       = google_compute_network.default.id
}

resource "google_compute_subnetwork" "psc_subnetwork" {
  name          = "psc-subnetwork-nat"
  ip_cidr_range = "10.1.0.0/16"
  region        = "europe-west4"
  purpose       = "PRIVATE_SERVICE_CONNECT"
  network       = google_compute_network.default.id
}

resource "google_compute_health_check" "default" {
  name = "psc-healthcheck"

  check_interval_sec = 1
  timeout_sec        = 1
  tcp_health_check {
    port = "80"
  }
}
resource "google_compute_region_backend_service" "default" {
  name   = "psc-backend"
  region = "europe-west4"

  health_checks = [google_compute_health_check.default.id]
}

resource "google_compute_forwarding_rule" "default" {
  name   = "psc-forwarding-rule"
  region = "europe-west4"

  load_balancing_scheme = "INTERNAL"
  backend_service       = google_compute_region_backend_service.default.id
  all_ports             = true
  network               = google_compute_network.default.name
  subnetwork            = google_compute_subnetwork.default.name
}

resource "google_compute_service_attachment" "default" {
  name        = "psc-service-attachment"
  region      = "europe-west4"
  description = "A service attachment configured with Terraform"

  enable_proxy_protocol = false
  connection_preference = "ACCEPT_AUTOMATIC"
  nat_subnets           = [google_compute_subnetwork.psc_subnetwork.self_link]
  target_service        = google_compute_forwarding_rule.default.self_link
}

resource "google_compute_region_network_endpoint_group" "psc_neg_service_attachment" {
  name                  = "psc-neg"
  region                = "europe-west4"

  network_endpoint_type = "PRIVATE_SERVICE_CONNECT"
  psc_target_service    = google_compute_service_attachment.default.self_link

  network               = google_compute_network.default.self_link
  subnetwork            = google_compute_subnetwork.default.self_link
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Internet Ip Port

resource "google_compute_region_network_endpoint_group" "region_network_endpoint_group_internet_ip_port" {
  name                  = "ip-port-neg"
  region                = "us-central1"
  network               = google_compute_network.default.id

  network_endpoint_type = "INTERNET_IP_PORT"
}

resource "google_compute_network" "default" {
  name                    = "network"
}
Open in Cloud Shell

Example Usage - Region Network Endpoint Group Internet Fqdn Port

resource "google_compute_region_network_endpoint_group" "region_network_endpoint_group_internet_fqdn_port" {
  name                  = "ip-port-neg"
  region                = "us-central1"
  network               = google_compute_network.default.id

  network_endpoint_type = "INTERNET_FQDN_PORT"
}

resource "google_compute_network" "default" {
  name                    = "network"
}

Argument Reference

The following arguments are supported:


The cloud_run block supports:

The app_engine block supports:

The cloud_function block supports:

The serverless_deployment 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:

Import

RegionNetworkEndpointGroup can be imported using any of these accepted formats:

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

import {
  id = "projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}"
  to = google_compute_region_network_endpoint_group.default
}

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

$ terraform import google_compute_region_network_endpoint_group.default projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}
$ terraform import google_compute_region_network_endpoint_group.default {{project}}/{{region}}/{{name}}
$ terraform import google_compute_region_network_endpoint_group.default {{region}}/{{name}}
$ terraform import google_compute_region_network_endpoint_group.default {{name}}

User Project Overrides

This resource supports User Project Overrides.