This document explains how to create a managed instance group (MIG) that uses Spot VMs.
Spot VMs are virtual machine (VM) instances that you can obtain at a deeply discounted price. However, Compute Engine can stop or delete Spot VMs at any time to reclaim capacity. Use Spot VMs to run fault-tolerant workloads, such as batch processing jobs or stateless applications, at a low cost.
For other methods that you can use to create MIGs, see Basic scenarios for creating a MIG.
Before you begin
- Read about Spot VMs, especially the limitations.
- Verify that you have sufficient quota for the resources that you want to request. For more information, see Allocation quotas.
-
Before you create Spot VMs for a workload, complete the following steps:
Configure your workload to manage preemption. Specifically, we recommend that you either prepare a script to handle preemption that runs as part of your workload or is a file that you can add in VM metadata to run during shutdown. For instructions, see Manage preemption of Spot VMs.
We strongly recommend that you view data for Spot VMs to help you choose a machine type and location. By selecting a machine type and location with a higher availability of resources, you can help improve your chances of avoiding resource availability errors and of having a longer uptime before preemption.
For historical preemption and pricing data, which is especially helpful when planning long-term workloads, see View the preemption rate and pricing data for Spot VMs.
For current availability data, which is especially helpful immediately before you create Spot VMs for short-term workloads, see View the availability of Spot VMs.
-
If you haven't already, set up authentication.
Authentication verifies your identity for access to Cloud de Confiance by S3NS 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 Cloud de Confiance console to access Cloud de Confiance by S3NS services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, and then sign in to the gcloud CLI with your federated identity. After signing in, initialize the Google Cloud CLI 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, and then sign in to the gcloud CLI with your federated identity.
For more information, see Authenticate for using REST in the Cloud de Confiance authentication documentation.
-
Required roles
To get the permissions that
you need to create MIGs that use Spot VMs,
ask your administrator to grant you the
Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM role on the project.
For more information about granting roles, see Manage access to projects, folders, and organizations.
This predefined role contains the permissions required to create MIGs that use Spot VMs. To see the exact permissions that are required, expand the Required permissions section:
Required permissions
The following permissions are required to create MIGs that use Spot VMs:
-
To create an instance template:
compute.instanceTemplates.createon the project -
To create a MIG:
compute.instanceGroupManagers.createon the project
You might also be able to get these permissions with custom roles or other predefined roles.
Create a MIG that uses Spot VMs
To create a MIG that uses Spot VMs, you must complete the following steps:
Create an instance template configured for creating Spot VMs
To create an instance template configured for creating Spot VMs, select one of the following options:
Console
In the Cloud de Confiance console, go to the Instance templates page.
Click Create instance template. The Create an instance template page appears.
In the Name field, enter a name for the instance template.
In the Location section, select the type of instance template that you want to create:
For a regional instance template, select Regional, and then select the region in which to create your template. Based on the machine type that you want your Spot VMs to use, specify a supported region.
For a global instance template, select Global.
In the Machine configuration section, select a supported machine series for Spot VMs.
In the Provisioning model section, do the following:
In the VM provisioning model list, select Spot. The VM provisioning model advanced settings section expands.
In the Preemption notice duration list, select an option based on how you want to handle preemption.
If you select 120 seconds (recommended), ensure that you handle preemption within your workload before you create a Spot VM. For example, verify that your workload includes a script to save your progress that waits to run until preemption is detected.
If you select 0 seconds (default), ensure that you handle preemption using a shutdown script. Before creating a Spot VM, create a file that contains a shutdown script that saves your progress when shutdown is caused by preemption. Attach this shutdown script as explained in a later step.
To specify whether to stop or delete Spot VMs on preemption, in the On VM termination list, select one of the following options:
To stop Spot VMs, select Stop.
To delete Spot VMs, select Delete.
To add a shutdown script, complete the following steps. If you selected 0 seconds (default) for the Preemption notice duration, then this step is required to handle preemption. Otherwise, if you selected 120 seconds, then this step is optional.
- Expand the Advanced options section.
- Expand the Management section.
- In the Metadata section, click Add item.
- In the Key field, enter
shutdown-scriptfor the metadata key. - In the Value field, add the contents of a shutdown script that handles preemption.
Optional: To change the default value boot disk type or image, in the Boot disk section, click Change. Then, follow the prompts to change the boot disk.
Click Create.
gcloud
To create an instance template configured for creating
Spot VMs, use the
gcloud compute instance-templates create command.
The following command creates a regional instance template. If you want to
create a global instance template, then use the same command without the
--instance-template-region flag.
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--image-project=IMAGE_PROJECT \
--image-family=IMAGE_FAMILY \
--instance-template-region=REGION \
--instance-termination-action=TERMINATION_ACTION \
--machine-type=MACHINE_TYPE \
--provisioning-model=SPOT \
--preemption-notice-duration=PREEMPTION_NOTICE_DURATION \
--metadata shutdown-script=SHUTDOWN_SCRIPT
Replace the following:
INSTANCE_TEMPLATE_NAME: the name of the instance template to create.IMAGE_PROJECT: the image project that contains the image; for example,debian-cloud. For more information about the supported image projects, see Public images.IMAGE_FAMILY: an image family. This specifies the most recent, non-deprecated OS image. For example, if you specifydebian-12, the latest version in the Debian 12 image family is used. For more information about using image families, see Image families best practices.REGION: the region where to create the instance template. Based on the machine type that you want the Spot VMs to use, specify a supported region.TERMINATION_ACTION: whether Compute Engine stops or deletes the Spot VMs on preemption. You must specify to either stop (STOP) or delete (DELETE) VMs.MACHINE_TYPE: a supported machine type for Spot VMs. If you specify an N1 machine type, then you must include the--acceleratorflag to define the number and type of GPUs to attach to your VMs.PREEMPTION_NOTICE_DURATION: whether to enable a preemption notice duration. For gcloud CLI, the value must be either120sor0s.If you specify
120s(recommended), handle preemption within your workload. (Optionally, you can also specify a shutdown script.)If you specify
0s(default), handle preemption within a shutdown script.
SHUTDOWN_SCRIPT: a shutdown script.If you set
PREEMPTION_NOTICE_DURATIONto0s(default), then, to handle preemption, you must specify a shutdown script. For more information about how to format and specify a shutdown script, see Run shutdown scripts.Otherwise, if you don't want to specify a shutdown script, then you can remove the
--metadata shutdown-scriptflag.
REST
To create an instance template configured for creating
Spot VMs, make one of the following POST requests:
To create a regional instance template:
regionInstanceTemplates.insertmethodTo create a global instance template:
instanceTemplates.insertmethod
For example, to create a regional instance template, make a request as follows:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME",
"properties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"machineType": "MACHINE_TYPE",
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"scheduling": {
"instanceTerminationAction": "TERMINATION_ACTION",
"provisioningModel": "SPOT",
"preemptionNoticeDuration": { "seconds": PREEMPTION_NOTICE_DURATION }
},
"metadata": {
"items": [
{
"key": "shutdown-script",
"value": "SHUTDOWN_SCRIPT"
}
]
}
}
}
Replace the following:
PROJECT_ID: the ID of the project in which to create the instance template.REGION: the region where to create the instance template. Based on the machine type that you want the Spot VMs to use, specify a supported region.INSTANCE_TEMPLATE_NAME: the name of the instance template.IMAGE_PROJECT: the image project that contains the image; for example,debian-cloud. For more information about the supported image projects, see Public images.IMAGE: specify one of the following:A specific version of the OS image—for example,
debian-12-bookworm-v20240617.An image family, which must be formatted as
family/IMAGE_FAMILY. This specifies the most recent, non-deprecated OS image. For example, if you specifyfamily/debian-12, the latest version in the Debian 12 image family is used. For more information about using image families, see Image families best practices.
MACHINE_TYPE: a supported machine type for Spot VMs. If you specify an N1 machine type, then you must include theguestAcceleratorsfield to define the number and type of GPUs to attach to your VMs.TERMINATION_ACTION: whether Compute Engine stops or deletes the Spot VMs on preemption. You must specify to either stop (STOP) or delete (DELETE) VMs.PREEMPTION_NOTICE_DURATION: whether to enable a preemption notice duration. For REST, the value must be either120or0.If you specify
120(recommended), handle preemption within your workload. (Optionally, you can also specify a shutdown script.)If you specify
0(default), handle preemption within a shutdown script.
SHUTDOWN_SCRIPT: a shutdown script.If you set
PREEMPTION_NOTICE_DURATIONto0s(default), then, to handle preemption, you must specify a shutdown script. For more information about how to format and specify a shutdown script, see Run shutdown scripts.Otherwise, if you don't want to specify a shutdown script, then you can remove the
metadatafield and subfields.
TERMINATION_ACTION: Optional: specify which termination action to take when Compute Engine preempts the VM, eitherSTOP(default behavior) orDELETE.
After you create the instance template, you can view the template's details to review its properties.
Create a regional or zonal MIG
To create regional or zonal MIG, select one of the following options:
Console
In the Cloud de Confiance console, go to the Instance groups page.
Click Create instance group. The Create instance group page opens.
In the Name field, enter a name for the MIG.
In the Instance template list, select the instance template that you created in the previous section.
In the Number of instances field, enter the number of Spot VMs to create in the MIG. If your workload requires VMs with specific names, then enter
0to skip the creation of VMs at this stage. After you create the MIG, add VMs with specific names to it.In the Location section, specify whether you want to create a zonal or a regional MIG as follows:
To create a zonal MIG, select Single zone. Or, to create a regional MIG, select Multiple zones.
Select the Region and Zones for the MIG.
Click Create.
gcloud
To create a MIG, use the
gcloud compute instance-groups managed create command.
Based on the type of MIG that you want to create, include the following flags in the command:
To create a zonal MIG, include the
--zoneflag:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_URL \ --zone=ZONETo create a regional MIG, include the
--regionflag:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_URL \ --region=REGION
Replace the following:
INSTANCE_GROUP_NAME: the name of the MIG.INSTANCE_TEMPLATE_URL: the URL of the instance template that you created in the previous section. The URL can contain either the ID or the name of the instance template. Specify one of the following values:For a regional instance template:
projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_IDFor a global instance template:
INSTANCE_TEMPLATE_ID
SIZE: the number of Spot VMs to create in the MIG. If your workload requires specific VM names, then specify0to skip the creation of VMs at this stage. After you create the MIG, add VMs with specific names to it.ZONE: the zone where to create the zonal MIG. If you use a regional instance template to create the MIG, then you must specify a zone within the same region as the template.REGION: the region where to create the regional MIG. If you use a regional instance template to create the MIG, then you must specify the same region as the template's region.
REST
To create a MIG, make a POST request to one of the following methods:
To create a zonal MIG, make a
POSTrequest to theinstanceGroupManagers.insertmethod:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers { "name": "INSTANCE_GROUP_NAME", "versions": [ { "instanceTemplate": "INSTANCE_TEMPLATE_URL" } ], "targetSize": SIZE }To create a regional MIG, make a
POSTrequest to theregionInstanceGroupManagers.insertmethod:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers { "name": "INSTANCE_GROUP_NAME", "instanceTemplate": "INSTANCE_TEMPLATE_URL", "targetSize": SIZE }
Replace the following:
PROJECT_ID: the ID of the project in which to create the regional or zonal MIG.ZONE: the zone where to create the zonal MIG. If you use a regional instance template to create the MIG, then you must specify a zone within the same region as the template.REGION: the region where to create the regional MIG. If you use a regional instance template to create the MIG, then you must specify the same region as the template's region.INSTANCE_GROUP_NAME: the name of the MIG.INSTANCE_TEMPLATE_URL: the URL of the instance template that you created in the previous section. The URL can contain either the ID or the name of the instance template. Specify one of the following values:For a regional instance template:
projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_IDFor a global instance template:
INSTANCE_TEMPLATE_ID
SIZE: the number of Spot VMs to create in the MIG. If your workload requires specific VM names, then specify0to skip the creation of VMs at this stage. After you create the MIG, add VMs with specific names to it.
After you create the MIG, you can view the MIG's details to review its properties.
What's next
Learn more about the best practices for Spot VMs.
Learn more about repairing VMs for high availability in MIGs.
Learn more about autoscaling VMs in MIGs.
Learn more about stateful MIGs.