Creare istanze VM da immagini macchina


Dopo aver creato un'immagine della macchina, puoi utilizzarla per creare copie dell'istanza VM di origine. Per saperne di più sugli utilizzi delle immagini macchina, consulta quando utilizzare un'immagine macchina.

Un'immagine macchina contiene la maggior parte delle informazioni e dei dati necessari per clonare un'istanza.

Un'immagine della macchina non è modificabile. Tuttavia, puoi sostituire quasi tutte le proprietà dell'immagine della macchina quando crei un'istanza dall'immagine della macchina.

Puoi creare istanze dalle immagini macchina utilizzando la console Google Cloud, la CLI Google Cloud o REST.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    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.
    3. REST

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

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

        gcloud init

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

Limitazioni

Quando crei VM dalle immagini macchina, si applicano le seguenti limitazioni:

  • Puoi creare al massimo 6 VM da un'immagine macchina di origine in 60 minuti. Se superi questo limite, l'operazione di creazione dell'istanza non va a buon fine e restituisce un messaggio di errore simile al seguente:

    Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'.
    Too frequent operations from the source resource.
    

    Per creare più VM rispetto al limite definito (6 VM in 60 minuti), crea altre immagini macchina dalla VM di origine o immagini macchina di breve durata dalle nuove VM. Puoi quindi creare il numero richiesto di VM dalle nuove immagini macchina.

  • Non puoi creare VM da immagini macchina con dischi regionali permanenti collegati utilizzando la console Google Cloud. Utilizza Google Cloud CLI o REST e specifica i parametri replicaZones e deviceName per ogni disco regionale permanente collegato. Per ulteriori informazioni, consulta Creare una VM da un'immagine macchina con sostituzioni delle proprietà.

Crea una VM da un'immagine macchina (senza sostituzione)

Se vuoi creare una VM completamente basata sull'immagine macchina senza modifiche alle proprietà, utilizza questo metodo.

Console

  1. Nella console Google Cloud, vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Fai clic su Nuova istanza VM da immagine macchina.

  3. Seleziona l'immagine macchina e fai clic su Continua.

  4. (Facoltativo) Personalizza i dettagli della VM.

  5. Fai clic su Crea.

gcloud

Utilizza il comando gcloud compute instances create per creare un'istanza da un'immagine macchina.

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --source-machine-image=SOURCE_MACHINE_IMAGE_NAME

Sostituisci quanto segue:

  • VM_NAME: il nome della VM da creare.
  • ZONE: la zona per la VM.
  • SOURCE_MACHINE_IMAGE_NAME: l'immagine della macchina da cui creare la VM.

Esempio

Ad esempio, puoi utilizzare il seguente comando gcloud per creare una VM chiamata my-instance nella zona us-east1-b da un'immagine macchina chiamata my-machine-image.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image

Dopo la creazione della VM, l'output è simile al seguente:

Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING

REST

Nell'API, crea una richiesta POST al metodo instances.insert. Nel corpo della richiesta, includi i seguenti parametri:

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

