Create schedules for disk snapshots


You create a snapshot schedule to regularly and automatically back up zonal and regional Persistent Disk and and Google Cloud Hyperdisk. Use snapshot schedules as a best practice to back up your Compute Engine workloads.

If you want to create a snapshot schedule that captures the state of the application data at the time of back up, also referred to as an application consistent, guest-flush, or VSS snapshot, see Create Linux application consistent disk snapshots or Create a Windows application consistent disk snapshot.

For more information about the snapshot schedule properties, see Snapshot schedule properties.

Before you begin

  • Review the Limitations for snapshot schedules.
  • If you haven't already, set up authentication. Authentication is the process by which your identity is verified for access to Google Cloud services and APIs. To run code or samples from a local development environment, you can authenticate to Compute Engine as follows.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

Required roles and permissions

To get the permissions that you need to create a snapshot schedule, ask your administrator to grant you the following IAM roles on the project:

For more information about granting roles, see Manage access.

These predefined roles contain the permissions required to create a snapshot schedule. To see the exact permissions that are required, expand the Required permissions section:

Required permissions

The following permissions are required to create a snapshot schedule:

  • To create a snapshot schedule: compute.resourcePolicies.create on the project or organization
  • To attach a snapshot schedule to a disk:
    • compute.disks.addResourcePolicies on the disk
    • compute.resourcePolicies.use on the resource policy
  • To create a disk with a snapshot schedule:
    • compute.disks.create on the project
    • compute.resourcePolicies.create on the project
    • compute.disks.addResourcePolicies on the disk

You might also be able to get these permissions with custom roles or other predefined roles.

Overview of creating snapshot schedules

When you create a snapshot schedule, you create a resource policy that you can apply to one or more Persistent Disk or Hyperdisk volumes.

You can create snapshot schedules in the following ways:

Using encryption with snapshot schedules

If a disk uses a customer-managed encryption key (CMEK), when you use a snapshot schedule to create snapshots of that disk, all the created snapshots are automatically encrypted with the same key.

You can't use snapshot schedules with disks that use a customer-supplied encryption key (CSEK).

Creating a snapshot schedule

You can create a snapshot schedule for your disks using the Google Cloud console, Google Cloud CLI, or REST. You must create your snapshot schedule in the same region where your disk resides. For example, if your disk resides in zone us-west1-a, you must create the snapshot schedule in the us-west1 region. However, you can choose to store the snapshots generated by the snapshot schedule in a different location.

Console

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances
    The remaining steps will appear automatically in the Google Cloud console.

  2. Select the project that contains your VM instances.
  3. In the Name column, click the name of the VM that has the persistent disk to create a snapshot schedule for.
  4. In Storage, click the name of the Boot disk or the Additional disk to create a snapshot schedule for.
  5. Click Edit. You might need to click the More actions menu and then Edit.
  6. In Snapshot schedule, choose Create a schedule.
  7. In Name, enter one of the following names for the snapshot schedule:
    • boot-disk-snapshot-schedule
    • attached-persistent-disk-snapshot-schedule
  8. In the Location section, choose your snapshot storage location. The predefined or customized default location defined in your snapshot settings is automatically selected. Optionally, you can override the snapshot settings and store your snapshots in a custom storage location by doing the following:

    1. Choose the type of storage location that you want for your snapshot.

      • Choose Multi-regional for higher availability at a higher cost.
      • Choose Regional snapshots for more control over the physical location of your data at a lower cost.
    2. In the Select location field, select the specific region or multi-region that you want to use. To use the region or multi-region that is closest to your source disk, select Based on disk's location.

  9. To finish creating the snapshot schedule, click Create.
  10. To attach this snapshot schedule to the persistent disk, click Save.

gcloud

To create a snapshot schedule for a disk, use the gcloud compute resource-policies create snapshot-schedule command. Set your schedule frequency to hourly, daily, or weekly.

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "SCHEDULE_DESCRIPTION" \
    --max-retention-days MAX_RETENTION_DAYS \
    --start-time START_TIME \
    --hourly-schedule SNAPSHOT_INTERVAL \
    --daily-schedule \
    --weekly-schedule SNAPSHOT_INTERVAL \
    --weekly-schedule-from-file FILE_NAME \
    --on-source-disk-delete DELETION_OPTION

