---
# ----------------------------------------------------------------------------
#
#     ***     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: "Google Cloud NetApp Volumes"
description: |-
  NetApp Volumes helps you manage your data usage with snapshots that can quickly restore lost data.
---

# google_netapp_volume_snapshot

NetApp Volumes helps you manage your data usage with snapshots that can quickly restore lost data.
Snapshots are point-in-time versions of your volume's content. They are resources of volumes and are
instant captures of your data that consume space only for modified data. Because data changes over
time, snapshots usually consume more space as they get older.
NetApp Volumes volumes use just-in-time copy-on-write so that unmodified files in snapshots don't
consume any of the volume's capacity.


To get more information about VolumeSnapshot, see:

* [API documentation](https://cloud.google.com/netapp/volumes/docs/reference/rest/v1/projects.locations.volumes.snapshots)
* How-to Guides
    * [Documentation](https://cloud.google.com/netapp/volumes/docs/configure-and-use/volume-snapshots/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_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=volume_snapshot_create&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 - Volume Snapshot Create


```hcl
resource "google_netapp_storage_pool" "default" {
  name = "test-pool"
  location = "us-west2"
  service_level = "PREMIUM"
  capacity_gib = 2048
  network = data.google_compute_network.default.id
}

resource "google_netapp_volume" "default" {
  location = google_netapp_storage_pool.default.location
  name = "test-volume"
  capacity_gib = 100
  share_name = "test-volume"
  storage_pool = google_netapp_storage_pool.default.name
  protocols = ["NFSV3"]
}

resource "google_netapp_volume_snapshot" "test_snapshot" {
  depends_on = [google_netapp_volume.default]
  location = google_netapp_volume.default.location
  volume_name = google_netapp_volume.default.name
  name = "testvolumesnap"
}

data "google_compute_network" "default" {
  name = "test-network"
}
```

## Argument Reference

The following arguments are supported:


* `location` -
  (Required)
  Name of the snapshot location. Snapshots are child resources of volumes and live in the same location.

* `volume_name` -
  (Required)
  The name of the volume to create the snapshot in.

* `name` -
  (Required)
  The name of the snapshot.


- - -


* `description` -
  (Optional)
  Description for the snapshot.

* `labels` -
  (Optional)
  Labels as key value pairs. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`.

  **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.

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


## 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}}/volumes/{{volume_name}}/snapshots/{{name}}`

* `used_bytes` -
  Storage used to store blocks unique to this snapshot.

* `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


VolumeSnapshot can be imported using any of these accepted formats:

* `projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/snapshots/{{name}}`
* `{{project}}/{{location}}/{{volume_name}}/{{name}}`
* `{{location}}/{{volume_name}}/{{name}}`


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

```tf
import {
  id = "projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/snapshots/{{name}}"
  to = google_netapp_volume_snapshot.default
}
```

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

```
$ terraform import google_netapp_volume_snapshot.default projects/{{project}}/locations/{{location}}/volumes/{{volume_name}}/snapshots/{{name}}
$ terraform import google_netapp_volume_snapshot.default {{project}}/{{location}}/{{volume_name}}/{{name}}
$ terraform import google_netapp_volume_snapshot.default {{location}}/{{volume_name}}/{{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).
