---
# ----------------------------------------------------------------------------
#
#     ***     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: "Apigee"
description: |-
  An `Instance attachment` in Apigee.
---

# google\_apigee\_instance\_attachment

An `Instance attachment` in Apigee.


To get more information about InstanceAttachment, see:

* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances.attachments/create)
* How-to Guides
    * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)

## Example Usage - Apigee Instance Attachment Basic


```hcl
resource "google_project" "project" {
  project_id      = "my-project"
  name            = "my-project"
  org_id          = ""
  billing_account = ""
}

resource "google_project_service" "apigee" {
  project = google_project.project.project_id
  service = "apigee.googleapis.com"
}

resource "google_project_service" "compute" {
  project = google_project.project.project_id
  service = "compute.googleapis.com"
}

resource "google_project_service" "servicenetworking" {
  project = google_project.project.project_id
  service = "servicenetworking.googleapis.com"
}

resource "google_compute_network" "apigee_network" {
  name       = "apigee-network"
  project    = google_project.project.project_id
  depends_on = [google_project_service.compute]
}

resource "google_compute_global_address" "apigee_range" {
  name          = "apigee-range"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.apigee_network.id
  project       = google_project.project.project_id
}

resource "google_service_networking_connection" "apigee_vpc_connection" {
  network                 = google_compute_network.apigee_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.apigee_range.name]
  depends_on              = [google_project_service.servicenetworking]
}

resource "google_apigee_organization" "apigee_org" {
  analytics_region   = "us-central1"
  project_id         = google_project.project.project_id
  authorized_network = google_compute_network.apigee_network.id
  depends_on         = [
    google_service_networking_connection.apigee_vpc_connection,
    google_project_service.apigee,
  ]
}

resource "google_apigee_instance" "apigee_ins" {
  name     = "my-instance-name"
  location = "us-central1"
  org_id   = google_apigee_organization.apigee_org.id
}

resource "google_apigee_environment" "apigee_env" {
  org_id   = google_apigee_organization.apigee_org.id
  name         = "my-environment-name"
  description  = "Apigee Environment"
  display_name = "environment-1"
}

resource "google_apigee_instance_attachment" "" {
  instance_id  = google_apigee_instance.apigee_instance.id
  environment  = google_apigee_environment.apigee_env.name
}
```

## Argument Reference

The following arguments are supported:


* `environment` -
  (Required)
  The resource ID of the environment.

* `instance_id` -
  (Required)
  The Apigee instance associated with the Apigee environment,
  in the format `organizations/{{org_name}}/instances/{{instance_name}}`.


- - -



## Attributes Reference

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

* `id` - an identifier for the resource with format `{{instance_id}}/attachments/{{name}}`

* `name` -
  The name of the newly created  attachment (output parameter).


## Timeouts

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

- `create` - Default is 30 minutes.
- `delete` - Default is 30 minutes.

## Import


InstanceAttachment can be imported using any of these accepted formats:

* `{{instance_id}}/attachments/{{name}}`
* `{{instance_id}}/{{name}}`


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

```tf
import {
  id = "{{instance_id}}/attachments/{{name}}"
  to = google_apigee_instance_attachment.default
}
```

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

```
$ terraform import google_apigee_instance_attachment.default {{instance_id}}/attachments/{{name}}
$ terraform import google_apigee_instance_attachment.default {{instance_id}}/{{name}}
```