Replace the following:

  • SCHEDULE_NAME: the name of the snapshot schedule.
  • SCHEDULE_DESCRIPTION: a description of the snapshot schedule. Use quotes around your description.
  • MAX_RETENTION_DAYS: the number of days to retain the snapshot.

    For example, a value of 3 means that the snapshots are retained for 3 days before being deleted. You must use a value of 1 or higher.

  • START_TIME: the start time in the UTC time zone. The time must start on the hour.

    For example:

    • 2:00 PM PST must be specified as 22:00.
    • If you set a start time of 22:13, you receive an error.

    If you use the --weekly-schedule-from-file flag and specify a start time within the file, you don't need to include this flag.

  • SNAPSHOT_INTERVAL: the interval between creating successive snapshots. The snapshot frequency flags hourly-schedule, daily-schedule, weekly-schedule, and weekly-schedule-from-file are mutually-exclusive. You can use only one for your snapshot schedule.

    • Set a daily schedule by including the --daily-schedule flag without any value.
    • Set an hourly schedule with the --hourly-schedule flag set to an integer value between 1 and 23. To generate snapshots at the same time every day, choose an hourly number that is evenly divided into 24. For example, setting --hourly-schedule to 12, means a snapshot is created every 12 hours.
    • Set a weekly schedule with the --weekly-schedule flag set to the day of the week on which you want the snapshot to be created. You must spell out the week day; the values are not case-sensitive. For example, to back up your disk every Friday, your command would include --weekly-schedule=friday.
    • Set an advanced weekly schedule, specifying different days of the week and with different start times by including the --weekly-schedule-from-file flag. Replace FILE_NAME with the filename that contains the weekly snapshot schedule. While you can specify different days of the week and different start times using a file, you can't specify multiple weekly schedules directly on the command-line. For example, your file might specify two weekly schedules, on Monday and Wednesday, but you can't duplicate this setting on the command line:

      [
        {"day": "MONDAY", "startTime": "04:00"},
        {"day": "WEDNESDAY", "startTime": "02:00"}
      ]
      

      If you include a start time in your file, you do not need to set the --start-time flag on the command line. The schedule uses the UTC time zone.

  • DELETION_OPTION: determines what happens to your snapshots if the source disk is deleted. If you want to keep all generated snapshots, you can omit this flag. Otherwise, specify apply-retention-policy to use the settings in a retention policy.

Examples

In all the following examples:

  • The disk deletion rule is included; the --on-source-disk-delete flag is set to the default of keep-auto-snapshots to permanently keep all auto-generated snapshots. The alternative is to set this flag to apply-retention-policy to use your snapshot retention policy.
  • The storage location is manually set to US, so all generated snapshots are stored in the US multi-region.
  • The labels env=dev and media=images are applied to all generated snapshots.
  • The retention policy is set to 10 days.

Hourly schedule: In this example, the snapshot schedule starts at 22:00 UTC (14:00 PST) and occurs every 4 hours.

  gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
      --description "MY HOURLY SNAPSHOT SCHEDULE" \
      --max-retention-days 10 \
      --start-time 22:00 \
      --hourly-schedule 4 \
      --region us-west1 \
      --on-source-disk-delete keep-auto-snapshots \
      --snapshot-labels env=dev,media=images \
      --storage-location US

Daily schedule: In this example, the snapshot schedule starts at 22:00 UTC (14:00 PST) and occurs every day at the same time. The --daily-schedule flag must be present, but without an associated value.

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "MY DAILY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --daily-schedule \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

Weekly schedule: In this example, the snapshot schedule starts at 22:00 UTC (14:00 PST) and occurs every week on Tuesday and Thursday.

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "MY WEEKLY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --weekly-schedule tuesday,thursday \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

REST

To create a snapshot schedule, construct a POST request to resourcePolicies.insert. You must include the snapshot schedule name and snapshot frequency.

You can also manually specify a snapshot storage location and add resource labels in your request.

By default, the onSourceDiskDelete parameter is set to keepAutoSnapshots. This means that if the source disk is deleted, the auto-generated snapshot for that disk is retained indefinitely. Alternatively, you can set the flag to applyRetentionPolicy to apply your retention policy.

