Modifica il tipo di macchina di un'istanza Compute

Se l'istanza della tua macchina virtuale (VM) non ha un SSD locale collegato non fa parte di un gruppo di istanze gestite, puoi modificare il tipo di macchina dell'istanza interrompendolo.

Se il tipo di macchina esistente non è adatto ai carichi di lavoro su cui esegui una VM, modifica il tipo di macchina. Puoi modificare il tipo di macchina una VM per regolare il numero di vCPU e memoria in base alle variazioni del carico di lavoro. Per Ad esempio, puoi avviare una VM con una macchina più piccola durante e testare e modificare la VM in modo che utilizzi un tipo di macchina più grande quando è tutto pronto per i carichi di lavoro di produzione.

Per le VM che non hanno un SSD locale collegato e non fanno parte di un gruppo di istanze gestite, puoi modificare il tipo di macchina senza influire sulle seguenti risorse:

  • Le chiavi SSH della VM
  • Le configurazioni delle VM, ad esempio i metadati
  • I dati del disco permanente della VM, incluse le applicazioni installate e l'applicazione dati

Per cambiare il tipo di macchina delle VM all'interno di un gruppo di istanze gestite, consulta Applica automaticamente gli aggiornamenti della configurazione delle VM in un gruppo di istanze gestite.

Prima di iniziare

  • Comprendi come interrompere una VM.
  • Comprendere i tipi di macchina.
  • Se non l'hai già fatto, configura l'autenticazione. Autenticazione è Il processo di verifica dell'identità per l'accesso ai servizi e alle API di Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione Compute Engine come segue.

    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

    Per utilizzare gli Java esempi in questa pagina in una località dell'ambiente di sviluppo, installare e inizializzare gcloud CLI quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per ulteriori informazioni, vedi Set up authentication for a local development environment.

    Python

    Per utilizzare gli Python esempi in questa pagina in una località dell'ambiente di sviluppo, installare e inizializzare gcloud CLI quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per ulteriori informazioni, vedi Set up authentication for a local development environment.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

    Per ulteriori informazioni, vedi Esegui l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli obbligatori

Per ottenere l'autorizzazione necessaria per cambiare il tipo di macchina di una VM, chiedi all'amministratore di concederti seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene compute.instances.setMachineType, che è per cambiare il tipo di macchina di una VM.

Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati e altri ruoli predefiniti.

Limitazioni

Implicazioni per la fatturazione

Ogni tipo di macchina viene fatturato a una tariffa diversa, quindi assicurati di comprendere le implicazioni relative ai prezzi del cambio di di testo. Ad esempio, un tipo di macchina e2-standard-2 ha un costo superiore a tipo di macchina e2-micro.

La modifica di un tipo di macchina potrebbe influire anche sugli sconti per utilizzo sostenuto. VM. Gli sconti per utilizzo sostenuto sono calcolati separatamente per le diverse categorie nella stessa regione. Se cambi tipo di macchina in modo che il nuovo tipo di macchina appartenenti a un'altra categoria, il tempo di esecuzione successivo della VM viene conteggiato ai fini del calcolo per sconto per utilizzo sostenuto della nuova categoria.

Ad esempio, supponiamo che tu abbia una VM con tipo di macchina n2-standard-2 in funzione da metà mese. Decidi quindi di cambiare il tipo di macchina m1-ultramem-40. Una volta apportata la modifica, Compute Engine avvia contando il tempo di esecuzione della VM rispetto al tempo di esecuzione per utilizzo della categoria di vCPU e memoria ottimizzate per la memoria.

Nella fattura vedresti uno sconto per utilizzo sostenuto applicato al n2-standard-2 tipo di macchina precedente alla modifica del tipo di macchina e uno sconto per utilizzo sostenuto separato per m1-ultramem-40, se la tua VM rimane in esecuzione il giorno m1-ultramem-40 per almeno il 25% del resto del mese.

Best practice

Ecco alcune best practice per aiutarti a cambiare la macchina VM di testo.

  • Esegui backup regolari dei dati dei disco permanente utilizzando snapshot. Prendi in considerazione scattare uno snapshot dei dati del disco permanente prima di cambiare il tipo di macchina. Se vuoi per assicurarti che il nuovo tipo di macchina sia in grado di supportare i dati sul VM esistente, puoi creare uno snapshot di un disco permanente e usarlo per avviare seconda VM con il nuovo tipo di macchina per verificare che la VM si avvii correttamente.

  • Aggiungi altri dischi permanenti al file /etc/fstab. Se alla VM sono collegati altri dischi permanenti, assicurati vengono aggiunti al file /etc/fstab in modo che vengano montati automaticamente al riavvio della VM.

  • Crea una prenotazione prima di modificare il tipo di macchina. Per evitare errori relative alla disponibilità delle risorse, Prenotazioni Compute Engine per i nuovi tipi di macchina, quando sono disponibili per prenotarle all'interno di un zona di destinazione. Le prenotazioni contribuiscono ad assicurare che le risorse siano disponibili quando ne hanno bisogno.

