---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Compute Engine"
description: |-
  Represents a VPN gateway running in GCP.
---

# google\_compute\_ha\_vpn\_gateway

Represents a VPN gateway running in GCP. This virtual device is managed
by Google, but used only by you. This type of VPN Gateway allows for the creation
of VPN solutions with higher availability than classic Target VPN Gateways.


To get more information about HaVpnGateway, see:

* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnGateways)
* How-to Guides
    * [Choosing a VPN](https://cloud.google.com/vpn/docs/how-to/choosing-a-vpn)
    * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview)

<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=ha_vpn_gateway_basic&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 - Ha Vpn Gateway Basic


```hcl
resource "google_compute_ha_vpn_gateway" "ha_gateway1" {
  region   = "us-central1"
  name     = "ha-vpn-1"
  network  = google_compute_network.network1.id
}

resource "google_compute_network" "network1" {
  name                    = "network1"
  auto_create_subnetworks = false
}
```
<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=ha_vpn_gateway_ipv6&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 - Ha Vpn Gateway Ipv6


```hcl
resource "google_compute_ha_vpn_gateway" "ha_gateway1" {
  region   = "us-central1"
  name     = "ha-vpn-1"
  network  = google_compute_network.network1.id
  stack_type = "IPV4_IPV6"
}

resource "google_compute_network" "network1" {
  name                    = "network1"
  auto_create_subnetworks = false
}
```
## Example Usage - Compute Ha Vpn Gateway Encrypted Interconnect


```hcl
resource "google_compute_ha_vpn_gateway" "vpn-gateway" {
  name           = "test-ha-vpngw"
  network        = google_compute_network.network.id
  vpn_interfaces {
      id                      = 0
      interconnect_attachment = google_compute_interconnect_attachment.attachment1.self_link
  }
  vpn_interfaces {
      id                      = 1
      interconnect_attachment = google_compute_interconnect_attachment.attachment2.self_link
  }
}

resource "google_compute_interconnect_attachment" "attachment1" {
  name                     = "test-interconnect-attachment1"
  edge_availability_domain = "AVAILABILITY_DOMAIN_1"
  type                     = "PARTNER"
  router                   = google_compute_router.router.id
  encryption               = "IPSEC"
  ipsec_internal_addresses = [
    google_compute_address.address1.self_link,
  ]
}

resource "google_compute_interconnect_attachment" "attachment2" {
  name                     = "test-interconnect-attachment2"
  edge_availability_domain = "AVAILABILITY_DOMAIN_2"
  type                     = "PARTNER"
  router                   = google_compute_router.router.id
  encryption               = "IPSEC"
  ipsec_internal_addresses = [
    google_compute_address.address2.self_link,
  ]
}

resource "google_compute_address" "address1" {
  name          = "test-address1"
  address_type  = "INTERNAL"
  purpose       = "IPSEC_INTERCONNECT"
  address       = "192.168.1.0"
  prefix_length = 29
  network       = google_compute_network.network.self_link
}

resource "google_compute_address" "address2" {
  name          = "test-address2"
  address_type  = "INTERNAL"
  purpose       = "IPSEC_INTERCONNECT"
  address       = "192.168.2.0"
  prefix_length = 29
  network       = google_compute_network.network.self_link
}

resource "google_compute_router" "router" {
  name                          = "test-router"
  network                       = google_compute_network.network.name
  encrypted_interconnect_router = true
  bgp {
    asn = 16550
  }
}

resource "google_compute_network" "network" {
  name                    = "test-network"
  auto_create_subnetworks = false
}
```

## Argument Reference

The following arguments are supported:


* `name` -
  (Required)
  Name of the resource. Provided by the client when the resource is
  created. 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.

* `network` -
  (Required)
  The network this VPN gateway is accepting traffic for.


- - -


* `description` -
  (Optional)
  An optional description of this resource.

* `stack_type` -
  (Optional)
  The stack type for this VPN gateway to identify the IP protocols that are enabled.
  If not specified, IPV4_ONLY will be used.
  Default value is `IPV4_ONLY`.
  Possible values are: `IPV4_ONLY`, `IPV4_IPV6`.

* `vpn_interfaces` -
  (Optional)
  A list of interfaces on this VPN gateway.
  Structure is [documented below](#nested_vpn_interfaces).

* `region` -
  (Optional)
  The region this gateway should sit in.

* `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_vpn_interfaces"></a>The `vpn_interfaces` block supports:

* `id` -
  (Optional)
  The numeric ID of this VPN gateway interface.

* `ip_address` -
  (Output)
  The external IP address for this VPN gateway interface.

* `interconnect_attachment` -
  (Optional)
  URL of the interconnect attachment resource. When the value
  of this field is present, the VPN Gateway will be used for
  IPsec-encrypted Cloud Interconnect; all Egress or Ingress
  traffic for this VPN Gateway interface will go through the
  specified interconnect attachment resource.
  Not currently available publicly.

## 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}}/vpnGateways/{{name}}`
* `self_link` - The URI of the created resource.


## 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.
- `delete` - Default is 20 minutes.

## Import


HaVpnGateway can be imported using any of these accepted formats:

* `projects/{{project}}/regions/{{region}}/vpnGateways/{{name}}`
* `{{project}}/{{region}}/{{name}}`
* `{{region}}/{{name}}`
* `{{name}}`


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

```tf
import {
  id = "projects/{{project}}/regions/{{region}}/vpnGateways/{{name}}"
  to = google_compute_ha_vpn_gateway.default
}
```

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

```
$ terraform import google_compute_ha_vpn_gateway.default projects/{{project}}/regions/{{region}}/vpnGateways/{{name}}
$ terraform import google_compute_ha_vpn_gateway.default {{project}}/{{region}}/{{name}}
$ terraform import google_compute_ha_vpn_gateway.default {{region}}/{{name}}
$ terraform import google_compute_ha_vpn_gateway.default {{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).