{
  "name": "VM_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto.
  • ZONE: la zona per la VM.
  • VM_NAME: il nome della VM da creare.
  • SOURCE_MACHINE_IMAGE_URL: l'URL completo o parziale dell'immagine macchina che vuoi utilizzare per creare la VM. Ad esempio, se hai un'immagine macchina denominata my-machine-image in un progetto denominato myProject. I seguenti URL sono validi:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Creare una VM da un'immagine macchina con sostituzioni delle proprietà

Se vuoi creare una VM principalmente in base all'immagine macchina, ma con alcune modifiche, puoi utilizzare il comportamento di override. Per utilizzare il comportamento di override, devi passare gli attributi per eseguire l'override delle proprietà dell'immagine macchina esistenti al momento della creazione dell'istanza.

Quando utilizzi la funzionalità di override, tieni presenti le seguenti note:

  • Non puoi sostituire le proprietà del disco collegato, ad eccezione del nome, durante la creazione di una VM dall'immagine della macchina.
  • Devi specificare il parametro replicaZones per ogni disco regionale permanente collegato, insieme al deviceName del disco regionale dall'immagine della macchina.

  • Se la VM di origine utilizzata per generare l'immagine macchina e la nuova VM appartengono allo stesso progetto e alla stessa regione, si applica quanto segue:

    • La maggior parte delle proprietà dell'istanza di origine e della nuova VM sono uguali. Le proprietà che differiscono sono ad esempio gli indirizzi IP temporanei assegnati automaticamente.
    • Se l'istanza VM di origine esiste ancora quando crei una nuova VM, la nuova VM non può utilizzare lo stesso nome e la stessa zona dell'istanza di origine.
  • Se la VM di origine utilizzata per generare l'immagine macchina e la nuova VM appartengono allo stesso progetto, ma a regioni diverse, si applica quanto segue:

    • Devi eseguire l'override di tutte le risorse a livello di zona e di regione per la nuova VM. Ad esempio, se crei un'istanza VM da un'immagine macchina la cui istanza di origine apparteneva a una regione diversa, devi sostituire le risorse regionali come la sottorete e le regole del firewall regionale. Tuttavia, le risorse globali come i bilanciatori del carico e gli account di servizio non richiedono un superamento, a meno che tu non voglia modificarli.

Console

  1. Nella console Google Cloud, vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Fai clic su Nuova istanza VM da immagine macchina.

  3. Seleziona l'immagine macchina e fai clic su Continua.

  4. (Facoltativo) Personalizza i dettagli della VM.

  5. Fai clic su Crea.

    Per ulteriori dettagli sulla configurazione, vedi Creare un'istanza VM da un'immagine.

gcloud

Utilizza il comando gcloud compute instances create per creare un'istanza da un'immagine macchina e aggiungi le proprietà che vuoi sostituire.

Ad esempio, puoi utilizzare il seguente comando gcloud per creare una VM chiamata my-instance nella zona us-east1-b da un'immagine macchina chiamata my-machine-image. In questo esempio, le sostituzioni vengono applicate per modificare il tipo di macchina, interrompere il criterio di manutenzione dell'host e configurare un disco regionale permanente con il nome regional-disk-0.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image \
    --machine-type=e2-standard-2 \
    --maintenance-policy=TERMINATE \
    --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \
    --create-disk=device-name=regional-disk-0,\
      replica-zones=^:^us-east1-b:us-east1-c,boot=false

REST

Per sostituire le proprietà dell'immagine macchina durante la creazione della VM, utilizza l'APIinstances.insert() e fornisci i campi da sostituire nel corpo della richiesta.

Nell'API, crea una richiesta POST al metodo instances.insert. Nel corpo della richiesta, includi il parametro sourceMachineImage e tutte le sostituzioni necessarie. Puoi aggiungere qualsiasi proprietà che normalmente imposterebbe durante la creazione dell'istanza. Ad esempio, per modificare il tipo di macchina, la chiamata API includerà il parametro machineType.

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

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto.
  • ZONE: la zona per la VM.
  • VM_NAME: il nome della VM da creare.
  • NEW_MACHINE_TYPE: il tipo di macchina che vuoi utilizzare per la VM.
  • SOURCE_MACHINE_IMAGE_URL: l'URL completo o parziale dell'immagine macchina che vuoi utilizzare per creare l'istanza. Ad esempio, se hai un'immagine macchina denominata my-machine-image in un progetto denominato myProject. I seguenti URL sono validi:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Comportamento di override

Il comportamento di override nell'API segue le regole del patch di unione JSON, descritte da RFC 7396. In sintesi, si applicano le seguenti regole:

  • Se sostituisci un campo di base, il campo di base corrispondente nella macchina virtuale viene sostituito con il valore del campo di base nella richiesta. I campi di base includono parametri come machineType e name.
  • Se sostituisci un campo ripetuto, tutti i valori ripetuti per quella proprietà vengono sostituiti con i valori corrispondenti forniti nella richiesta. I campi ripetuti sono in genere proprietà di tipo list. Ad esempio,disks e networkInterfaces sono campi ripetuti.
  • Se sostituisci un nested object, l'oggetto nell'immagine macchina viene unito alla specifica dell'oggetto corrispondente nella richiesta. Tieni presente che se un oggetto nidificato si trova all'interno di un campo ripetuto, il campo viene trattato in base alle regole per i campi ripetuti. Le etichette sono un'eccezione a questa regola e vengono trattate come un campo ripetuto anche se sono di tipo object.

Ad esempio, se vuoi creare una VM da un'immagine macchina e creare dischi permanenti regionali con la VM, utilizza una sostituzione per i dischi in modo da poter specificare l'opzione replicaZones. Poiché il campo disks è un campo ripetuto, devi specificare la configurazione del disco per tutti i dischi collegati e il disco di avvio, non solo per i dischi regionali.

POST /compute/projects/my-proj/zones/us-west1-a/instances
{
  "name": "vm-from-image",
  "sourceMachineImage": "global/machineImages/my-machine-image",
  "disks": [
    {
      "kind": "compute#attachedDisks",
      "boot": true,
      "autoDelete": true,
      "deviceName": "boot-device",
      "initializeParams": {
        "sourceImage": "projects/my-proj/global/images/my-image",
        "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
      }
    },
    {
      "kind": "compute#attachedDisk",
      "boot": false,
      "autoDelete": true,
      "deviceName": "regional-device-0",
      "initializeParams": {
         "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
         "replicaZones": [
            "projects/my-proj/zones/us-west1-a",
            "projects/my-proj/zones/us-west1-c"
         ]
      }
    }
  ]
}

Creare una VM utilizzando un'immagine macchina di un altro progetto

Quando crei una VM utilizzando un'immagine della macchina di un altro progetto, potresti non avere accesso all'account di servizio associato al progetto di origine. Se vuoi creare una VM da un'immagine macchina che si trova in un progetto diverso, devi assicurarti di avere accesso all'immagine macchina e di sostituire la proprietà dell'account di servizio nella nuova VM.

Se condividi un'immagine macchina tra progetti che utilizzano una rete VPC condivisa, devi specificare esplicitamente i dettagli del VPC condiviso quando crei una VM dall'immagine macchina. Ad esempio, quando crei una VM in un progetto non host, fornisci i dettagli del VPC condiviso del progetto host utilizzando le opzioni --network, --subnet o --network-interface.

Le sezioni seguenti descrivono come creare una VM da un'immagine macchina in un progetto diverso utilizzando Google Cloud CLI.

  1. Concedi l'accesso alle immagini macchina archiviate in un altro progetto.

    Le autorizzazioni possono essere concesse al progetto di origine o all'immagine della macchina. Utilizza il comando gcloud compute machine-images add-iam-policy-binding per concedere le autorizzazioni all'immagine macchina.

    gcloud compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \
        --project=MACHINE_IMAGE_PROJECT \
        --member='ACCOUNT_EMAIL' \
        --role='roles/compute.admin'
    

    Sostituisci quanto segue:

    • MACHINE_IMAGE_PROJECT: l'ID progetto per il progetto che contiene l'immagine della macchina di origine.
    • MACHINE_IMAGE_NAME: il nome dell'immagine macchina a cui vuoi aggiungere l'associazione delle autorizzazioni.
    • ACCOUNT_EMAIL: l'indirizzo email del serviceAccount o del user che sta creando la VM. Assicurati che l'email sia formattata in modo da includere il prefisso obbligatorio, che deve essere uno dei seguenti:

      • user: specifica questo se l'indirizzo email è associato a un account utente. Ad esempio, user:user@example.com.
      • serviceAccount: specifica questo valore se l'indirizzo email è associato a un account di servizio. Ad esempio, serviceAccount:123456789000-compute@developer.gserviceaccount.com.

    Esempio

    Ad esempio, per aggiungere un'associazione compute.admin all'immagine macchina denominata my-machine-image all'indirizzo email dell'account di servizio 123456789000-compute@developer.gserviceaccount.com, utilizza il seguente comando gcloud:

    gcloud compute machine-images add-iam-policy-binding my-machine-image \
        --project=machine-image-project \
        --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \
        --role='roles/compute.admin'
    
  2. Concedi all'utente che esegue il comando gcloud compute instances create il ruolo Utente account di servizio (roles/iam.serviceAccountUser) nell'account di servizio associato all'immagine della macchina.

  3. Utilizza il comando gcloud compute instances create per creare una VM da un'immagine macchina.

    gcloud compute instances create VM_NAME \
        --project=VM_PROJECT_ID \
        --zone=ZONE \
        --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --subnet=SUBNET
    

    Sostituisci quanto segue:

    • VM_PROJECT_ID: l'ID progetto in cui vuoi creare la VM
    • VM_NAME: il nome della VM da creare
    • ZONE: la zona per la VM
    • MACHINE_IMAGE_PROJECT: l'ID progetto in cui si trova l'immagine macchina
    • MACHINE_IMAGE_NAME: l'immagine macchina da cui creare la VM
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio che vuoi collegare alla VM
    • SUBNET: se la subnet e l'istanza si trovano nello stesso progetto, sostituisci SUBNET con il nome di una subnet che si trova nella stessa regione dell'istanza

      Per specificare una subnet in una rete VPC condiviso, sostituisci SUBNET con una stringa nel seguente formato:

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      

      Sostituisci quanto segue:

      • HOST_PROJECT_ID: l'ID progetto del progetto host VPC condiviso
      • REGION: la regione della subnet
      • SUBNET_NAME: il nome della subnet

      Esempio

      Ad esempio, il seguente comando crea una VM denominata my-instance in vm-project, nella zona us-east1-b, da un'immagine macchina denominata my-machine-image.

      Il flag --service-account specifica l'account di servizio da collegare alla VM appena creata. Se non fornisci questo flag, l'account di servizio di origine non può essere condiviso tra i due progetti e l'operazione non va a buon fine.

      gcloud compute instances create my-instance \
       --project=vm-project \
       --zone=us-east1-b \
       --source-machine-image=projects/machine-image-project/global/machineImages/my-machine-image \
       --service-account=000123456789-compute@developer.gserviceaccount.com
      

      Dopo la creazione della VM, l'output è simile al seguente:

      Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
      NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
      my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING
      

Passaggi successivi