The following example sets a daily snapshot schedule that starts at 12:00 UTC (04:00 PST) and repeats every day. The example also sets a retention policy of 5 days; after 5 days, snapshots are automatically removed.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

    {
     "name": "SCHEDULE_NAME",
     "description": "SCHEDULE_DESCRIPTION",
     "snapshotSchedulePolicy": {
       "schedule": {
         "dailySchedule": {
           "startTime": "12:00",
           "daysInCycle": "1"
         }
       },
       "retentionPolicy": {
         "maxRetentionDays": "5"
       },
       "snapshotProperties": {
         "guestFlush": "False",
         "labels": {
           "env": "dev",
           "media": "images"
         },
         "storageLocations": "STORAGE_LOCATION"
       }
     }
    }

Replace the following:

  • PROJECT_ID: the project name
  • REGION: the location of the snapshot schedule resource policy
  • SCHEDULE_DESCRIPTION: the description of the snapshot schedule
  • SCHEDULE_NAME: the name of the snapshot schedule
  • STORAGE_LOCATION: the storage location

Similarly, you can create a weekly or monthly schedule. Review the resourcePolicies.insert method for details specific to setting a weekly or monthly schedule.

For example, the following request creates a weekly schedule that runs on Tuesday and Thursday, at 9:00 and 2:00 UTC, respectively.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

{
   "name": "SCHEDULE_NAME",
   "description": "SCHEDULE_DESCRIPTION",
   "snapshotSchedulePolicy": {
      "schedule": {
        "weeklySchedule": {
          "dayOfWeeks": [
          {
            "day": "Monday",
            "startTime": "9:00"
          },
          {
            "day": "Thursday",
            "startTime": "2:00"
          }
          ]
        }
      },
      "retentionPolicy": {
          "maxRetentionDays": "5"
      },
      "snapshotProperties": {
          "guestFlush": "False",
          "labels": {
               "production": "webserver"
          },
          "storageLocations": "US"
      }
  }
}

Attach a snapshot schedule to a disk

After you create a schedule, attach it to an existing disk. Use the console, gcloud CLI, or the Compute Engine API.

Console

Attach a snapshot schedule to an existing disk.

  1. In the Google Cloud console, go to the Disks page.

    Go to Disks

  2. Select the name of the disk to which you want to attach a snapshot schedule. This opens the Manage disk page.

  3. On the Manage disk page, click Edit. You might need to click the More actions menu first.

  4. Use the Snapshot schedule drop-down menu to add the schedule to the disk. Or create a new schedule.

  5. If you created a new schedule, click Create.

  6. Click Save to complete the task.

gcloud

To attach a snapshot schedule to a disk, use the gcloud disks add-resource-policies command.

gcloud compute disks add-resource-policies DISK_NAME \
    --resource-policies SCHEDULE_NAME \
    --zone ZONE

Replace the following:

  • DISK_NAME: the name of the existing disk
  • SCHEDULE_NAME: the name of the snapshot schedule
  • ZONE: the location of your disk

REST

Construct a POST request to disks.addResourcePolicies to attach a snapshot schedule to an existing disk.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/addResourcePolicies

{
  "resourcePolicies": [
    "regions/REGION/resourcePolicies/SCHEDULE_NAME"
  ]
}

Replace the following:

  • PROJECT_ID: the project name
  • ZONE: the zone where the disk is located
  • REGION: the region where the snapshot schedule was created
  • DISK_NAME: the name of the disk
  • SCHEDULE_NAME: the name of the snapshot schedule that you are applying to this disk

Create a disk with a snapshot schedule

You can use the Google Cloud console or gcloud CLI to create a disk and a snapshot schedule at the same time.

Console

  1. In the Google Cloud console, go to the Disks page.

    Go to Disks

  2. Click Create Disk.

  3. Complete the required fields to create a zonal or regional disk.

  4. Create your disk in the same region as your snapshot schedule.

  5. Populate the fields for your Snapshot schedule.

  6. Use the drop-down menu and complete the fields to create the schedule.

  7. Click Create to create the schedule.

  8. Click Create to create the disk.

gcloud

Use the gcloud disks create command to create a zonal or regional Persistent Disk or Hyperdisk and attach a snapshot schedule to it.

gcloud compute disks create DISK_NAME \
     --resource-policies SCHEDULE_NAME \
     --zone ZONE

Replace the following:

  • DISK_NAME: the name of the new disk
  • SCHEDULE_NAME: the name of the snapshot schedule
  • ZONE: the location where you are creating the disk. The disk must be in a zone that is in the same region as the snapshot schedule.

What's next