---
subcategory: "Compute Engine"
description: |-
  BGP information that must be configured into the routing stack to
  establish BGP peering.
---

# google\_compute\_router\_peer

BGP information that must be configured into the routing stack to
establish BGP peering. This information must specify the peer ASN
and either the interface name, IP address, or peer IP address.
Please refer to RFC4273.


To get more information about RouterBgpPeer, see:

* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/routers)
* How-to Guides
    * [Google Cloud Router](https://cloud.google.com/router/docs/)

## Example Usage - Router Peer Basic


```hcl
resource "google_compute_router_peer" "peer" {
  name                      = "my-router-peer"
  router                    = "my-router"
  region                    = "us-central1"
  peer_asn                  = 65513
  advertised_route_priority = 100
  interface                 = "interface-1"
}
```
## Example Usage - Router Peer Disabled


```hcl
resource "google_compute_router_peer" "peer" {
  name                      = "my-router-peer"
  router                    = "my-router"
  region                    = "us-central1"
  peer_ip_address           = "169.254.1.2"
  peer_asn                  = 65513
  advertised_route_priority = 100
  interface                 = "interface-1"
  enable                    = false
}
```
## Example Usage - Router Peer Bfd


```hcl
resource "google_compute_router_peer" "peer" {
  name                      = "my-router-peer"
  router                    = "my-router"
  region                    = "us-central1"
  peer_ip_address           = "169.254.1.2"
  peer_asn                  = 65513
  advertised_route_priority = 100
  interface                 = "interface-1"

  bfd {
    min_receive_interval        = 1000
    min_transmit_interval       = 1000
    multiplier                  = 5
    session_initialization_mode = "ACTIVE"
  }
}
```
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
  <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=router_peer_router_appliance&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank">
    <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
  </a>
</div>
## Example Usage - Router Peer Router Appliance


```hcl
resource "google_compute_network" "network" {
  name                    = "my-router-net"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "subnetwork" {
  name          = "my-router-sub"
  network       = google_compute_network.network.self_link
  ip_cidr_range = "10.0.0.0/16"
  region        = "us-central1"
}

resource "google_compute_address" "addr_intf" {
  name         = "my-router-addr-intf"
  region       = google_compute_subnetwork.subnetwork.region
  subnetwork   = google_compute_subnetwork.subnetwork.id
  address_type = "INTERNAL"
}

resource "google_compute_address" "addr_intf_redundant" {
  name         = "my-router-addr-intf-red"
  region       = google_compute_subnetwork.subnetwork.region
  subnetwork   = google_compute_subnetwork.subnetwork.id
  address_type = "INTERNAL"
}

resource "google_compute_address" "addr_peer" {
  name         = "my-router-addr-peer"
  region       = google_compute_subnetwork.subnetwork.region
  subnetwork   = google_compute_subnetwork.subnetwork.id
  address_type = "INTERNAL"
}

resource "google_compute_instance" "instance" {
  name           = "router-appliance"
  zone           = "us-central1-a"
  machine_type   = "e2-medium"
  can_ip_forward = true

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network_ip = google_compute_address.addr_peer.address
    subnetwork = google_compute_subnetwork.subnetwork.self_link
  }
}

resource "google_network_connectivity_hub" "hub" {
  name = "my-router-hub"
}

resource "google_network_connectivity_spoke" "spoke" {
  name     = "my-router-spoke"
  location = google_compute_subnetwork.subnetwork.region
  hub      = google_network_connectivity_hub.hub.id

  linked_router_appliance_instances {
    instances {
      virtual_machine = google_compute_instance.instance.self_link
      ip_address      = google_compute_address.addr_peer.address
    }
    site_to_site_data_transfer = false
  }
}

resource "google_compute_router" "router" {
  name    = "my-router-router"
  region  = google_compute_subnetwork.subnetwork.region
  network = google_compute_network.network.self_link
  bgp {
    asn = 64514
  }
}

resource "google_compute_router_interface" "interface_redundant" {
  name               = "my-router-intf-red"
  region             = google_compute_router.router.region
  router             = google_compute_router.router.name
  subnetwork         = google_compute_subnetwork.subnetwork.self_link
  private_ip_address = google_compute_address.addr_intf_redundant.address
}

resource "google_compute_router_interface" "interface" {
  name                = "my-router-intf"
  region              = google_compute_router.router.region
  router              = google_compute_router.router.name
  subnetwork          = google_compute_subnetwork.subnetwork.self_link
  private_ip_address  = google_compute_address.addr_intf.address
  redundant_interface = google_compute_router_interface.interface_redundant.name
}

resource "google_compute_router_peer" "peer" {
  name                      = "my-router-peer"
  router                    = google_compute_router.router.name
  region                    = google_compute_router.router.region
  interface                 = google_compute_router_interface.interface.name
  router_appliance_instance = google_compute_instance.instance.self_link
  peer_asn                  = 65513
  peer_ip_address           = google_compute_address.addr_peer.address
}
```

## Argument Reference

The following arguments are supported:


* `name` -
  (Required)
  Name of this BGP peer. The name must be 1-63 characters long,
  and comply with RFC1035. Specifically, the name must be 1-63 characters
  long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which
  means the first character must be a lowercase letter, and all
  following characters must be a dash, lowercase letter, or digit,
  except the last character, which cannot be a dash.

* `interface` -
  (Required)
  Name of the interface the BGP peer is associated with.

* `peer_asn` -
  (Required)
  Peer BGP Autonomous System Number (ASN).
  Each BGP interface may use a different value.

* `router` -
  (Required)
  The name of the Cloud Router in which this BgpPeer will be configured.


- - -


* `ip_address` -
  (Optional)
  IP address of the interface inside Google Cloud Platform.
  Only IPv4 is supported.

* `peer_ip_address` -
  (Optional)
  IP address of the BGP interface outside Google Cloud Platform.
  Only IPv4 is supported. Required if `ip_address` is set.

* `advertised_route_priority` -
  (Optional)
  The priority of routes advertised to this BGP peer.
  Where there is more than one matching route of maximum
  length, the routes with the lowest priority value win.

* `advertise_mode` -
  (Optional)
  User-specified flag to indicate which mode to use for advertisement.
  Valid values of this enum field are: `DEFAULT`, `CUSTOM`
  Default value is `DEFAULT`.
  Possible values are: `DEFAULT`, `CUSTOM`.

* `advertised_groups` -
  (Optional)
  User-specified list of prefix groups to advertise in custom
  mode, which currently supports the following option:
  * `ALL_SUBNETS`: Advertises all of the router's own VPC subnets.
  This excludes any routes learned for subnets that use VPC Network
  Peering.

  Note that this field can only be populated if advertiseMode is `CUSTOM`
  and overrides the list defined for the router (in the "bgp" message).
  These groups are advertised in addition to any specified prefixes.
  Leave this field blank to advertise no custom groups.

* `advertised_ip_ranges` -
  (Optional)
  User-specified list of individual IP ranges to advertise in
  custom mode. This field can only be populated if advertiseMode
  is `CUSTOM` and is advertised to all peers of the router. These IP
  ranges will be advertised in addition to any specified groups.
  Leave this field blank to advertise no custom IP ranges.
  Structure is [documented below](#nested_advertised_ip_ranges).

* `bfd` -
  (Optional)
  BFD configuration for the BGP peering.
  Structure is [documented below](#nested_bfd).

* `enable` -
  (Optional)
  The status of the BGP peer connection. If set to false, any active session
  with the peer is terminated and all associated routing information is removed.
  If set to true, the peer connection can be established with routing information.
  The default is true.

* `router_appliance_instance` -
  (Optional)
  The URI of the VM instance that is used as third-party router appliances
  such as Next Gen Firewalls, Virtual Routers, or Router Appliances.
  The VM instance must be located in zones contained in the same region as
  this Cloud Router. The VM instance is the peer side of the BGP session.

* `enable_ipv6` -
  (Optional)
  Enable IPv6 traffic over BGP Peer. If not specified, it is disabled by default.

* `ipv6_nexthop_address` -
  (Optional)
  IPv6 address of the interface inside Google Cloud Platform.
  The address must be in the range 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64.
  If you do not specify the next hop addresses, Google Cloud automatically
  assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you.

* `peer_ipv6_nexthop_address` -
  (Optional)
  IPv6 address of the BGP interface outside Google Cloud Platform.
  The address must be in the range 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64.
  If you do not specify the next hop addresses, Google Cloud automatically
  assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you.

* `region` -
  (Optional)
  Region where the router and BgpPeer reside.
  If it is not provided, the provider region is used.

* `project` - (Optional) The ID of the project in which the resource belongs.
    If it is not provided, the provider project is used.


<a name="nested_advertised_ip_ranges"></a>The `advertised_ip_ranges` block supports:

* `range` -
  (Required)
  The IP range to advertise. The value must be a
  CIDR-formatted string.

* `description` -
  (Optional)
  User-specified description for the IP range.

<a name="nested_bfd"></a>The `bfd` block supports:

* `session_initialization_mode` -
  (Required)
  The BFD session initialization mode for this BGP peer.
  If set to `ACTIVE`, the Cloud Router will initiate the BFD session
  for this BGP peer. If set to `PASSIVE`, the Cloud Router will wait
  for the peer router to initiate the BFD session for this BGP peer.
  If set to `DISABLED`, BFD is disabled for this BGP peer.
  Possible values are: `ACTIVE`, `DISABLED`, `PASSIVE`.

* `min_transmit_interval` -
  (Optional)
  The minimum interval, in milliseconds, between BFD control packets
  transmitted to the peer router. The actual value is negotiated
  between the two routers and is equal to the greater of this value
  and the corresponding receive interval of the other router. If set,
  this value must be between 1000 and 30000.

* `min_receive_interval` -
  (Optional)
  The minimum interval, in milliseconds, between BFD control packets
  received from the peer router. The actual value is negotiated
  between the two routers and is equal to the greater of this value
  and the transmit interval of the other router. If set, this value
  must be between 1000 and 30000.

* `multiplier` -
  (Optional)
  The number of consecutive BFD packets that must be missed before
  BFD declares that a peer is unavailable. If set, the value must
  be a value between 5 and 16.

## Attributes Reference

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

* `id` - an identifier for the resource with format `projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}`

* `management_type` -
  The resource that configures and manages this BGP peer.
  * `MANAGED_BY_USER` is the default value and can be managed by
  you or other users
  * `MANAGED_BY_ATTACHMENT` is a BGP peer that is configured and
  managed by Cloud Interconnect, specifically by an
  InterconnectAttachment of type PARTNER. Google automatically
  creates, updates, and deletes this type of BGP peer when the
  PARTNER InterconnectAttachment is created, updated,
  or deleted.


## Timeouts

This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:

- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.

## Import


RouterBgpPeer can be imported using any of these accepted formats:

* `projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}`
* `{{project}}/{{region}}/{{router}}/{{name}}`
* `{{region}}/{{router}}/{{name}}`
* `{{router}}/{{name}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import RouterBgpPeer using one of the formats above. For example:

```tf
import {
  id = "projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}"
  to = google_compute_router_peer.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), RouterBgpPeer can be imported using one of the formats above. For example:

```
$ terraform import google_compute_router_peer.default projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}
$ terraform import google_compute_router_peer.default {{project}}/{{region}}/{{router}}/{{name}}
$ terraform import google_compute_router_peer.default {{region}}/{{router}}/{{name}}
$ terraform import google_compute_router_peer.default {{router}}/{{name}}
```

## User Project Overrides

This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).
