Crea istanze Compute Engine da immagini macchina

Dopo aver creato un'immagine macchina, puoi utilizzarla per creare copie dell'istanza di computing 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 macchina non è modificabile. Tuttavia, puoi sostituire quasi tutte le proprietà dell'immagine macchina quando crei un'istanza dall'immagine macchina.

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

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso a Google Cloud servizi e API. 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. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    2. Set a default region and zone.

    REST

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

      Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare istanze Compute Engine dalle immagini macchina, chiedi all'amministratore di concederti il ruolo IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) nell'istanza o nel progetto Compute Engine. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Limitazioni

Quando crei istanze da immagini macchina, si applicano le seguenti limitazioni:

  • Puoi creare al massimo 6 istanze 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ù istanze rispetto al limite definito (6 istanze in 60 minuti), crea immagini macchina aggiuntive dall'istanza di origine o crea immagini macchina di breve durata dalle nuove istanze. Puoi quindi creare il numero richiesto di istanze dalle nuove immagini macchina.

  • Se utilizzi gcloud CLI o REST per creare un'istanza da un'immagine macchina con dischi criptati con CMEK, i dischi della nuova istanza vengono criptati utilizzando la crittografia predefinita, a meno che tu non specifichi le chiavi CMEK. Se utilizzi la console Google Cloud , la crittografia CMEK viene ereditata automaticamente.

  • Non puoi creare istanze da immagini macchina con dischi a livello di regione collegati utilizzando la Google Cloud console. Utilizza Google Cloud CLI o REST e specifica i parametri replicaZones e deviceName per ogni disco a livello di regione collegato. Per ulteriori informazioni, consulta Crea un'istanza da un'immagine macchina con override delle proprietà.

Crea un'istanza da un'immagine macchina (senza override)

Utilizza questo metodo se vuoi creare un'istanza completamente basata sull'immagine macchina senza modifiche alle proprietà.

Console

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

    Vai a Crea un'istanza

  2. Nel menu Crea VM da…, seleziona Immagini macchina.

  3. Nella finestra Crea VM da immagine macchina visualizzata, procedi nel seguente modo:

    1. Seleziona un'immagine macchina.

    2. Per creare e avviare l'istanza, fai clic su Crea.

gcloud

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

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

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza
  • ZONE: la zona dell'istanza
  • SOURCE_MACHINE_IMAGE_NAME: l'immagine della macchina da cui creare l'istanza

Esempio

Ad esempio, puoi utilizzare il seguente comando gcloud per creare un'istanza 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 la creazione dell'istanza, 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

Nota sulla crittografia CMEK: quando crei una VM da un'immagine della macchina criptata con una chiave di crittografia gestita dal cliente (CMEK), gcloud CLI utilizza per impostazione predefinita la crittografia gestita da Google per i dischi della nuova VM. Ciò è diverso dalla console Google Cloud , che eredita automaticamente la chiave CMEK dall'immagine macchina di origine.

Per garantire che i dischi della nuova VM ereditino CMEK dall'immagine macchina di origine (replicando il comportamento della console Google Cloud ), devi fornire esplicitamente la configurazione del disco utilizzando il flag --create-disk per ogni disco su cui vuoi conservare la crittografia CMEK. Il valore device-name specificato nel flag deve corrispondere esattamente al nome dispositivo del disco all'interno dell'immagine macchina di origine.

Utilizza la seguente struttura di comando per conservare la crittografia CMEK. L'esempio seguente mostra come conservare la crittografia CMEK per un disco di avvio (boot=yes) e un disco non di avvio (boot=no).

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --source-machine-image=SOURCE_MACHINE_IMAGE \
    --create-disk=auto-delete=yes,boot=yes,device-name=DEVICE_NAME_IN_IMAGE,kms-key=KMS_KEY,kms-project=KMS_PROJECT,kms-location=KMS_LOCATION,kms-keyring=KMS_KEYRING \
    --create-disk=auto-delete=yes,boot=no,device-name=DEVICE_NAME_IN_IMAGE,kms-key=KMS_KEY,kms-project=KMS_PROJECT,kms-location=KMS_LOCATION,kms-keyring=KMS_KEYRING

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome della nuova istanza VM.
  • ZONE: la zona della nuova istanza VM.
  • SOURCE_MACHINE_IMAGE: il nome dell'immagine macchina di origine.
  • DEVICE_NAME_IN_IMAGE: il nome del dispositivo del disco (di avvio o non di avvio) come definito nell'immagine della macchina di origine.
  • KMS_KEY: il nome della chiave CMEK.
  • KMS_PROJECT: il progetto in cui si trova la chiave.
  • KMS_LOCATION: la posizione della chiave.
  • KMS_KEYRING: le chiavi automatizzate per la chiave.

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": "INSTANCE_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto.
  • ZONE: la zona dell'istanza.
  • INSTANCE_NAME: un nome per l'istanza.
  • 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

Nota sulla crittografia CMEK:

Quando crei una VM da un'immagine macchina criptata con una chiave di crittografia gestita dal cliente (CMEK), una richiesta instances.insert predefinita comporta la crittografia dei dischi della nuova VM con la crittografia gestita da Google.

Per assicurarti che la nuova VM e i relativi dischi vengano creati con la stessa chiave CMEK dell'immagine macchina di origine (replicando il comportamento della consoleGoogle Cloud ), devi sostituire la proprietà disks per specificare diskEncryptionKey per ogni disco (di avvio o non di avvio) su cui vuoi conservare la crittografia CMEK.

