google_compute_route

Represents a Route resource.

A route is a rule that specifies how certain packets should be handled by the virtual network. Routes are associated with virtual machines by tag, and the set of routes for a particular virtual machine is called its routing table. For each packet leaving a virtual machine, the system searches that virtual machine's routing table for a single best matching route.

Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching routes. The packet is then forwarded as specified by the next_hop field of the winning route -- either to another virtual machine destination, a virtual machine gateway or a Compute Engine-operated gateway. Packets that do not match any route in the sending virtual machine's routing table will be dropped.

A Route resource must have exactly one specification of either nextHopGateway, nextHopInstance, nextHopIp, nextHopVpnTunnel, or nextHopIlb.

To get more information about Route, see:

Open in Cloud Shell

Example Usage - Route Basic

resource "google_compute_route" "default" {
  name        = "network-route"
  dest_range  = "15.0.0.0/24"
  network     = google_compute_network.default.name
  next_hop_ip = "10.132.1.5"
  priority    = 100
}

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

Example Usage - Route Ilb

resource "google_compute_network" "default" {
  name                    = "compute-network"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "default" {
  name          = "compute-subnet"
  ip_cidr_range = "10.0.1.0/24"
  region        = "us-central1"
  network       = google_compute_network.default.id
}

resource "google_compute_health_check" "hc" {
  name               = "proxy-health-check"
  check_interval_sec = 1
  timeout_sec        = 1

  tcp_health_check {
    port = "80"
  }
}

resource "google_compute_region_backend_service" "backend" {
  name          = "compute-backend"
  region        = "us-central1"
  health_checks = [google_compute_health_check.hc.id]
}

resource "google_compute_forwarding_rule" "default" {
  name     = "compute-forwarding-rule"
  region   = "us-central1"

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

resource "google_compute_route" "route-ilb" {
  name         = "route-ilb"
  dest_range   = "0.0.0.0/0"
  network      = google_compute_network.default.name
  next_hop_ilb = google_compute_forwarding_rule.default.id
  priority     = 2000
}
Open in Cloud Shell

Example Usage - Route Ilb Vip

resource "google_compute_network" "producer" {
  provider                = google-beta
  name                    = "producer-vpc"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "producer" {
  provider      = google-beta
  name          = "producer-subnet"
  ip_cidr_range = "10.0.1.0/24"
  region        = "us-central1"
  network       = google_compute_network.producer.id
}

resource "google_compute_network" "consumer" {
  provider                = google-beta
  name                    = "consumer-vpc"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "consumer" {
  provider      = google-beta
  name          = "consumer-subnet"
  ip_cidr_range = "10.0.2.0/24"
  region        = "us-central1"
  network       = google_compute_network.consumer.id
}

resource "google_compute_network_peering" "peering1" {
  provider     = google-beta
  name         = "peering-producer-to-consumer"
  network      = google_compute_network.consumer.id
  peer_network = google_compute_network.producer.id
}

resource "google_compute_network_peering" "peering2" {
  provider     = google-beta
  name         = "peering-consumer-to-producer"
  network      = google_compute_network.producer.id
  peer_network = google_compute_network.consumer.id
}

resource "google_compute_health_check" "hc" {
  provider           = google-beta
  name               = "proxy-health-check"
  check_interval_sec = 1
  timeout_sec        = 1

  tcp_health_check {
    port = "80"
  }
}

resource "google_compute_region_backend_service" "backend" {
  provider      = google-beta
  name          = "compute-backend"
  region        = "us-central1"
  health_checks = [google_compute_health_check.hc.id]
}

resource "google_compute_forwarding_rule" "default" {
  provider = google-beta
  name     = "compute-forwarding-rule"
  region   = "us-central1"

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

resource "google_compute_route" "route-ilb" {
  provider     = google-beta
  name         = "route-ilb"
  dest_range   = "0.0.0.0/0"
  network      = google_compute_network.consumer.name
  next_hop_ilb = google_compute_forwarding_rule.default.ip_address
  priority     = 2000
  tags         = ["tag1", "tag2"]

  depends_on = [
    google_compute_network_peering.peering1,
    google_compute_network_peering.peering2
  ]
}

Argument Reference

The following arguments are supported:


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

Route can be imported using any of these accepted formats:

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

import {
  id = "projects/{{project}}/global/routes/{{name}}"
  to = google_compute_route.default
}

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

$ terraform import google_compute_route.default projects/{{project}}/global/routes/{{name}}
$ terraform import google_compute_route.default {{project}}/{{name}}
$ terraform import google_compute_route.default {{name}}

User Project Overrides

This resource supports User Project Overrides.