crea istanze VM dalle immagini macchina

Dopo aver creato un'immagine macchina, puoi utilizzarla per creare copie dell'istanza VM di origine. Per ulteriori informazioni 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.

L'immagine di una macchina non è modificabile. Tuttavia, puoi eseguire l'override di quasi tutte le proprietà dell'immagine macchina quando crei un'istanza dall'immagine macchina.

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

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Imposta una regione e una zona predefinite.

    REST

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

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

Limitazioni

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

  • Puoi creare al massimo 6 VM da un'immagine della macchina di origine in 60 minuti. Se superi questo limite, l'operazione di creazione dell'istanza non va a buon fine e restituisce un 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 immagini macchina aggiuntive dalla VM di origine o crea 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 permanenti a livello di regione collegati utilizzando la console Google Cloud. Utilizza Google Cloud CLI o REST e specifica i parametri replicaZones e deviceName per ogni disco permanente regionale collegato. Per maggiori informazioni, consulta Creare una VM da un'immagine macchina con override delle proprietà.

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

Se vuoi creare una VM completamente basata sull'immagine della 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 della tua 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 macchina da cui creare la VM.

Esempio

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

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

Dopo aver creato la VM, l'output sarà 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 per il 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 della macchina che vuoi utilizzare per creare la VM. Ad esempio, se hai un'immagine macchina chiamata my-machine-image in un progetto chiamato 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

Crea una VM da un'immagine macchina con override delle proprietà

Se vuoi creare una VM principalmente basata sull'immagine della macchina, ma con alcune modifiche, puoi utilizzare il comportamento di override. Per utilizzare il comportamento di override, devi passare gli attributi per sostituire le proprietà esistenti delle immagini macchina durante la creazione dell'istanza.

Quando utilizzi la funzionalità di override, prendi in considerazione le seguenti note:

  • Non puoi eseguire l'override di alcuna proprietà del disco collegato diversa dal nome del disco durante la creazione di una VM dall'immagine della macchina.
  • Devi specificare il parametro replicaZones per ogni disco permanente a livello di regione collegato insieme al valore deviceName del disco di regione 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 corrispondono. Le proprietà diverse sono quelle come 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 ad regioni diverse, si applica quanto segue:

    • Devi eseguire l'override di tutte le risorse 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 eseguire l'override delle risorse di regione come la subnet e le regole firewall a livello di regione. Tuttavia, le risorse globali come i bilanciatori del carico e gli account di servizio non richiedono l'override, 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 della tua macchina e fai clic su Continua.

  4. (Facoltativo) Personalizza i dettagli della VM.

  5. Fai clic su Crea.

    Per ulteriori dettagli sulla configurazione, consulta 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 denominata my-instance nella zona us-east1-b da un'immagine macchina denominata my-machine-image. In questo esempio vengono applicati override per cambiare il tipo di macchina, arrestare il criterio di manutenzione dell'host e configurare un disco permanente a livello di regione 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 eseguire l'override delle proprietà delle immagini macchina durante la creazione della VM, utilizza l'API instances.insert() e fornisci i campi che vuoi sostituire nel corpo della richiesta.

Nell'API, crea una richiesta POST per il metodo instances.insert. Nel corpo della richiesta, includi il parametro sourceMachineImage e gli override di cui hai bisogno. Puoi aggiungere qualsiasi proprietà che imposteresti normalmente 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 della macchina che vuoi utilizzare per creare l'istanza. Ad esempio, se hai un'immagine macchina chiamata my-machine-image in un progetto chiamato 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 patch di unione JSON, descritte dal documento RFC 7396. Per riassumere, si applicano le seguenti regole:

  • Se esegui l'override di un campo di base, il campo di base corrispondente nell'immagine della macchina viene sostituito con il valore del campo di base nella richiesta. I campi di base includono parametri come machineType e name.
  • Se esegui l'override di un campo ripetuto, tutti i valori ripetuti per la proprietà in questione vengono sostituiti con i valori corrispondenti forniti nella richiesta. I campi ripetuti sono generalmente proprietà di tipo list. Ad esempio, disks e networkInterfaces sono campi ripetuti.
  • Se esegui l'override di nested object, l'oggetto nell'immagine della 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, questo 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 le etichette sono di tipo object.

Ad esempio, se vuoi creare una VM da un'immagine macchina e creare dischi permanenti a livello di regione con la VM, utilizza un override 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 per 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"
         ]
      }
    }
  ]
}

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

Quando crei una VM utilizzando un'immagine 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 altro progetto, devi assicurarti di avere accesso all'immagine della macchina e di sostituire la proprietà dell'account di servizio sulla nuova VM.

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

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

    Le autorizzazioni possono essere concesse sul progetto di origine o sull'immagine della macchina. Utilizza il comando gcloud compute machine-images add-iam-policy-binding per concedere le autorizzazioni per l'immagine della 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 del progetto che contiene l'immagine della macchina di origine.
    • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina a cui vuoi aggiungere l'associazione di autorizzazioni.
    • ACCOUNT_EMAIL: l'indirizzo email di serviceAccount o user che crea la VM. Assicurati che l'email sia formattata in modo da includere il prefisso richiesto, che deve essere uno dei seguenti:

      • user: consente di specificare questa opzione se l'indirizzo email è associato a un account utente. Ad esempio, user:user@example.com.
      • serviceAccount: lo specifica 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 della macchina denominata my-machine-image all'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) per l'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
    

    Sostituisci quanto segue:

    • VM_PROJECT_ID: l'ID del 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 del progetto in cui si trova l'immagine macchina.
    • MACHINE_IMAGE_NAME: l'immagine da cui creare la VM.
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio che vuoi collegare alla VM.

      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 che vuoi collegare alla VM appena creata. Se non fornisci questo flag, l'account di servizio di origine non può essere condiviso tra entrambi i 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 aver creato la VM, l'output sarà 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
      

Che cosa succede dopo?