Creare VM collettivamente


Quando vuoi creare un numero elevato di istanze di macchine virtuali (VM) che sono identiche e indipendenti l'una dall'altra, crea le VM collettivamente utilizzando Google Cloud CLI o l'API Compute Engine. Puoi creare queste VM in tutte le zone di una regione o distribuirle in determinate zone.

Per ulteriori dettagli e limitazioni associate, consulta Informazioni sulla creazione collettiva di VM.

Prima di iniziare

  • Per le VM e le eventuali risorse correlate che prevedi di creare, assicurati di disporre di una quota sufficiente e delle autorizzazioni richieste.
  • 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:

    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.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare più VM contemporaneamente, chiedi all'amministratore di concederti il ruolo IAM Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare più VM contemporaneamente. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per creare più VM contemporaneamente, sono necessarie le seguenti autorizzazioni:

  • compute.instances.create sul progetto
  • Per utilizzare un'immagine personalizzata per creare la VM: compute.images.useReadOnly sull'immagine
  • Per utilizzare uno snapshot per creare la VM: compute.snapshots.useReadOnly sullo snapshot
  • Per utilizzare un modello di istanza per creare la VM: compute.instanceTemplates.useReadOnly nel modello di istanza
  • Per assegnare una rete legacy alla VM: compute.networks.use nel progetto
  • Per specificare un indirizzo IP statico per la VM: compute.addresses.use nel progetto
  • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete legacy: compute.networks.useExternalIp nel progetto
  • Per specificare una subnet per la VM: compute.subnetworks.use nel progetto o nella subnet scelta
  • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete VPC: compute.subnetworks.useExternalIp nel progetto o nella subnet scelta
  • Per impostare i metadati dell'istanza VM per la VM: compute.instances.setMetadata nel progetto
  • Per impostare i tag per la VM: compute.instances.setTags sulla VM
  • Per impostare le etichette per la VM: compute.instances.setLabels sulla VM
  • Per impostare un account di servizio da utilizzare per la VM: compute.instances.setServiceAccount sulla VM
  • Per creare un nuovo disco per la VM: compute.disks.create nel progetto
  • Per collegare un disco esistente in modalità di sola lettura o di lettura e scrittura: compute.disks.use sul disco
  • Per collegare un disco esistente in modalità di sola lettura: compute.disks.useReadOnly sul disco

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Creare più VM contemporaneamente in una regione

Per creare più VM contemporaneamente in una regione, utilizza l'interfaccia a riga di comando gcloud o l'API Compute Engine.

Se specifichi un tipo di macchina o il supporto di hardware aggiuntivo come una GPU o un SSD locale, Compute Engine posiziona le VM in una zona all'interno della regione che supporta il tipo di macchina e l'hardware aggiuntivo.

gcloud

Per creare più VM contemporaneamente in una regione, utilizza il seguente comando gcloud compute instances bulk create:

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --region=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT \ ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]

