---
# ----------------------------------------------------------------------------
#
#     ***     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: "Cloud AI Notebooks"
description: |-
  A Cloud AI Platform Notebook instance.
---

# google_notebooks_instance
~> **Warning:** `google_notebook_instance` is deprecated and will be removed in a future major release. Use `google_workbench_instance` instead.

A Cloud AI Platform Notebook instance.


~> **Note:** Due to limitations of the Notebooks Instance API, many fields
in this resource do not properly detect drift. These fields will also not
appear in state once imported.


To get more information about Instance, see:

* [API documentation](https://cloud.google.com/ai-platform/notebooks/docs/reference/rest)
* How-to Guides
    * [Official Documentation](https://cloud.google.com/ai-platform-notebooks)

<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_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=notebook_instance_basic&open_in_editor=main.tf" 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 - Notebook Instance Basic


```hcl
resource "google_notebooks_instance" "instance" {
  name = "notebooks-instance"
  location = "us-west1-a"
  machine_type = "e2-medium"
  vm_image {
    project      = "deeplearning-platform-release"
    image_family = "tf-latest-cpu"
  }
}
```
<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_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=notebook_instance_basic_stopped&open_in_editor=main.tf" 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 - Notebook Instance Basic Stopped


```hcl
resource "google_notebooks_instance" "instance" {
  name = "notebooks-instance"
  location = "us-west1-a"
  machine_type = "e2-medium"
  vm_image {
    project      = "deeplearning-platform-release"
    image_family = "tf-latest-cpu"
  }
  desired_state = "STOPPED"
}
```
<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_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=notebook_instance_basic_container&open_in_editor=main.tf" 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 - Notebook Instance Basic Container


```hcl
resource "google_notebooks_instance" "instance" {
  name = "notebooks-instance"
  location = "us-west1-a"
  machine_type = "e2-medium"
  metadata = {
    proxy-mode = "service_account"
    terraform  = "true"
  }
  container_image {
    repository = "gcr.io/deeplearning-platform-release/base-cpu"
    tag = "latest"
  }
}
```
<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_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=notebook_instance_basic_gpu&open_in_editor=main.tf" 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 - Notebook Instance Basic Gpu


```hcl
resource "google_notebooks_instance" "instance" {
  name = "notebooks-instance"
  location = "us-west1-a"
  machine_type = "n1-standard-1" // can't be e2 because of accelerator

  install_gpu_driver = true
  accelerator_config {
    type         = "NVIDIA_TESLA_T4"
    core_count   = 1
  }
  vm_image {
    project      = "deeplearning-platform-release"
    image_family = "tf-latest-gpu"
  }
}
```
## Example Usage - Notebook Instance Full


```hcl
resource "google_notebooks_instance" "instance" {
  name = "notebooks-instance"
  location = "us-central1-a"
  machine_type = "e2-medium"

  vm_image {
    project      = "deeplearning-platform-release"
    image_family = "tf-latest-cpu"
  }

  instance_owners = [ "my@service-account.com"]
  service_account = "my@service-account.com"

  install_gpu_driver = true
  boot_disk_type = "PD_SSD"
  boot_disk_size_gb = 110

  no_public_ip = true
  no_proxy_access = true

  network = data.google_compute_network.my_network.id
  subnet = data.google_compute_subnetwork.my_subnetwork.id

  labels = {
    k = "val"
  }

  metadata = {
    terraform = "true"
  }
  service_account_scopes = [
    "https://www.googleapis.com/auth/bigquery",
    "https://www.googleapis.com/auth/devstorage.read_write",
    "https://www.googleapis.com/auth/cloud-platform",
    "https://www.googleapis.com/auth/userinfo.email"
  ]

  tags = ["foo", "bar"]

  disk_encryption = "CMEK"
  kms_key         = "my-crypto-key"
  desired_state = "ACTIVE"
}

data "google_compute_network" "my_network" {
  name = "default"
}

data "google_compute_subnetwork" "my_subnetwork" {
  name   = "default"
  region = "us-central1"
}
```

## Argument Reference

The following arguments are supported:


* `name` -
  (Required)
  The name specified for the Notebook instance.

* `machine_type` -
  (Required)
  A reference to a machine type which defines VM kind.

* `location` -
  (Required)
  A reference to the zone where the machine resides.


- - -


* `post_startup_script` -
  (Optional)
  Path to a Bash script that automatically runs after a
  notebook instance fully boots up. The path must be a URL
  or Cloud Storage path (gs://path-to-file/file-name).

* `instance_owners` -
  (Optional)
  The list of owners of this instance after creation.
  Format: alias@example.com.
  Currently supports one owner only.
  If not specified, all of the service account users of
  your VM instance's service account can use the instance.

* `service_account` -
  (Optional)
  The service account on this instance, giving access to other
  Google Cloud services. You can use any service account within
  the same project, but you must have the service account user
  permission to use the instance. If not specified,
  the Compute Engine default service account is used.

* `service_account_scopes` -
  (Optional)
  Optional. The URIs of service account scopes to be included in Compute Engine instances.
  If not specified, the following scopes are defined:
  - https://www.googleapis.com/auth/cloud-platform
  - https://www.googleapis.com/auth/userinfo.email

* `accelerator_config` -
  (Optional)
  The hardware accelerator used on this instance. If you use accelerators,
  make sure that your configuration has enough vCPUs and memory to support the
  machineType you have selected.
  Structure is [documented below](#nested_accelerator_config).

* `shielded_instance_config` -
  (Optional)
  A set of Shielded Instance options. Check [Images using supported Shielded VM features]
  Not all combinations are valid
  Structure is [documented below](#nested_shielded_instance_config).

* `nic_type` -
  (Optional)
  The type of vNIC driver.
  Possible values are: `UNSPECIFIED_NIC_TYPE`, `VIRTIO_NET`, `GVNIC`.

* `reservation_affinity` -
  (Optional)
  Reservation Affinity for consuming Zonal reservation.
  Structure is [documented below](#nested_reservation_affinity).

* `install_gpu_driver` -
  (Optional)
  Whether the end user authorizes Google Cloud to install GPU driver
  on this instance. If this field is empty or set to false, the GPU driver
  won't be installed. Only applicable to instances with GPUs.

* `custom_gpu_driver_path` -
  (Optional)
  Specify a custom Cloud Storage path where the GPU driver is stored.
  If not specified, we'll automatically choose from official GPU drivers.

* `boot_disk_type` -
  (Optional)
  Possible disk types for notebook instances.
  Possible values are: `DISK_TYPE_UNSPECIFIED`, `PD_STANDARD`, `PD_SSD`, `PD_BALANCED`, `PD_EXTREME`.

* `boot_disk_size_gb` -
  (Optional)
  The size of the boot disk in GB attached to this instance,
  up to a maximum of 64000 GB (64 TB). The minimum recommended value is 100 GB.
  If not specified, this defaults to 100.

* `data_disk_type` -
  (Optional)
  Possible disk types for notebook instances.
  Possible values are: `DISK_TYPE_UNSPECIFIED`, `PD_STANDARD`, `PD_SSD`, `PD_BALANCED`, `PD_EXTREME`.

* `data_disk_size_gb` -
  (Optional)
  The size of the data disk in GB attached to this instance,
  up to a maximum of 64000 GB (64 TB).
  You can choose the size of the data disk based on how big your notebooks and data are.
  If not specified, this defaults to 100.

* `no_remove_data_disk` -
  (Optional)
  If true, the data disk will not be auto deleted when deleting the instance.

* `disk_encryption` -
  (Optional)
  Disk encryption method used on the boot and data disks, defaults to GMEK.
  Possible values are: `DISK_ENCRYPTION_UNSPECIFIED`, `GMEK`, `CMEK`.

* `kms_key` -
  (Optional)
  The KMS key used to encrypt the disks, only applicable if diskEncryption is CMEK.
  Format: projects/{project_id}/locations/{location}/keyRings/{key_ring_id}/cryptoKeys/{key_id}

* `no_public_ip` -
  (Optional)
  No public IP will be assigned to this instance.

* `no_proxy_access` -
  (Optional)
  The notebook instance will not register with the proxy..

* `network` -
  (Optional)
  The name of the VPC that this instance is in.
  Format: projects/{project_id}/global/networks/{network_id}

* `subnet` -
  (Optional)
  The name of the subnet that this instance is in.
  Format: projects/{project_id}/regions/{region}/subnetworks/{subnetwork_id}

* `labels` -
  (Optional)
  Labels to apply to this instance. These can be later modified by the setLabels method.
  An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

  **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
  Please refer to the field `effective_labels` for all of the labels present on the resource.

* `tags` -
  (Optional)
  The Compute Engine tags to add to instance.

* `metadata` -
  (Optional)
  Custom metadata to apply to this instance.
  An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

* `vm_image` -
  (Optional)
  Use a Compute Engine VM image to start the notebook instance.
  Structure is [documented below](#nested_vm_image).

* `container_image` -
  (Optional)
  Use a container image to start the notebook instance.
  Structure is [documented below](#nested_container_image).

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

* `desired_state` - (Optional) Desired state of the Notebook Instance. Set this field to `ACTIVE` to start the Instance, and `STOPPED` to stop the Instance.


<a name="nested_accelerator_config"></a>The `accelerator_config` block supports:

* `type` -
  (Required)
  Type of this accelerator.
  Possible values are: `ACCELERATOR_TYPE_UNSPECIFIED`, `NVIDIA_TESLA_K80`, `NVIDIA_TESLA_P100`, `NVIDIA_TESLA_V100`, `NVIDIA_TESLA_P4`, `NVIDIA_TESLA_T4`, `NVIDIA_TESLA_T4_VWS`, `NVIDIA_TESLA_P100_VWS`, `NVIDIA_TESLA_P4_VWS`, `NVIDIA_TESLA_A100`, `TPU_V2`, `TPU_V3`.

* `core_count` -
  (Required)
  Count of cores of this accelerator.

<a name="nested_shielded_instance_config"></a>The `shielded_instance_config` block supports:

* `enable_integrity_monitoring` -
  (Optional)
  Defines whether the instance has integrity monitoring enabled. Enables monitoring and attestation of the
  boot integrity of the instance. The attestation is performed against the integrity policy baseline.
  This baseline is initially derived from the implicitly trusted boot image when the instance is created.
  Enabled by default.

* `enable_secure_boot` -
  (Optional)
  Defines whether the instance has Secure Boot enabled. Secure Boot helps ensure that the system only runs
  authentic software by verifying the digital signature of all boot components, and halting the boot process
  if signature verification fails.
  Disabled by default.

* `enable_vtpm` -
  (Optional)
  Defines whether the instance has the vTPM enabled.
  Enabled by default.

<a name="nested_reservation_affinity"></a>The `reservation_affinity` block supports:

* `consume_reservation_type` -
  (Required)
  The type of Compute Reservation.
  Possible values are: `NO_RESERVATION`, `ANY_RESERVATION`, `SPECIFIC_RESERVATION`.

* `key` -
  (Optional)
  Corresponds to the label key of reservation resource.

* `values` -
  (Optional)
  Corresponds to the label values of reservation resource.

<a name="nested_vm_image"></a>The `vm_image` block supports:

* `project` -
  (Required)
  The name of the Google Cloud project that this VM image belongs to.
  Format: projects/{project_id}

* `image_family` -
  (Optional)
  Use this VM image family to find the image; the newest image in this family will be used.

* `image_name` -
  (Optional)
  Use VM image name to find the image.

<a name="nested_container_image"></a>The `container_image` block supports:

* `repository` -
  (Required)
  The path to the container image repository.
  For example: gcr.io/{project_id}/{imageName}

* `tag` -
  (Optional)
  The tag of the container image. If not specified, this defaults to the latest tag.

## 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}}/locations/{{location}}/instances/{{name}}`

* `proxy_uri` -
  The proxy endpoint that is used to access the Jupyter notebook.
  Only returned when the resource is in a `PROVISIONED` state. If
  needed you can utilize `terraform apply -refresh-only` to await
  the population of this value.

* `state` -
  The state of this instance.

* `create_time` -
  Instance creation time

* `update_time` -
  Instance update time.

* `terraform_labels` -
  The combination of labels configured directly on the resource
   and default labels configured on the provider.

* `effective_labels` -
  All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Terraform, other clients and services.


## 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


Instance can be imported using any of these accepted formats:

* `projects/{{project}}/locations/{{location}}/instances/{{name}}`
* `{{project}}/{{location}}/{{name}}`
* `{{location}}/{{name}}`


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

```tf
import {
  id = "projects/{{project}}/locations/{{location}}/instances/{{name}}"
  to = google_notebooks_instance.default
}
```

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

```
$ terraform import google_notebooks_instance.default projects/{{project}}/locations/{{location}}/instances/{{name}}
$ terraform import google_notebooks_instance.default {{project}}/{{location}}/{{name}}
$ terraform import google_notebooks_instance.default {{location}}/{{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).
