If your virtual machine (VM) instance doesn't have attached Local SSD and is not part of a managed instance group (MIG), you can change the machine type of your instance after stopping it.
If your existing machine type is not a good fit for the workloads you run on your VM, change the machine type of that VM. You can change the machine type of a VM to adjust the number of vCPUs and memory as your workload changes. For example, you can start a VM with a smaller machine during setup, development, and testing and change the VM to use a larger machine type when you are ready for production workloads.
For VMs that don't have attached Local SSD and are not part of a MIG, you can change the machine type without affecting the following resources:
- The VM's SSH keys
- The VM configurations, such as VM metadata
- The VM's persistent disk data, including installed applications and application data
If you need to change the machine type of VMs within a MIG, see Automatically apply VM configuration updates in a MIG.
Before you begin
- Understand how to stop a VM.
- Understand machine types.
-
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.
Java
To use the Java samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create local authentication credentials for your user account:
gcloud auth application-default login
For more information, see Set up authentication for a local development environment.
Python
To use the Python samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create local authentication credentials for your user account:
gcloud auth application-default login
For more information, see Set up authentication for a local development environment.
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
To get the permission that you need to change the machine type of a VM, 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.
This predefined role contains the
compute.instances.setMachineType
permission, which is
required to change the machine type of a VM.
You might also be able to get this permission with custom roles or other predefined roles.
Limitations
- If your compute instance has a Local SSD, you can't change the machine type of the instance.
- If your compute instance uses an ephemeral external IP address, the IP address might change when you modify the instance's machine type. To preserve the IP address, promote it to a static external IP address.
- Changing the machine type of a compute instance isn't available for some
configurations:
- You can't change the machine type from a VM machine type to a bare metal machine type.
- If you want to use the newest generation CPUs in the machine family, see Evaluate VM migration options.
- If you want to change the machine type to an Arm machine type, see Move your workload to a new compute instance.
- You can use the steps in this document to change the machine type for G2 accelerator-optimized machine types. For other accelerator-optimized machine types, review Modify accelerator-optimized VMs.
Billing implications
Each machine type is billed at a different rate, so make sure you understand
the pricing implications of changing machine
types. For example, an e2-standard-2
machine type costs more than an
e2-micro
machine type.
Changing a machine type might also affect the sustained use discounts for that VM. Sustained use discounts are calculated separately for different categories in the same region. If you change machine types so that the new machine type is in a different category, the subsequent running time of the VM counts toward the sustained use discount of the new category.
For example, assume you have a VM with n2-standard-2
machine type
running for half a month. You then decide to change the machine type to
m1-ultramem-40
. Once you make that change, Compute Engine starts
counting the running time of the VM towards the sustained
use discount of the memory-optimized vCPU and memory category.
On your bill, you would see a sustained use discount applied to the
n2-standard-2
machine type from before you made the machine type change, and
a separate sustained use discount for m1-ultramem-40
, if your VM remains
running on m1-ultramem-40
for at least a 25% of the rest of the month.
Best practices
Here are some best practices to help you successfully change the VM machine type.
Make regular backups of your persistent disk data using snapshots. Consider taking a snapshot of your persistent disk data before you change the machine type. If you want to make sure the new machine type is able to support the data on the existing VM, you can take a persistent disk snapshot and use it to start a second VM with the new machine type to confirm that the VM starts up successfully.
Add additional persistent disks to the
/etc/fstab
file. If you have additional persistent disks attached to your VM, make sure they are added to the/etc/fstab
file so that they are automatically mounted when the VM reboots.Create a reservation before changing the machine type. To avoid errors related to resource availability, create Compute Engine reservations for the new machine types when they are available to reserve them within a zone. Reservations help ensure that the resources are available when you need them.
To create a reservation, complete the following steps:
Create a reservation (or identify existing reservations) with identical properties as the planned VMs. The reservation's VM count needs to be equal to or greater than the number of VMs that you want to change. Optionally, to prevent other VMs from consuming this reservation, use the
specificReservationRequired
option.Verify that the planned VMs will be able to consume the reservation:
- Verify that the VMs have the correct reservation affinity.
- Immediately before changing the VMs, ensure the reservation has enough capacity.
Change a machine type
You can only change the machine type of a stopped VM. A VM is considered stopped only when the VM is in theTERMINATED
state. You
can't change the machine type of a running VM.
If you are upgrading your machine type to the latest generation, review Evaluate VM migration options before proceeding.
Console
In the Google Cloud console, go to the VM instances page.
In the Name column, click the name of the VM for which you want to change machine type.
From the VM instance details page, complete the following steps:
- If the VM is running, in the menu at the top of the page, select Stop to stop the VM.
- To edit the VM, click Edit.
In the Machine configuration section, select the machine type that you want to use, or create a custom machine type.
To save your changes, click Save.
Restart the VM.
gcloud
Stop the VM by using the
gcloud compute instances stop
command:gcloud compute instances stop VM_NAME
Replace
VM_NAME
with the VM containing the machine type to change.Change the machine type by using the
gcloud compute instances set-machine-type
command:gcloud compute instances set-machine-type VM_NAME \ --machine-type NEW_MACHINE_TYPE
Replace
NEW_MACHINE_TYPE
with the new machine type for the VM. The machine type can be one of the following:-
For example:
e2-standard-2
-
For example, you can specify
--machine-type e2-custom-4-2048
to set a custom machine type that has 4 vCPUs and 2 GB of memory.
-
Start the VM by using the
gcloud compute instances start
command:gcloud compute instances start VM_NAME
Replace
VM_NAME
with the name of the VM that you changed.
Java
Java
Before trying this sample, follow the Java setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Java API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Python
Python
Before trying this sample, follow the Python setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Python API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
REST
Stop the VM by using the
instances.stop
method:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
Replace the following:
PROJECT_ID
: the project IDZONE
: the zone containing the VMVM_NAME
: the VM containing the machine type to change
Change the machine type by using the
instances.setMachineType
method:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMachineType
In the body of the request, provide the updated
machineType
:{ machineType: "zones/MACHINE_TYPE_ZONE/machineTypes/NEW_MACHINE_TYPE" }
Replace the following:
MACHINE_TYPE_ZONE
: the zone containing the machine typeNEW_MACHINE_TYPE
: the new machine type for the VMThe machine type can be one of the following:
-
For example:
e2-standard-2
-
For example, you can specify
--machine-type e2-custom-4-2048
to set a custom machine type that has 4 vCPUs and 2 GB of memory.
-
Start the VM by using the
instances.start
method:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
Replace the following:
PROJECT_ID
: the project IDZONE
: the zone containing the VMVM_NAME
: the name of the VM that you changed
Move to a smaller machine type
If you move from a machine type with more resources to a machine type with fewer
resources, such as moving from a e2-standard-8
machine type to a
e2-standard-2
, you could run into hardware resource issues or performance
limitations because smaller machine types are less powerful than larger machine
types. Make sure that your new machine type is able to support any applications
or services that are running on your current VM, or that you update your
services and applications to run on the smaller machine types.
Review the rightsizing recommendations before changing the machine type. For information about Compute Engine sizing recommendations, see Applying machine type recommendations for VM instances.
Move your compute instance to a new machine series
When the requirements are met, you can modify your compute instance to use a
machine type in a newer generation machine series by changing the machine
type—for example, from m1-ultramem-160
to m3-ultramem-128
.
Newer generation machine types and Arm machine types might not support the same features and interfaces as your current machine type. Before starting the migration process, review the requirements and considerations in Prepare to move to a new instance.
To change the machine type for your compute instance to a newer generation machine type, you can use either of the approaches in the following sections.
Create a new compute instance and move your workload
In this procedure, you create a new compute instance, then move your workload to the new instance.
For details on how to complete this procedure, see Move your workload to a new compute instance.
Change the machine type to a different machine type
In this procedure, you verify that your current compute instance can be updated to use the new machine type, and then change the machine type.
If any of the following conditions are true, you must use the instructions in Move your workload to a new compute instance instead of changing the machine type:
- You want to change the machine type for your compute instance from an x86 machine type to an Arm machine type.
- Your compute instance uses Local SSD.
- You want to change a VM instance to a bare metal instance.
- The operating system used by the current instance is not supported by the new machine type.
Use the following steps when changing the machine type of your instance:
Verify that your current compute instance uses an operating system version that is that is supported by the new machine type.
Verify your applications and programs can support a different network or storage interface, such as gVNIC or NVMe.
- To update your instance to use gVNIC, see Using Google Virtual NIC and Queue allocations and changing the machine type.
- To prepare to use the NVMe interface and drivers, see Choosing an interface.
- If your VM instance uses Microsoft Windows, you must first replace the NVME driver on VMs created before May 2022. This applies both to the boot disk in an existing VM instance and any snapshots or custom images that are used to create VM instances.
Review the best practices for changing the machine type of a compute instance.
Follow the procedure described in Change a machine type.
What's next
- Learn about machine type recommendations.
- Learn about managed instance groups.
- Learn about patterns for scalable and resilient apps.