Sostituisci quanto segue:

  • NAME_PATTERN: il pattern del nome delle VM. Utilizza una sequenza di caratteri hash (#) per Compute Engine da sostituire con una sequenza di numeri. Ad esempio, l'utilizzo di vm-# per il pattern di nomi genera VM con nomi come vm-1 e vm-2, fino al numero di VM specificato da --count, che deve essere inferiore o uguale al numero di VM consentito dal pattern di nomi.

    Quando utilizzi un pattern di nomi, Compute Engine tenta di evitare conflitti di nomi controllando i nomi delle VM esistenti create da richieste precedenti.

  • PREDEFINED_NAMES: un elenco di nomi predefiniti per le VM da creare. Se utilizzi questo flag e specifichi COUNT, COUNT deve essere uguale al numero di nomi forniti.

  • REGION: la regione in cui creare le VM.

  • COUNT: il numero di VM da creare. Deve essere inferiore o uguale al numero di VM consentito da NAME_PATTERN. In alternativa, se utilizzi --predefined-names, non devi specificare COUNT, ma se lo fai, questo deve essere uguale al numero di nomi forniti.

  • MIN_COUNT: il numero minimo di VM da creare. La seguente tabella descrive il comportamento della richiesta in base al modo in cui lo imposti:

    Valore Descrizione
    Non impostato Il valore predefinito è COUNT. Se Compute Engine non riesce a creare il numero di VM specificato da COUNT, la richiesta non va a buon fine e non vengono create VM.
    1 Compute Engine crea il maggior numero possibile di VM, fino a COUNT.
    Maggiore di 1 e meno di COUNT Compute Engine crea almeno MIN_COUNT VM fino a un massimo di COUNT VM. Se non è possibile creare MIN_COUNT VM, la richiesta non va a buon fine e non viene creata alcuna VM.
  • LOCATION_POLICY: le zone da includere o escludere all'interno di una regione. Utilizza un elenco di coppie chiave-valore, con la zona come chiave e il criterio come valore. I valori validi per il criterio sono allow, che è il valore predefinito, e deny. Di seguito è riportato un valore di esempio per questo flag:

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_DISTRIBUTION_SHAPE: la distribuzione delle VM tra le zone specificate. Utilizza il flag --location-policy per specificare le zone. La tabella seguente mostra i valori validi per questo flag:

    Valore Descrizione
    ANY_SINGLE_ZONE Applica il posizionamento delle VM in una singola zona e dà la priorità all'utilizzo delle prenotazioni inutilizzate. Utilizzala per evitare il traffico in uscita dalla rete tra zone o per ridurre la latenza della rete. Questo è il valore predefinito.
    BALANCED Tenta di distribuire le VM in modo uniforme in tutte le zone della regione.
    ANY Consente la distribuzione delle VM in più zone di una regione. Scegli le zone con risorse disponibili e che massimizzano le prenotazioni zonali non utilizzate.

REST

Per creare più VM contemporaneamente in una regione, utilizza il seguente metodo instances.bulkInsert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_DISTRIBUTION_SHAPE"
  ...
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto.

  • REGION: la regione in cui creare le VM.

  • NAME_PATTERN: il pattern del nome delle VM. Specifica o questo o perInstanceProperties. Utilizza una sequenza di caratteri hash (#) per consentire a Compute Engine di sostituirli con una sequenza di numeri. Ad esempio, l'utilizzo di vm-# per il pattern di nomi genera VM con nomi come vm-1 e vm-2, fino al numero di VM specificato da --count, che deve essere inferiore o uguale al numero di VM consentito dal pattern di nomi.

    Quando utilizzi un pattern di nomi, Compute Engine cerca di evitare conflitti di nomi controllando i nomi delle VM esistenti create da richieste precedenti.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: un elenco di nomi predefiniti per le VM da creare. Specifica questa opzione o namePattern. Se utilizzi questo indicatore e specifichi COUNT, COUNT deve essere uguale al numero di nomi forniti.

  • COUNT: il numero di VM da creare. Deve essere inferiore o uguale al numero di VM consentito da NAME_PATTERN. In alternativa, se utilizzi perInstanceProperties, non devi specificare COUNT, ma se lo fai, deve essere uguale al numero di nomi forniti.

  • MIN_COUNT: il numero minimo di VM da creare. La seguente tabella descrive il comportamento della richiesta in base al modo in cui lo imposti:

    Valore Descrizione
    Non impostato Il valore predefinito è COUNT. Se Compute Engine non riesce a creare il numero di VM specificato da COUNT, la richiesta non va a buon fine e non vengono create VM.
    1 Compute Engine crea il maggior numero possibile di VM, fino a COUNT.
    Maggiore di 1 e meno di COUNT Compute Engine crea almeno MIN_COUNT VM fino a un massimo di COUNT VM. Se non è possibile creare MIN_COUNT VM, la richiesta non va a buon fine e non viene creata alcuna VM.
  • LOCATION_POLICY: le zone da includere o escludere all'interno di una regione. Utilizza un elenco di coppie chiave-valore, con la zona come chiave e il criterio come valore. I valori validi per il criterio sono ALLOW, che è il valore predefinito, e DENY. Di seguito è riportato un esempio di valore per questo campo:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: la distribuzione delle VM nelle zone specificate. Utilizza il campo locationPolicy per specificare le zone. La tabella seguente mostra i valori validi per questo campo:

    Valore Descrizione
    ANY_SINGLE_ZONE Applica il posizionamento delle VM in una singola zona e dà la priorità all'utilizzo delle prenotazioni inutilizzate. Utilizzala per evitare il traffico in uscita dalla rete tra zone o per ridurre la latenza della rete. Questo è il valore predefinito.
    BALANCED Tenta di distribuire le VM in modo uniforme in tutte le zone della regione.
    ANY Consente la distribuzione delle VM in più zone di una regione. Scegli le zone con risorse disponibili e che massimizzano le prenotazioni zonali non utilizzate.

Creare più VM contemporaneamente in una zona

Per creare più VM contemporaneamente in una zona, utilizza l'interfaccia a riga di comando gcloud o l'API Compute Engine.

gcloud

Per creare più VM contemporaneamente in una zona specifica, utilizza il seguente comando gcloud compute instances bulk create.

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --zone=ZONE \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]

Sostituisci quanto segue:

  • NAME_PATTERN: il pattern del nome delle VM. Utilizza una sequenza di caratteri hash (#) per Compute Engine da sostituire con una sequenza di numeri. Ad esempio, l'utilizzo di vm-# per il pattern di nomi genera VM con nomi come vm-1 e vm-2, fino al numero di VM specificato da --count, che deve essere inferiore o uguale al numero di VM consentito dal pattern di nomi.

    Quando utilizzi un pattern di nomi, Compute Engine tenta di evitare conflitti di nomi controllando i nomi delle VM esistenti create da richieste precedenti.

  • PREDEFINED_NAMES: un elenco di nomi predefiniti per le VM da creare. Se utilizzi questo flag e specifichi COUNT, COUNT deve essere uguale al numero di nomi forniti.

  • ZONE: la zona in cui creare le VM.

  • COUNT: il numero di VM da creare. Deve essere inferiore o uguale al numero di VM consentito da NAME_PATTERN. In alternativa, se utilizzi --predefined-names, non devi specificare COUNT, ma se lo fai, questo deve essere uguale al numero di nomi forniti.

  • MIN_COUNT: il numero minimo di VM da creare. La seguente tabella descrive il comportamento della richiesta in base al modo in cui lo imposti:

    Valore Descrizione
    Non impostato Il valore predefinito è COUNT. Se Compute Engine non riesce a creare il numero di VM specificato da COUNT, la richiesta non va a buon fine e non vengono create VM.
    1 Compute Engine crea il maggior numero possibile di VM, fino a COUNT.
    Maggiore di 1 e meno di COUNT Compute Engine crea almeno MIN_COUNT VM fino a un massimo di COUNT VM. Se non è possibile creare MIN_COUNT VM, la richiesta non va a buon fine e non viene creata alcuna VM.

REST

Per creare più VM contemporaneamente in una zona, utilizza il seguente metodo instances.bulkInsert.

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

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  ...
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto.

  • ZONE: la zona in cui creare le VM.

  • NAME_PATTERN: il pattern del nome delle VM. Specifica o questo o perInstanceProperties. Utilizza una sequenza di caratteri hash (#) per consentire a Compute Engine di sostituirli con una sequenza di numeri. Ad esempio, l'utilizzo di vm-# per il pattern di nomi genera VM con nomi come vm-1 e vm-2, fino al numero di VM specificato da --count, che deve essere inferiore o uguale al numero di VM consentito dal pattern di nomi.

    Quando utilizzi un pattern di nomi, Compute Engine cerca di evitare conflitti di nomi controllando i nomi delle VM esistenti create da richieste precedenti.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: un elenco di nomi predefiniti per le VM da creare. Specifica questa opzione o namePattern. Se utilizzi questo indicatore e specifichi COUNT, COUNT deve essere uguale al numero di nomi forniti.

  • COUNT: il numero di VM da creare. Deve essere inferiore o uguale al numero di VM consentito da NAME_PATTERN. In alternativa, se utilizzi perInstanceProperties, non devi specificare COUNT, ma se lo fai, deve essere uguale al numero di nomi forniti.

  • MIN_COUNT: il numero minimo di VM da creare. La seguente tabella descrive il comportamento della richiesta in base al modo in cui lo imposti:

    Valore Descrizione
    Non impostato Il valore predefinito è COUNT. Se Compute Engine non riesce a creare il numero di VM specificato da COUNT, la richiesta non va a buon fine e non vengono create VM.
    1 Compute Engine crea il maggior numero possibile di VM, fino a COUNT.
    Maggiore di 1 e meno di COUNT Compute Engine crea almeno MIN_COUNT VM fino a un massimo di COUNT VM. Se non è possibile creare MIN_COUNT VM, la richiesta non va a buon fine e non viene creata alcuna VM.

Creare collettivamente VM con nomi host personalizzati

Puoi creare più VM con nomi host personalizzati in una regione o in una zona utilizzando l'interfaccia a riga di comando gcloud o l'API Compute Engine.

Devi configurare manualmente il record DNS per il nome host personalizzato. Per ulteriori informazioni, consulta le limitazioni.

Se non specifichi un nome host, Compute Engine imposta il nome host per le VM su uno dei seguenti valori:

  • VM_NAME.c.PROJECT_ID.internal quando attivi il DNS globale
  • VM_NAME.ZONE.c.PROJECT_ID.internal quando attivi il DNS di zona

Per saperne di più, consulta Nomi DNS interni.

gcloud

Per creare più VM contemporaneamente con nomi host personalizzati in una regione specifica, utilizza il seguente comando gcloud beta compute instances bulk create.

gcloud beta compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --per-instance-hostnames=[VM_NAME=HOSTNAME,...] \
    --zone=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]

Sostituisci quanto segue:

  • NAME_PATTERN: il pattern del nome delle VM. Utilizza una sequenza di caratteri hash (#) per Compute Engine da sostituire con una sequenza di numeri. Ad esempio, l'utilizzo di vm-# per il pattern di nomi genera VM con nomi come vm-1 e vm-2, fino al numero di VM specificato da --count, che deve essere inferiore o uguale al numero di VM consentito dal pattern di nomi.

    Quando utilizzi un pattern di nomi, Compute Engine tenta di evitare conflitti di nomi controllando i nomi delle VM esistenti create da richieste precedenti.

  • PREDEFINED_NAMES: un elenco di nomi predefiniti per le VM da creare. Se utilizzi questo flag e specifichi COUNT, COUNT deve essere uguale al numero di nomi forniti.

  • [VM_NAME=HOSTNAME, ...]: un elenco di coppie chiave-valore di nomi predefiniti per le VM e nomi host di dominio completamente qualificati da assegnare alle VM. I nomi host personalizzati devono essere conformi ai requisiti per i nomi host validi definiti dal documento RFC 1035.

  • REGION: la zona in cui creare le VM.

  • COUNT: il numero di VM da creare. Deve essere inferiore o uguale al numero di VM consentito da NAME_PATTERN. In alternativa, se utilizzi --predefined-names, non devi specificare COUNT, ma se lo fai, questo deve essere uguale al numero di nomi forniti.

  • MIN_COUNT: il numero minimo di VM da creare. La seguente tabella descrive il comportamento della richiesta in base al modo in cui lo imposti:

    Valore Descrizione
    Non impostato Il valore predefinito è COUNT. Se Compute Engine non riesce a creare il numero di VM specificato da COUNT, la richiesta non va a buon fine e non vengono create VM.
    1 Compute Engine crea il maggior numero possibile di VM, fino a COUNT.
    Maggiore di 1 e meno di COUNT Compute Engine crea almeno MIN_COUNT VM fino a un massimo di COUNT VM. Se non è possibile creare MIN_COUNT VM, la richiesta non va a buon fine e non viene creata alcuna VM.
  • LOCATION_POLICY: le zone da includere o escludere all'interno di una regione. Utilizza un elenco di coppie chiave-valore, con la zona come chiave e il criterio come valore. I valori validi per il criterio sono ALLOW, che è il valore predefinito, e DENY. Di seguito è riportato un esempio di valore per questo campo:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: la distribuzione delle VM nelle zone specificate. Utilizza il campo locationPolicy per specificare le zone. La tabella seguente mostra i valori validi per questo campo:

    Valore Descrizione
    ANY_SINGLE_ZONE Applica il posizionamento delle VM in una singola zona e dà la priorità all'utilizzo delle prenotazioni inutilizzate. Utilizzala per evitare il traffico in uscita dalla rete tra zone o per ridurre la latenza della rete. Questo è il valore predefinito.
    BALANCED Tenta di distribuire le VM in modo uniforme in tutte le zone della regione.
    ANY Consente la distribuzione delle VM in più zone di una regione. Scegli le zone con risorse disponibili e che massimizzano le prenotazioni zonali non utilizzate.

REST

Per creare collettivamente VM con nomi host personalizzati in una regione specifica, utilizza il seguente metodo instances.bulkInsert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {"hostname": HOSTNAME_1},
    "PREDEFINED_NAME_2": {"hostname": HOSTNAME_2},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_DISTRIBUTION_SHAPE"
  ...
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto.

  • REGION: la regione in cui creare le VM.

  • NAME_PATTERN: il pattern del nome delle VM. Specifica o questo o perInstanceProperties. Utilizza una sequenza di caratteri hash (#) per consentire a Compute Engine di sostituirli con una sequenza di numeri. Ad esempio, l'utilizzo di vm-# per il pattern di nomi genera VM con nomi come vm-1 e vm-2, fino al numero di VM specificato da --count, che deve essere inferiore o uguale al numero di VM consentito dal pattern di nomi.

    Quando utilizzi un pattern di nomi, Compute Engine cerca di evitare conflitti di nomi controllando i nomi delle VM esistenti create da richieste precedenti.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: un elenco di nomi predefiniti per le VM da creare. Specifica questa opzione o namePattern. Se utilizzi questo indicatore e specifichi COUNT, COUNT deve essere uguale al numero di nomi forniti.

  • HOSTNAME_1, HOSTNAME_2, ...: i nomi host di dominio completi che vuoi assegnare alle VM. I nomi host personalizzati devono essere conformi ai requisiti per i nomi host validi definiti nel documento RFC 1035.

    Ad esempio, per creare due VM vm-1 e vm-2 con nomi host personalizzati my-host1234.example.com e test.example.com, rispettivamente, specifica la proprietà hostname in perInstanceProperties come segue:

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT: il numero di VM da creare. Deve essere inferiore o uguale al numero di VM consentito da NAME_PATTERN. In alternativa, se utilizzi perInstanceProperties, non devi specificare COUNT, ma se lo fai, questo deve essere uguale al numero di nomi forniti.

  • MIN_COUNT: il numero minimo di VM da creare. La seguente tabella descrive il comportamento della richiesta in base al modo in cui lo imposti:

    Valore Descrizione
    Non impostato Il valore predefinito è COUNT. Se Compute Engine non riesce a creare il numero di VM specificato da COUNT, la richiesta non va a buon fine e non vengono create VM.
    1 Compute Engine crea il maggior numero possibile di VM, fino a COUNT.
    Maggiore di 1 e meno di COUNT Compute Engine crea almeno MIN_COUNT VM fino a un massimo di COUNT VM. Se non è possibile creare MIN_COUNT VM, la richiesta non va a buon fine e non viene creata alcuna VM.
  • LOCATION_POLICY: le zone da includere o escludere all'interno di una regione. Utilizza un elenco di coppie chiave-valore, con la zona come chiave e il criterio come valore. I valori validi per il criterio sono ALLOW, che è il valore predefinito, e DENY. Di seguito è riportato un esempio di valore per questo campo:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: la distribuzione delle VM nelle zone specificate. Utilizza il campo locationPolicy per specificare le zone. La tabella seguente mostra i valori validi per questo campo:

    Valore Descrizione
    ANY_SINGLE_ZONE Applica il posizionamento delle VM in una singola zona e dà la priorità all'utilizzo delle prenotazioni inutilizzate. Utilizzala per evitare il traffico in uscita dalla rete tra zone o per ridurre la latenza della rete. Questo è il valore predefinito.
    BALANCED Tenta di distribuire le VM in modo uniforme in tutte le zone della regione.
    ANY Consente la distribuzione delle VM in più zone di una regione. Scegli le zone con risorse disponibili e che massimizzano le prenotazioni zonali non utilizzate.

Controllare lo stato di una richiesta di creazione collettiva di VM

Quando crei una richiesta di mutazione, Compute Engine restituisce una risorsa operation che puoi eseguire il polling per ottenere lo stato dell'operazione. Per ulteriori informazioni, consulta Gestione delle risposte dell'API.

Per ottenere lo stato di una richiesta di inserimento collettivo, invia una richiesta HTTP GET alla risorsa operation:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID

Per conoscere lo stato di una richiesta di inserimento collettivo a livello di regione, invia la seguente richiesta:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto in cui stai creando le VM
  • REGION: la regione in cui stai creando le VM
  • ZONE: la zona in cui stai creando le VM
  • OPERATION_ID: l'ID operazione di inserimento collettivo

L'oggetto instancesBulkInsertOperationMetadata nella risposta contiene i seguenti dettagli dell'operazione:

  • status: lo stato è uno dei seguenti:
    • CREATING: la creazione della VM è in corso
    • ROLLING_BACK: la richiesta non è riuscita e verrà eseguito il rollback
    • DONE: la creazione o il rollback della VM è stato completato correttamente
  • targetVmCount: il numero di VM da creare nella zona specificata
  • createdVmCount: il numero di VM già create nella zona specificata
  • failedToCreateVmCount: il numero di VM che non è stato possibile creare nella zona specificata
  • deletedVmCount: il numero di VM eliminate nell'ambito del rollback di un'operazione non riuscita

Il campo progress nella risposta rappresenta la percentuale di completamento dell'operazione.

Lo stato dell'operazione di inserimento collettivo è RUNNING finché Compute Engine non crea correttamente almeno il numero minimo di VM e non vengono create altre VM o non viene eseguito il rollback della richiesta.

Quando l'operazione di inserimento collettivo è in corso, dovresti visualizzare una risposta simile alla seguente:

{
  "kind" : "compute#operation",
  "id": "4653028658507445766",
  "name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationType": "bulkInsert",
  "targetLink":  "https://www.googleapis.com/compute/v1/projects/my-project"
  "targetId": 4653028658507445766,
  "status": "RUNNING",
  "progress": 2,
  "user": "example@google.com",
  "insertTime": "2023-04-23T09:57:13.474-07:00",
  "startTime": "2023-04-23T09:57:13.474-07:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationGroupId": "4653028658507445766",
  "metadata":
    "instances_bulk_insert_operation_metadata": {
      "per_location_status": {
         "zones/us-central1-a": {
           "status": "CREATING",
           "targetVmCount": 50,
           "createdVmCount": 1
         }
      }
    }
}

In questo esempio, è stata creata un'istanza e l'operazione è completata per il 2%.

L'operazione restituisce lo stato DONE quando Compute Engine crea correttamente almeno il numero minimo di VM specificato da minCount o quando Compute Engine completa il rollback della richiesta. Dopo aver creato correttamente il numero richiesto di VM, ricevi una risposta simile alla seguente:

{
  "endTime": "2023-04-23T09:58:13.474-07:00",
  "id": "5053101474378293244",
  "insertTime": "2023-04-23T09:57:13.474-07:00",
  "instancesBulkInsertOperationMetadata": {
    "perLocationStatus": {
      "zones/us-central1-a": {
        "status": "DONE",
        "createdVmCount": 50,
        "targetVmCount": 50
      }
    }
  },
  "kind": "compute#operation",
  "name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationGroupId": "4653028658507445766",
  "operationType": "bulkInsert",
  "progress": 100,
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "startTime": "2023-09-11T16:21:55.629-07:00",
  "status": "DONE",
  "targetId": "625521788110",
  "targetLink": "https://www.googleapis.com/compute/v1/projects/my-project",
  "user": "example@google.com",
  "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a"
}

Per saperne di più, consulta la documentazione relativa all'oggetto instancesBulkInsertOperationMetadata.

Controllare lo stato di una singola VM

Per controllare lo stato di una singola VM creata da una richiesta di creazione collettiva di VM, utilizza l'interfaccia alla gcloud CLI o l'API Compute Engine.

gcloud

  1. Dal Operation restituito dalla richiesta, ottieni il valore della proprietà operationGroupId.

  2. Utilizza la proprietà operationGroupId come filtro con il comando gcloud compute operations list per cercare in tutte le operazioni e in tutte le zone del progetto le VM associate alla richiesta a livello di regione o zona:

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. Per ottenere le altre proprietà della VM, esegui una delle seguenti operazioni:

    • Nell'elenco delle operazioni, targetLink rappresenta il percorso della VM. Utilizza il comando gcloud compute instances describe con questo percorso come nome della VM per ottenere le relative proprietà:

      gcloud compute instances describe VM_NAME
      
    • Utilizza il comando gcloud compute instances list con un filtro che includa i nomi delle VM dall'elenco delle operazioni:

      gcloud compute instances list VM_NAME \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Utilizza il gcloud compute instances list comando per recuperare le proprietà delle VM di tutte le zone e regioni e filtrare in base a un'etichetta univoca per le istanze o ai relativi nomi:

      gcloud compute instances list \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

REST

  1. Dal Operation restituito dalla richiesta, ottieni il valore della proprietà operationGroupId.

  2. Utilizza la proprietà operationGroupId per ottenere l'elenco delle operazioni VM associate alla richiesta a livello di regione o zona:

    • Se hai inviato una richiesta a livello di regione, per eseguire ricerche in tutte le operazioni e in tutte le zone del progetto, utilizza il metodo globalOperations.aggregatedList e includi la proprietà operationGroupId come filtro:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
      
    • Se hai inviato una richiesta a livello di zona, per elencare le operazioni nella zona, utilizza il metodo zoneOperations.get e includi la proprietà operationGroupId nel corpo della richiesta:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert
      
      {
      ...
      "operationGroupId":"OPERATION_GROUP_ID"
      ...
      }
      
  3. Per ottenere le altre proprietà della VM, esegui una delle seguenti operazioni:

    • Nell'elenco delle operazioni, targetLink rappresenta il percorso della VM. Utilizza il instances.getmetodo con questo percorso come nome della VM per ottenere tutte le proprietà della VM:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
      
    • Utilizza il metodo instances.get con un filtro che includa i nomi delle VM dall'elenco delle operazioni:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Utilizza il instances.aggregatedListmetodo per recuperare le proprietà delle VM di tutte le zone e regioni e filtra in base a un'etichetta univoca per le istanze o ai relativi nomi:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

Esempi di pseudocodice

Gli esempi di pseudocodice riportati di seguito mostrano come personalizzare le richieste per la creazione collettiva di VM.

Creare più VM contemporaneamente in una regione da un insieme di regioni

Il seguente pseudocodice descrive come creare 1000 VM in una regione da un insieme di regioni. Quando si tenta di creare più VM contemporaneamente in una regione da un insieme di regioni, la richiesta controlla innanzitutto la capacità. Se la capacità non è sufficiente, la richiesta non va a buon fine immediatamente e viene riprovato con la regione successiva nell'insieme.

  1. Specifica il numero di VM da creare all'interno di una zona.

    nTarget = 1000
    
  2. Designa le regioni in cui tentare di creare le VM.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Esegui l'iterazione delle regioni e tenta di creare le VM in ogni regione fino a quando non riesci.

    for region in acceptableRegions:
      call bulk API: region=region, location-policy=location-policy, count=nTarget
      if request succeeds and the operation succeeds:
        break
    

Creare più VM in una zona su un tipo di macchina

Il seguente pseudocodice descrive come creare più VM in una zona su un tipo di macchina specificato. Quando si tenta di creare più VM contemporaneamente sullo stesso tipo di macchina, la richiesta controlla innanzitutto la disponibilità di questi tipi di macchine. Se non sono disponibili macchine di questo tipo, la richiesta non va a buon fine immediatamente e viene riprovato con il tipo di macchina successivo.

  1. Specifica il numero di VM da creare e la regione in cui crearle.

    nTarget = 1000
    region = "us-central1"
    
  2. Specifica le famiglie di macchine su cui tentare di creare le VM.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. Esegui l'iterazione nell'insieme di tipi di macchine e prova a creare le VM sul tipo di macchina finché non riesci.

    for family in acceptableMachineFamilies:
      call bulk APIs: region=region, count=nTarget, machineFamily=family
      if request succeeds and the operation succeeds:
        break
    

Creare più di 5000 VM in una zona

Quando crei le VM collettivamente, puoi creare solo 5000 VM con ogni richiesta. Il seguente pseudocodice descrive come creare più di 5000 VM in una zona inviando più richieste.

  1. Specifica il numero di VM da creare, un contatore per tenere traccia del numero totale di VM create, la regione in cui creare le VM e una variabile per memorizzare la zona in cui Compute Engine crea le VM.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. Esegui una richiesta iniziale per creare 5000 VM, salva la zona restituita dalla richiesta e aggiorna il contatore del numero di VM create.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. Continua a emettere richieste per creare fino a 5000 VM alla volta nella zona fino a quando Compute Engine non crea il numero specificato di VM.

    while(nTarget - nCreated > 0):
      call bulk API: zone=targetZone, count=5000
      nCreated += # of VMs created
    

Creare VM collettivamente e visualizzarne lo stato

La procedura seguente mostra come creare un gruppo di VM con nomi predefinite e visualizzarne lo stato:

  1. Specifica il numero di VM da creare, la zona in cui crearle e una struttura di dati in cui memorizzare i nomi.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. Genera i nomi con pattern per le VM e aggiungili alla struttura di dati.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. Crea le VM e utilizza perInstanceProperties per specificare i nomi.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. Ottieni i dettagli delle VM utilizzando il metodo instances.list con un filtro per i nomi delle VM di cui vuoi visualizzare i dettagli.

    instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
    

Passaggi successivi

Dopo aver creato le VM collettivamente, esegui una o entrambe le seguenti operazioni per semplificarne la gestione: