You create a snapshot schedule to regularly and automatically back up zonal and regional Persistent Disk 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, then 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 by selecting one of the following options:
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- 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
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
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:
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) -
To connect to a VM that can run as a service account:
Service Account User (v1) (
roles/iam.serviceAccountUser
)
For more information about granting roles, see Manage access to projects, folders, and organizations.
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:
- Create a snapshot schedule and then attach it to an existing disk.
- Create a new disk with a snapshot schedule.
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).
Create 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
-
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. - Select the project that contains your VM instances.
- In the Name column, click the name of the VM that has the persistent disk to create a snapshot schedule for.
-
In
Storage , click the name of the Boot disk or the Additional disk to create a snapshot schedule for. - Click Edit. You might need to click the More actions menu and then Edit.
- In Snapshot schedule, choose Create a schedule.
-
In Name, enter one of the following names for the snapshot schedule:
boot-disk-snapshot-schedule
attached-persistent-disk-snapshot-schedule
-
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:
-
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.
-
Choose Multi-regional
for higher availability at a higher cost.
-
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.
-
- To finish creating the snapshot schedule, click Create.
- 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 or \
--weekly-schedule-from-file FILE_NAME] \
--on-source-disk-delete DELETION_OPTION \
--storage-location=STORAGE_LOCATION
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 of1
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.- 2:00 PM PST must be specified as
SNAPSHOT_INTERVAL
: the interval between creating successive snapshots. The snapshot frequency flagshourly-schedule
,daily-schedule
,weekly-schedule
, andweekly-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
to12
, 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. ReplaceFILE_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 don't need to set the
--start-time
flag on the command line. The schedule uses the UTC time zone.
- Set a daily schedule by including the
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, specifyapply-retention-policy
to use the settings in a retention policy.STORAGE_LOCATION
: Optional: the storage location. If you omit this flag, the default storage location is used.
Examples
In all the following examples:
- The disk deletion rule is included; the
--on-source-disk-delete
flag is set to the default ofkeep-auto-snapshots
to permanently keep all auto-generated snapshots. The alternative is to set this flag toapply-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
andmedia=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 hourly-schedule1 \
--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 daily-schedule2 \
--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.
gcloud compute resource-policies create snapshot-schedule weekly-schedule3 \
--description "MY WEEKLY SNAPSHOT SCHEDULE" \
--max-retention-days 10 \
--start-time 22:00 \
--weekly-schedule tuesday \
--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 nameREGION
: the location of the snapshot schedule resource policySCHEDULE_DESCRIPTION
: the description of the snapshot scheduleSCHEDULE_NAME
: the name of the snapshot scheduleSTORAGE_LOCATION
: Optional: the storage location. If you omit this flag, the default storage location is used.
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 at 9:00 UTC.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies
{
"name": "SCHEDULE_NAME",
"description": "SCHEDULE_DESCRIPTION",
"snapshotSchedulePolicy": {
"schedule": {
"weeklySchedule": {
"dayOfWeeks": [
{
"day": "Tuesday",
"startTime": "9: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.
In the Google Cloud console, go to the Disks page.
Select the name of the disk to which you want to attach a snapshot schedule. This opens the Manage disk page.
On the Manage disk page, click
Edit. You might need to click the More actions menu first.Use the Snapshot schedule drop-down menu to add the schedule to the disk. Or create a new schedule.
If you created a new schedule, click Create.
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 diskSCHEDULE_NAME
: the name of the snapshot scheduleZONE
: 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 nameZONE
: the zone where the disk is locatedREGION
: the region where the snapshot schedule was createdDISK_NAME
: the name of the diskSCHEDULE_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
In the Google Cloud console, go to the Disks page.
Click Create Disk.
Complete the required fields to create a zonal or regional disk.
Create your disk in the same region as your snapshot schedule.
Populate the fields for your Snapshot schedule.
Use the drop-down menu and complete the fields to create the schedule.
Click Create to create the schedule.
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 diskSCHEDULE_NAME
: the name of the snapshot scheduleZONE
: 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
- Learn about managing snapshot schedules.
- Learn about scheduled snapshot frequencies, retention policies, and naming rules in About snapshot schedules for disks.
- Learn how to create a custom image from your snapshot.
- Learn how to view logs.