Per creare una prenotazione:

  1. Creare una prenotazione (o identificare le prenotazioni esistenti) con proprietà come di VM pianificate. Il conteggio di VM della prenotazione deve essere uguale o maggiore del e il numero di VM che vuoi modificare. Facoltativamente, per impedire ad altre VM di per utilizzare questa prenotazione, usa l'opzione specificReservationRequired.

  2. Verifica che le VM pianificate possano utilizzare la prenotazione:

    1. Verifica che le VM abbiano l'affinità di prenotazione corretta.
    2. Immediatamente prima di modificare le VM, assicurati che la prenotazione sia sufficiente di archiviazione.

Cambiare un tipo di macchina

Puoi cambiare solo il tipo di macchina di una VM arrestata. Una VM è considerata arrestata solo quando la VM è nello stato TERMINATED. Tu non possono cambiare il tipo di macchina di una VM in esecuzione.

Se stai eseguendo l'upgrade del tipo di macchina all'ultima generazione, rivedi Valuta le opzioni di migrazione delle VM prima di procedere.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Nella colonna Nome, fai clic sul nome della VM per la quale quando vuoi cambiare tipo di macchina.

  3. Nella pagina Dettagli istanza VM, completa i seguenti passaggi:

    1. Se la VM è in esecuzione, nel menu in alto nella pagina seleziona Arresta per arrestare la VM.
    2. Per modificare la VM, fai clic su Modifica:
    3. Nella sezione Configurazione macchina, seleziona il tipo di macchina che vuoi utilizzare oppure crea un tipo di macchina personalizzata.

    4. Per salvare le modifiche, fai clic su Salva.

    5. Riavvia la VM.

gcloud

  1. Arresta la VM utilizzando Comando gcloud compute instances stop:

    gcloud compute instances stop VM_NAME
    

    Sostituisci VM_NAME con la VM contenente tipo di macchina da modificare.

  2. Cambia il tipo di macchina utilizzando Comando gcloud compute instances set-machine-type:

    gcloud compute instances set-machine-type VM_NAME \
        --machine-type NEW_MACHINE_TYPE
    

    Sostituisci NEW_MACHINE_TYPE con la nuova macchina per la VM. Il tipo di macchina può essere uno dei seguenti:

  3. Avvia la VM utilizzando Comando gcloud compute instances start:

    gcloud compute instances start VM_NAME
    

    Sostituisci VM_NAME con il nome della VM che è cambiato.

Java

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di Compute Engine con librerie client. Per ulteriori informazioni, consulta API Java Compute Engine documentazione di riferimento.