Il seguente esempio mostra un corpo della richiesta che conserva la crittografia CMEK dell'immagine della macchina di origine. Tieni presente che, poiché disks è un campo ripetuto, devi specificare la configurazione per tutti i dischi che vengono creati dall'immagine.

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

{
  "name": "INSTANCE_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL",
  "disks": [
    {
      "boot": true,
      "autoDelete": true,
      "deviceName": "DEVICE_NAME_IN_IMAGE",
      "diskEncryptionKey": {
        "kmsKeyName": "projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING/cryptoKeys/KMS_KEY"
      }
    },
    {
      "boot": false,
      "autoDelete": true,
      "deviceName": "DEVICE_NAME_IN_IMAGE",
      "diskEncryptionKey": {
        "kmsKeyName": "projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING/cryptoKeys/KMS_KEY"
      }
    }
  ]
}

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto.
  • ZONE: la zona dell'istanza.
  • INSTANCE_NAME: il nome della nuova istanza 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
  • DEVICE_NAME_IN_IMAGE: il nome del dispositivo del disco (di avvio o non di avvio) come definito nell'immagine della macchina di origine.

  • KMS_PROJECT: il progetto in cui si trova la chiave.

  • KMS_LOCATION: la posizione della chiave.

  • KMS_KEYRING: le chiavi automatizzate per la chiave.

  • KMS_KEY: il nome della chiave CMEK.

Crea un'istanza da un'immagine macchina con override delle proprietà

Se vuoi creare un'istanza 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 presente quanto segue:

  • Non puoi sostituire le proprietà del disco collegato, ad eccezione del nome, durante la creazione di un'istanza dall'immagine macchina.
  • Devi specificare il parametro replicaZones per ogni disco a livello di regione collegato, insieme al deviceName del disco a livello di regione dall'immagine macchina.

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

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

    • Devi sostituire tutte le risorse a livello di zona e regione per la nuova istanza. Ad esempio, se crei un'istanza 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 i service account non richiedono un 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. Nel menu Crea VM da…, seleziona Immagini macchina.

  3. Nella finestra Crea VM da immagine macchina visualizzata, seleziona un modello e poi fai clic su Personalizza.

  4. (Facoltativo) Specifica altre opzioni di configurazione. Per ulteriori informazioni, consulta Opzioni di configurazione durante la creazione dell'istanza.

  5. Per creare e avviare l'istanza, fai clic su Crea.

gcloud

Utilizza il comando gcloud compute instances create per creare un'istanza da un'immagine macchina e aggiungi le proprietà di cui vuoi eseguire l'override.

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 la policy 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 sostituire le proprietà dell'immagine macchina durante la creazione dell'istanza, costruisci una richiesta POST al metodo instances.insert. Nel corpo della richiesta, includi il parametro sourceMachineImage e tutti gli override necessari. Puoi aggiungere qualsiasi proprietà che imposteresti normalmente durante la creazione dell'istanza. Ad esempio, per eseguire l'override del tipo di macchina, la chiamata API includerà il parametro machineType.

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

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto.
  • ZONE: la zona dell'istanza.
  • INSTANCE_NAME: un nome per l'istanza.
  • NEW_MACHINE_TYPE: il tipo di macchina che vuoi utilizzare per l'istanza.
  • 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 Compute Engine segue le regole di 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 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 è ripetuto, devi specificare la configurazione del disco per tutti i dischi collegati e il disco di avvio, non solo per i dischi a livello di regione.

POST https://compute.googleapis.com/compute/v1/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 un'istanza utilizzando un'immagine macchina di un altro progetto

Quando crei un'istanza utilizzando un'immagine macchina di un altro progetto, potresti non avere accesso al service account collegato al progetto di origine. Se vuoi creare un'istanza da un'immagine macchina situata in un altro progetto, devi assicurarti di avere accesso all'immagine macchina e di eseguire l'override della proprietà del service account nella nuova istanza.

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

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

  1. Concedi l'accesso all'immagine macchina archiviata in un altro progetto.

    Le autorizzazioni possono essere concesse al progetto di origine o all'immagine 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 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 l'istanza. Assicurati che l'email sia formattata in modo da includere il prefisso richiesto. Il prefisso deve essere uno dei seguenti:

      • user: specifica questo valore se l'indirizzo email è associato a un account dell'utente. Ad esempio, user:user@example.com.
      • serviceAccount: specifica questo valore se l'indirizzo email è associato a un service account. 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 del service account 123456789000-compute@developer.gserviceaccount.com, utilizza il seguente comando gcloud CLI:

    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 Service Account User (roles/iam.serviceAccountUser) nel service account associato all'immagine macchina.

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

    gcloud compute instances create INSTANCE_NAME \
        --project=INSTANCE_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:

    • INSTANCE_PROJECT_ID: l'ID progetto in cui vuoi creare l'istanza
    • INSTANCE_NAME: un nome per l'istanza
    • ZONE: la zona dell'istanza
    • MACHINE_IMAGE_PROJECT: l'ID progetto in cui si trova l'immagine macchina
    • MACHINE_IMAGE_NAME: l'immagine macchina da cui creare l'istanza
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email del service account che vuoi collegare all'istanza
    • 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 condivisa, 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 il service account da collegare alla VM appena creata. Se non fornisci questo flag, il service account 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 aver creato la 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