Per eseguire l'autenticazione su Compute Engine, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.Instance.Status;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.InstancesSetMachineTypeRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ChangeInstanceMachineType {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // Name of the zone your instance belongs to.
    String zone = "zone-name";
    // Name of the VM you want to modify.
    String instanceName = "instance-name";
    // The new machine type you want to use for the VM.
    // For example: "e2-standard-8", "e2-custom-4-2048" or "m1-ultramem-40"
    // More about machine types: https://cloud.google.com/compute/docs/machine-resource
    String newMachineType = "e2-standard-8";
    changeMachineType(projectId, zone, instanceName, newMachineType);
  }

  // Changes the machine type of VM.
  // The VM needs to be in the 'TERMINATED' state for this operation to be successful.
  public static void changeMachineType(String projectId, String zone, String instanceName,
      String newMachineType)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `instancesClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (InstancesClient instancesClient = InstancesClient.create()) {

      Instance instance = instancesClient.get(projectId, zone, instanceName);
      if (!instance.getStatus().equals(Status.TERMINATED.name())) {
        throw new Error(String.format(
            "Only machines in TERMINATED state can have their machine type changed. "
                + "%s is in %s state.", instance.getName(), instance.getStatus()));
      }

      InstancesSetMachineTypeRequest machineTypeRequest =
          InstancesSetMachineTypeRequest.newBuilder()
              .setMachineType(String.format("projects/%s/zones/%s/machineTypes/%s",
                  projectId, zone, newMachineType))
              .build();

      Operation response = instancesClient
          .setMachineTypeAsync(projectId, zone, instanceName, machineTypeRequest)
          .get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Machine type update failed! " + response);
        return;
      }
      System.out.println("Machine type update - operation status: " + response.getStatus());
    }
  }
}

Python

Python

Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nel Guida rapida di Compute Engine con librerie client. Per ulteriori informazioni, consulta API Python Compute Engine documentazione di riferimento.

Per eseguire l'autenticazione su Compute Engine, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def change_machine_type(
    project_id: str, zone: str, instance_name: str, new_machine_type: str
) -> None:
    """
    Changes the machine type of VM. The VM needs to be in the 'TERMINATED' state for this operation to be successful.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone your instance belongs to.
        instance_name: name of the VM you want to modify.
        new_machine_type: the new machine type you want to use for the VM.
            For example: `e2-standard-8`, `e2-custom-4-2048` or `m1-ultramem-40`
            More about machine types: https://cloud.google.com/compute/docs/machine-resource
    """
    client = compute_v1.InstancesClient()
    instance = client.get(project=project_id, zone=zone, instance=instance_name)

    if instance.status != compute_v1.Instance.Status.TERMINATED.name:
        raise RuntimeError(
            f"Only machines in TERMINATED state can have their machine type changed. "
            f"{instance.name} is in {instance.status}({instance.status_message}) state."
        )

    machine_type = compute_v1.InstancesSetMachineTypeRequest()
    machine_type.machine_type = (
        f"projects/{project_id}/zones/{zone}/machineTypes/{new_machine_type}"
    )
    operation = client.set_machine_type(
        project=project_id,
        zone=zone,
        instance=instance_name,
        instances_set_machine_type_request_resource=machine_type,
    )

    wait_for_extended_operation(operation, "changing machine type")

REST

  1. Arresta la VM utilizzando Metodo instances.stop:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    Sostituisci quanto segue:

    • PROJECT_ID: ID progetto

    • ZONE: la zona contenente VM

    • VM_NAME: la VM contenente tipo di macchina da modificare

  2. Cambia il tipo di macchina utilizzando Metodo instances.setMachineType:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMachineType
    

    Nel corpo della richiesta, fornisci il valore machineType aggiornato:

    {
        machineType: "zones/MACHINE_TYPE_ZONE/machineTypes/NEW_MACHINE_TYPE"
    }
    

    Sostituisci quanto segue:

    • MACHINE_TYPE_ZONE: la zona contenente tipo di macchina

    • NEW_MACHINE_TYPE: il nuovo tipo di macchina per VM

      Il tipo di macchina può essere uno dei seguenti:

  3. Avvia la VM utilizzando Metodo instances.start:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    Sostituisci quanto segue:

    • PROJECT_ID: ID progetto
    • ZONE: la zona contenente VM
    • VM_NAME: il nome della VM che hai modificato

Passa a un tipo di macchina più piccolo

Se passi da un tipo di macchina con più risorse a un tipo con meno risorse come il passaggio da un tipo di macchina e2-standard-8 a un e2-standard-2, potresti riscontrare problemi o prestazioni in termini di risorse hardware perché i tipi di macchina più piccoli sono meno potenti di quelli più grandi di testo. Assicurati che il nuovo tipo di macchina sia in grado di supportare qualsiasi applicazione o servizi in esecuzione sulla VM attuale o che aggiorni e applicazioni per l'esecuzione su tipi di macchina più piccoli.

Esamina i consigli relativi al dimensionamento ottimale prima di cambiare il tipo di macchina. Per informazioni sui suggerimenti sulle dimensioni di Compute Engine vedi Applicazione dei suggerimenti sul tipo di macchina per le istanze VM.

Sposta l'istanza Compute in una nuova serie di macchine

Una volta soddisfatti i requisiti, puoi modificare l'istanza Compute in modo da utilizzare un in una serie di macchine di nuova generazione modificando il tipo tipo, ad esempio da m1-ultramem-160 a m3-ultramem-128.

I tipi di macchina di nuova generazione e i tipi di macchina ARM potrebbero non supportare il le stesse funzionalità e interfacce del tipo di macchina attuale. Prima di iniziare di migrazione, esaminare i requisiti e le considerazioni Preparati al passaggio a una nuova istanza.

Per cambiare il tipo di macchina per l'istanza Compute passando a una generazione più recente. puoi utilizzare uno dei due approcci illustrati nelle sezioni seguenti.

Crea una nuova istanza di computing e sposta il carico di lavoro

In questa procedura, creerai una nuova istanza di computing, quindi sposterai il carico di lavoro in la nuova istanza.

Per maggiori dettagli su come completare questa procedura, consulta Sposta il carico di lavoro in una nuova istanza di computing.

Cambia il tipo di macchina impostandolo su un altro

In questa procedura verificherai che l'istanza Compute attuale possa essere aggiornata per utilizzare il nuovo tipo di macchina, quindi modificalo.

Se una delle seguenti condizioni è vera, devi utilizzare le istruzioni in Sposta il carico di lavoro in una nuova istanza di computing anziché modificare il tipo di macchina:

  • Vuoi cambiare il tipo di macchina per l'istanza Compute da una x86 di macchina a un tipo di macchina ARM.
  • L'istanza Compute utilizza un SSD locale.
  • Vuoi cambiare un'istanza VM in un'istanza bare metal.
  • Il sistema operativo utilizzato dall'istanza corrente non è supportato dalla un nuovo tipo di macchina.

Per cambiare il tipo di macchina del tuo smartphone, segui questi passaggi: istanza:

  1. Verifica che l'istanza Compute attuale utilizzi versione del sistema operativo, ovvero supportata dal nuovo tipo di macchina.

  2. Verifica che le tue applicazioni e i tuoi programmi possano supportare una rete diversa o come gVNIC o NVMe.

  3. Consulta le best practice per modificare il tipo di macchina di un'istanza Compute.

  4. Segui la procedura descritta in Cambiare un tipo di macchina.

Passaggi successivi