Créer des VM de manière groupée


Si vous souhaitez créer un grand nombre d'instances de machines virtuelles (VM) identiques et indépendantes les unes des autres, créez des VM de manière groupée à l'aide de Google Cloud CLI ou de l'API Compute Engine. Vous pouvez créer ces VM dans toutes les zones d'une région ou les répartir dans certaines zones.

Pour obtenir plus d'informations et connaître les limites associées, consultez la page À propos de la création groupée de VM.

Avant de commencer

  • Assurez-vous de disposer d'un quota suffisant et des autorisations requises pour les VM et les ressources associées que vous prévoyez de créer.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes:

    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

      Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

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

        gcloud init

      Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

Rôles requis

Pour obtenir les autorisations nécessaires à la création de VM de manière groupée, demandez à votre administrateur de vous attribuer le rôle IAM Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour créer des VM de manière groupée. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour créer des VM de manière groupée :

  • compute.instances.create sur le projet
  • Pour créer la VM à l'aide d'une image personnalisée : compute.images.useReadOnly sur l'image
  • Pour créer la VM à l'aide d'un instantané : compute.snapshots.useReadOnly sur l'instantané
  • Pour créer la VM à l'aide d'un modèle d'instance : compute.instanceTemplates.useReadOnly sur le modèle d'instance
  • Pour attribuer un ancien réseau à la VM : compute.networks.use sur le projet
  • Pour spécifier une adresse IP statique pour la VM : compute.addresses.use sur le projet
  • Pour attribuer une adresse IP externe à la VM, en cas d'utilisation d'un ancien réseau : compute.networks.useExternalIp sur le projet
  • Pour spécifier un sous-réseau pour la VM : compute.subnetworks.use sur le projet ou sur le sous-réseau choisi
  • Pour attribuer une adresse IP externe à la VM, en cas d'utilisation d'un réseau VPC : compute.subnetworks.useExternalIp sur le projet ou sur le sous-réseau choisi
  • Pour définir les métadonnées d'instance de VM pour la VM : compute.instances.setMetadata sur le projet
  • Pour définir des tags pour la VM : compute.instances.setTags sur la VM
  • Pour définir des libellés pour la VM : compute.instances.setLabels sur la VM
  • Pour définir un compte de service à utiliser avec la VM : compute.instances.setServiceAccount sur la VM
  • Pour créer un disque pour la VM : compute.disks.create sur le projet
  • Pour associer un disque existant en mode lecture seule ou en mode lecture-écriture : compute.disks.use sur le disque
  • Pour associer un disque existant en mode lecture seule : compute.disks.useReadOnly sur le disque

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Créer des VM de manière groupée dans une région

Pour créer des VM de manière groupée dans une région, utilisez gcloud CLI ou l'API Compute Engine.

Si vous spécifiez un type de machine ou la prise en charge de matériel supplémentaire (tel qu'un GPU ou un disque SSD local), Compute Engine place les VM dans une zone de la région compatible avec le type de machine et le matériel supplémentaire.

gcloud

Pour créer des VM de manière groupée dans une région, exécutez la commande gcloud compute instances bulk create suivante :

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 ]

Remplacez les éléments suivants :

  • NAME_PATTERN : modèle de nom des VM. Utilisez une séquence de caractères de hachage (#) que Compute Engine remplacera par une séquence de nombres. Par exemple, le modèle de nom vm-# génère des VM portant les noms vm-1 et vm-2, jusqu'à ce qu'il atteigne le nombre de VM spécifié par --count, qui doit être inférieur ou égal au nombre de VM autorisé par le modèle de nom.

    Lors de l'utilisation d'un modèle de nom, Compute Engine tente d'éviter les conflits de noms en vérifiant les noms des VM existantes créées à partir des requêtes précédentes.

  • PREDEFINED_NAMES : liste des noms prédéfinis des VM à créer. Si vous utilisez cette option et spécifiez COUNT, COUNT doit être égal au nombre de noms fournis.

  • REGION : région dans laquelle créer les VM.

  • COUNT : nombre de VM à créer. Cette valeur doit être inférieure ou égale au nombre de VM autorisées par NAME_PATTERN. Si vous utilisez --predefined-names, vous n'avez pas besoin de spécifier COUNT, mais dans ce cas, la valeur doit être égale au nombre de noms fournis.

  • MIN_COUNT : nombre minimal de VM à créer. Le tableau suivant décrit le comportement de la requête en fonction de la manière dont vous définissez cette option :

    Valeur Description
    Non défini La valeur par défaut est COUNT. Si Compute Engine ne peut pas créer le nombre de VM spécifié par COUNT, la requête échoue et aucune VM n'est créée.
    1 Compute Engine crée autant de VM que possible, jusqu'à COUNT.
    Supérieur à 1 et inférieur à COUNT Compute Engine crée au moins MIN_COUNT VM et jusqu'à COUNT VM au maximum. Si les MIN_COUNT VM ne peuvent pas être créées, la requête échoue et aucune VM n'est créée.
  • LOCATION_POLICY : zones à inclure ou exclure dans une région. Utilisez une liste de paires clé/valeur, avec la zone comme clé et la règle comme valeur. Les valeurs valides pour la règle sont allow (la valeur par défaut) et deny. Voici un exemple de valeur pour cette option :

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_DISTRIBUTION_SHAPE : répartition des VM dans les zones spécifiées. Utilisez l'option --location-policy pour spécifier les zones. Le tableau suivant indique les valeurs valides pour cette option :

    Valeur Description
    ANY_SINGLE_ZONE Applique le placement de la VM dans une seule zone et donne la priorité à l'utilisation des réservations inutilisées. Utilisez cette option pour éviter toute sortie réseau interzone ou pour réduire la latence du réseau. Il s'agit de la valeur par défaut.
    BALANCED Tente de répartir uniformément les VM dans toutes les zones de la région.
    ANY Permet de répartir les VM dans plusieurs zones d'une région. Choisit les zones qui disposent de ressources disponibles et qui optimisent les réservations zonales non utilisées.

REST

Pour créer des VM de manière groupée dans une région, utilisez la méthode instances.bulkInsert suivante :

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"
  ...
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet.

  • REGION : région dans laquelle créer les VM.

  • NAME_PATTERN : modèle de nom des VM. Indiquez cette valeur ou perInstanceProperties. Utilisez une séquence de caractères de hachage (#) que Compute Engine remplacera par une séquence de nombres. Par exemple, le modèle de nom vm-# génère des VM portant les noms vm-1 et vm-2, jusqu'à ce qu'il atteigne le nombre de VM spécifié par --count, qui doit être inférieur ou égal au nombre de VM autorisé par le modèle de nom.

    Lors de l'utilisation d'un modèle de nom, Compute Engine tente d'éviter les conflits de noms en vérifiant les noms des VM existantes créées à partir des requêtes précédentes.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ... : liste des noms prédéfinis des VM à créer. Spécifiez cet élément ou namePattern. Si vous utilisez cette option et spécifiez COUNT, COUNT doit être égal au nombre de noms fournis.

  • COUNT : nombre de VM à créer. Cette valeur doit être inférieure ou égale au nombre de VM autorisées par NAME_PATTERN. Si vous utilisez perInstanceProperties, vous n'avez pas besoin de spécifier COUNT, mais dans ce cas, la valeur doit être égale au nombre de noms fournis.

  • MIN_COUNT : nombre minimal de VM à créer. Le tableau suivant décrit le comportement de la requête en fonction de la manière dont vous définissez cette option :

    Valeur Description
    Non défini La valeur par défaut est COUNT. Si Compute Engine ne peut pas créer le nombre de VM spécifié par COUNT, la requête échoue et aucune VM n'est créée.
    1 Compute Engine crée autant de VM que possible, jusqu'à COUNT.
    Supérieur à 1 et inférieur à COUNT Compute Engine crée au moins MIN_COUNT VM et jusqu'à COUNT VM au maximum. Si les MIN_COUNT VM ne peuvent pas être créées, la requête échoue et aucune VM n'est créée.
  • LOCATION_POLICY : zones à inclure ou exclure dans une région. Utilisez une liste de paires clé/valeur, avec la zone comme clé et la règle comme valeur. Les valeurs valides pour la règle sont ALLOW (la valeur par défaut) et DENY. Voici un exemple de valeur pour ce champ :

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE : répartition des VM dans les zones spécifiées. Utilisez le champ locationPolicy pour spécifier les zones. Le tableau suivant indique les valeurs valides pour ce champ :

    Valeur Description
    ANY_SINGLE_ZONE Applique le placement de la VM dans une seule zone et donne la priorité à l'utilisation des réservations inutilisées. Utilisez cette option pour éviter toute sortie réseau interzone ou pour réduire la latence du réseau. Il s'agit de la valeur par défaut.
    BALANCED Tente de répartir uniformément les VM dans toutes les zones de la région.
    ANY Permet de répartir les VM dans plusieurs zones d'une région. Choisit les zones qui disposent de ressources disponibles et qui optimisent les réservations zonales non utilisées.

Créer des VM de manière groupée dans une zone

Pour créer des VM de manière groupée dans une zone, utilisez gcloud CLI ou l'API Compute Engine.

gcloud

Pour créer des VM de manière groupée dans une zone spécifique, exécutez la commande gcloud compute instances bulk create suivante.

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

Remplacez les éléments suivants :

  • NAME_PATTERN : modèle de nom des VM. Utilisez une séquence de caractères de hachage (#) que Compute Engine remplacera par une séquence de nombres. Par exemple, le modèle de nom vm-# génère des VM portant les noms vm-1 et vm-2, jusqu'à ce qu'il atteigne le nombre de VM spécifié par --count, qui doit être inférieur ou égal au nombre de VM autorisé par le modèle de nom.

    Lors de l'utilisation d'un modèle de nom, Compute Engine tente d'éviter les conflits de noms en vérifiant les noms des VM existantes créées à partir des requêtes précédentes.

  • PREDEFINED_NAMES : liste des noms prédéfinis des VM à créer. Si vous utilisez cette option et spécifiez COUNT, COUNT doit être égal au nombre de noms fournis.

  • ZONE : zone dans laquelle créer les VM.

  • COUNT : nombre de VM à créer. Cette valeur doit être inférieure ou égale au nombre de VM autorisées par NAME_PATTERN. Si vous utilisez --predefined-names, vous n'avez pas besoin de spécifier COUNT, mais dans ce cas, la valeur doit être égale au nombre de noms fournis.

  • MIN_COUNT : nombre minimal de VM à créer. Le tableau suivant décrit le comportement de la requête en fonction de la manière dont vous définissez cette option :

    Valeur Description
    Non défini La valeur par défaut est COUNT. Si Compute Engine ne peut pas créer le nombre de VM spécifié par COUNT, la requête échoue et aucune VM n'est créée.
    1 Compute Engine crée autant de VM que possible, jusqu'à COUNT.
    Supérieur à 1 et inférieur à COUNT Compute Engine crée au moins MIN_COUNT VM et jusqu'à COUNT VM au maximum. Si les MIN_COUNT VM ne peuvent pas être créées, la requête échoue et aucune VM n'est créée.

REST

Pour créer des VM de manière groupée dans une zone, utilisez la méthode instances.bulkInsert suivante.

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,
  ...
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet.

  • ZONE : zone dans laquelle créer les VM.

  • NAME_PATTERN : modèle de nom des VM. Indiquez cette valeur ou perInstanceProperties. Utilisez une séquence de caractères de hachage (#) que Compute Engine remplacera par une séquence de nombres. Par exemple, le modèle de nom vm-# génère des VM portant les noms vm-1 et vm-2, jusqu'à ce qu'il atteigne le nombre de VM spécifié par --count, qui doit être inférieur ou égal au nombre de VM autorisé par le modèle de nom.

    Lors de l'utilisation d'un modèle de nom, Compute Engine tente d'éviter les conflits de noms en vérifiant les noms des VM existantes créées à partir des requêtes précédentes.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ... : liste des noms prédéfinis des VM à créer. Spécifiez cet élément ou namePattern. Si vous utilisez cette option et spécifiez COUNT, COUNT doit être égal au nombre de noms fournis.

  • COUNT : nombre de VM à créer. Cette valeur doit être inférieure ou égale au nombre de VM autorisées par NAME_PATTERN. Si vous utilisez perInstanceProperties, vous n'avez pas besoin de spécifier COUNT, mais dans ce cas, la valeur doit être égale au nombre de noms fournis.

  • MIN_COUNT : nombre minimal de VM à créer. Le tableau suivant décrit le comportement de la requête en fonction de la manière dont vous définissez cette option :

    Valeur Description
    Non défini La valeur par défaut est COUNT. Si Compute Engine ne peut pas créer le nombre de VM spécifié par COUNT, la requête échoue et aucune VM n'est créée.
    1 Compute Engine crée autant de VM que possible, jusqu'à COUNT.
    Supérieur à 1 et inférieur à COUNT Compute Engine crée au moins MIN_COUNT VM et jusqu'à COUNT VM au maximum. Si les MIN_COUNT VM ne peuvent pas être créées, la requête échoue et aucune VM n'est créée.

Créer des VM avec des noms d'hôte personnalisés de façon groupée

Vous pouvez créer des VM avec des noms d'hôte personnalisés de façon groupée dans une région ou dans une zone à l'aide de gcloud CLI ou de l'API Compute Engine.

L'enregistrement DNS de votre nom d'hôte personnalisé doit être configuré manuellement. Pour en savoir plus, consultez la section Limites.

Si vous ne spécifiez pas de nom d'hôte, Compute Engine définit le nom d'hôte des VM comme suit :

  • VM_NAME.c.PROJECT_ID.internal lorsque vous activez le DNS global
  • VM_NAME.ZONE.c.PROJECT_ID.internal lorsque vous activez le DNS zonal

Pour en savoir plus, consultez la section Noms DNS internes.

gcloud

Pour créer des VM avec des noms d'hôte personnalisés dans une région spécifique de façon groupée, utilisez la commande gcloud beta compute instances bulk create suivante.

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 ]

Remplacez les éléments suivants :

  • NAME_PATTERN : modèle de nom des VM. Utilisez une séquence de caractères de hachage (#) que Compute Engine remplacera par une séquence de nombres. Par exemple, le modèle de nom vm-# génère des VM portant les noms vm-1 et vm-2, jusqu'à ce qu'il atteigne le nombre de VM spécifié par --count, qui doit être inférieur ou égal au nombre de VM autorisé par le modèle de nom.

    Lors de l'utilisation d'un modèle de nom, Compute Engine tente d'éviter les conflits de noms en vérifiant les noms des VM existantes créées à partir des requêtes précédentes.

  • PREDEFINED_NAMES : liste des noms prédéfinis des VM à créer. Si vous utilisez cette option et spécifiez COUNT, COUNT doit être égal au nombre de noms fournis.

  • [VM_NAME=HOSTNAME, …] : liste de paires clé/valeur de noms prédéfinis pour les VM et les noms d'hôte de domaine complets que vous souhaitez attribuer aux VM. Les noms d'hôte personnalisés doivent être conformes aux exigences de la norme RFC 1035 relative aux noms d'hôte valides.

  • REGION : zone dans laquelle créer les VM.

  • COUNT : nombre de VM à créer. Cette valeur doit être inférieure ou égale au nombre de VM autorisées par NAME_PATTERN. Si vous utilisez --predefined-names, vous n'avez pas besoin de spécifier COUNT, mais dans ce cas, la valeur doit être égale au nombre de noms fournis.

  • MIN_COUNT : nombre minimal de VM à créer. Le tableau suivant décrit le comportement de la requête en fonction de la manière dont vous définissez cette option :

    Valeur Description
    Non défini La valeur par défaut est COUNT. Si Compute Engine ne peut pas créer le nombre de VM spécifié par COUNT, la requête échoue et aucune VM n'est créée.
    1 Compute Engine crée autant de VM que possible, jusqu'à COUNT.
    Supérieur à 1 et inférieur à COUNT Compute Engine crée au moins MIN_COUNT VM et jusqu'à COUNT VM au maximum. Si les MIN_COUNT VM ne peuvent pas être créées, la requête échoue et aucune VM n'est créée.
  • LOCATION_POLICY : zones à inclure ou exclure dans une région. Utilisez une liste de paires clé/valeur, avec la zone comme clé et la règle comme valeur. Les valeurs valides pour la règle sont ALLOW (la valeur par défaut) et DENY. Voici un exemple de valeur pour ce champ :

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE : répartition des VM dans les zones spécifiées. Utilisez le champ locationPolicy pour spécifier les zones. Le tableau suivant indique les valeurs valides pour ce champ :

    Valeur Description
    ANY_SINGLE_ZONE Applique le placement de la VM dans une seule zone et donne la priorité à l'utilisation des réservations inutilisées. Utilisez cette option pour éviter toute sortie réseau interzone ou pour réduire la latence du réseau. Il s'agit de la valeur par défaut.
    BALANCED Tente de répartir uniformément les VM dans toutes les zones de la région.
    ANY Permet de répartir les VM dans plusieurs zones d'une région. Choisit les zones qui disposent de ressources disponibles et qui optimisent les réservations zonales non utilisées.

REST

Pour créer des VM avec des noms d'hôte personnalisés dans une région spécifique de façon groupée, utilisez la méthode instances.bulkInsert suivante :

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"
  ...
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet.

  • REGION : région dans laquelle créer les VM.

  • NAME_PATTERN : modèle de nom des VM. Indiquez cette valeur ou perInstanceProperties. Utilisez une séquence de caractères de hachage (#) que Compute Engine remplacera par une séquence de nombres. Par exemple, le modèle de nom vm-# génère des VM portant les noms vm-1 et vm-2, jusqu'à ce qu'il atteigne le nombre de VM spécifié par --count, qui doit être inférieur ou égal au nombre de VM autorisé par le modèle de nom.

    Lors de l'utilisation d'un modèle de nom, Compute Engine tente d'éviter les conflits de noms en vérifiant les noms des VM existantes créées à partir des requêtes précédentes.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ... : liste des noms prédéfinis des VM à créer. Spécifiez cet élément ou namePattern. Si vous utilisez cette option et spécifiez COUNT, COUNT doit être égal au nombre de noms fournis.

  • HOSTNAME_1, HOSTNAME_2, … : noms d'hôte de domaine complets que vous souhaitez attribuer aux VM. Les noms d'hôte personnalisés doivent être conformes aux exigences de la norme RFC 1035 relative aux noms d'hôte valides.

    Par exemple, pour créer deux VM vm-1 et vm-2 avec les noms d'hôte personnalisés my-host1234.example.com et test.example.com, spécifiez respectivement la propriété hostname dans perInstanceProperties, comme suit :

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT : nombre de VM à créer. Cette valeur doit être inférieure ou égale au nombre de VM autorisées par NAME_PATTERN. Si vous utilisez perInstanceProperties, vous n'avez pas besoin de spécifier COUNT, mais dans ce cas, la valeur doit être égale au nombre de noms fournis.

  • MIN_COUNT : nombre minimal de VM à créer. Le tableau suivant décrit le comportement de la requête en fonction de la manière dont vous définissez cette option :

    Valeur Description
    Non défini La valeur par défaut est COUNT. Si Compute Engine ne peut pas créer le nombre de VM spécifié par COUNT, la requête échoue et aucune VM n'est créée.
    1 Compute Engine crée autant de VM que possible, jusqu'à COUNT.
    Supérieur à 1 et inférieur à COUNT Compute Engine crée au moins MIN_COUNT VM et jusqu'à COUNT VM au maximum. Si les MIN_COUNT VM ne peuvent pas être créées, la requête échoue et aucune VM n'est créée.
  • LOCATION_POLICY : zones à inclure ou exclure dans une région. Utilisez une liste de paires clé/valeur, avec la zone comme clé et la règle comme valeur. Les valeurs valides pour la règle sont ALLOW (la valeur par défaut) et DENY. Voici un exemple de valeur pour ce champ :

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE : répartition des VM dans les zones spécifiées. Utilisez le champ locationPolicy pour spécifier les zones. Le tableau suivant indique les valeurs valides pour ce champ :

    Valeur Description
    ANY_SINGLE_ZONE Applique le placement de la VM dans une seule zone et donne la priorité à l'utilisation des réservations inutilisées. Utilisez cette option pour éviter toute sortie réseau interzone ou pour réduire la latence du réseau. Il s'agit de la valeur par défaut.
    BALANCED Tente de répartir uniformément les VM dans toutes les zones de la région.
    ANY Permet de répartir les VM dans plusieurs zones d'une région. Choisit les zones qui disposent de ressources disponibles et qui optimisent les réservations zonales non utilisées.

Vérifier l'état d'une requête de création de VM de manière groupée

Lorsque vous créez une requête de mutation, Compute Engine renvoie une ressource operation que vous pouvez interroger pour obtenir l'état de l'opération. Pour en savoir plus, consultez la page Gérer les réponses de l'API.

Pour obtenir l'état d'une requête d'insertion groupée, envoyez une requête HTTP GET à la ressource operation :

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

Pour obtenir l'état d'une requête d'insertion groupée régionale, envoyez la requête suivante :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel vous créez des VM
  • REGION : région dans laquelle vous créez des VM
  • ZONE : zone dans laquelle vous créez des VM
  • OPERATION_ID : ID de l'opération d'insertion groupée

L'objet instancesBulkInsertOperationMetadata dans la réponse contient les détails suivants de l'opération :

  • status : l'état est l'un des suivants :
    • CREATING : la création de la VM est en cours
    • ROLLING_BACK : la requête a échoué et fait l'objet d'un rollback
    • DONE : la création ou le rollback de la VM a bien été effectué
  • targetVmCount : nombre de VM à créer dans la zone spécifiée
  • createdVmCount : nombre de VM déjà créées dans la zone spécifiée
  • failedToCreateVmCount : nombre de VM dont la création a échoué dans la zone spécifiée
  • deletedVmCount : nombre de VM supprimées dans le cadre du rollback d'une opération ayant échoué

Le champ progress dans la réponse représente le pourcentage d'achèvement de l'opération.

L'état de l'opération d'insertion groupée est défini sur RUNNING jusqu'à ce que Compute Engine crée au moins le nombre minimal de VM et ne crée plus de VM ni n'effectue de rollback de la requête.

Lorsque l'opération d'insertion groupée est en cours, vous devriez obtenir une réponse semblable à celle-ci :

{
  "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
         }
      }
    }
}

Dans cet exemple, une instance a été créée avec succès et l'opération est terminée à 2 %.

L'opération renvoie l'état DONE lorsque Compute Engine crée au moins le nombre minimal de VM spécifié par minCount ou lorsque Compute Engine termine le rollback de la requête. Une fois le nombre de VM demandé créé, vous obtenez une réponse semblable à celle-ci :

{
  "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"
}

Pour en savoir plus, consultez la documentation de l'objet instancesBulkInsertOperationMetadata.

Vérifier l'état d'une seule VM

Pour vérifier l'état d'une seule VM créée à partir d'une requête de création groupée de VM, utilisez gcloud CLI ou l'API Compute Engine.

gcloud

  1. Obtenez la valeur de la propriété operationGroupId à partir de la ressource Operation renvoyée par la requête.

  2. Utilisez la propriété operationGroupId comme un filtre avec la commande gcloud compute operations list pour rechercher les VM associées à la requête régionale ou zonale dans l'ensemble des opérations et des zones du projet :

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. Obtenez les autres propriétés de la VM en effectuant l'une des opérations suivantes :

    • Dans la liste des opérations, targetLink représente le chemin d'accès de la VM. Exécutez la commande gcloud compute instances describe en indiquant ce chemin d'accès comme nom de la VM pour obtenir les propriétés de la VM :

      gcloud compute instances describe VM_NAME
      
    • Exécutez la commande gcloud compute instances list avec un filtre incluant les noms des VM de la liste des opérations :

      gcloud compute instances list VM_NAME \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Exécutez la commande gcloud compute instances list pour obtenir les propriétés des VM situées dans l'ensemble des zones et des régions, et filtrez les résultats en fonction d'un libellé propre aux instances ou de leur nom :

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

REST

  1. Obtenez la valeur de la propriété operationGroupId à partir de la ressource Operation renvoyée par la requête.

  2. Utilisez la propriété operationGroupId pour obtenir la liste des opérations de VM associées à la requête régionale ou zonale :

    • Si vous avez envoyé une requête régionale, pour effectuer une recherche sur l'ensemble des opérations et des zones du projet, utilisez la méthode globalOperations.aggregatedList et incluez la propriété operationGroupId en tant que filtre :

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
      
    • Si vous avez envoyé une requête zonale, pour répertorier les opérations dans cette zone, utilisez la méthode zoneOperations.get et incluez la propriété operationGroupId dans la corps de la requête :

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert
      
      {
      ...
      "operationGroupId":"OPERATION_GROUP_ID"
      ...
      }
      
  3. Obtenez les autres propriétés de la VM en effectuant l'une des opérations suivantes :

    • Dans la liste des opérations, targetLink représente le chemin d'accès de la VM. Utilisez la méthode instances.get en indiquant ce chemin d'accès comme nom de la VM pour obtenir toutes les propriétés de la VM :

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
      
    • Utilisez la méthode instances.get avec un filtre incluant les noms des VM de la liste des opérations :

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Utilisez la méthode instances.aggregatedList pour obtenir les propriétés des VM situées dans l'ensemble des zones et des régions, et filtrez les résultats en fonction d'un libellé propre aux instances ou de leur nom :

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

Exemples de pseudo-code

Les exemples de pseudo-code suivants montrent comment personnaliser les requêtes de création de VM de manière groupée.

Créer des VM de manière groupée dans une région à partir d'un ensemble de régions

Le pseudo-code suivant décrit comment créer 1 000 VM dans une région à partir d'un ensemble de régions. Lorsque vous tentez de créer des VM de manière groupée dans une région à partir d'un ensemble de régions, la requête commence par vérifier la capacité. Si la capacité est insuffisante, la requête échoue immédiatement et recommence avec la région suivante de l'ensemble.

  1. Spécifiez le nombre de VM à créer dans une zone.

    nTarget = 1000
    
  2. Indiquez les régions dans lesquelles créer les VM.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Effectuez des itérations via les régions et créez les VM dans chaque région jusqu'à ce qu'elles aboutissent.

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

Créer des VM de manière groupée dans une zone sur un type de machine

Le pseudo-code suivant décrit comment créer plusieurs VM dans une zone sur un type de machine spécifié. Lorsque vous tentez de créer des VM de manière groupée sur le même type de machine, la requête vérifie d'abord la disponibilité de ces types de machines. Si le type de machine disponible n'est pas suffisant, la requête échoue immédiatement et recommence avec le type de machine suivant.

  1. Spécifiez le nombre de VM à créer et la région dans laquelle les créer.

    nTarget = 1000
    region = "us-central1"
    
  2. Spécifiez les familles de machines sur lesquelles créer les VM.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. Effectuez des itérations via les types de machines et créez les VM sur ce type de machine jusqu'à ce qu'elles aboutissent.

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

Créer plus de 5 000 VM dans une zone

Lorsque vous créez des VM de manière groupée, vous ne pouvez créer que 5 000 VM par requête. Le pseudo-code suivant décrit comment créer plus de 5 000 VM dans une zone en envoyant plusieurs requêtes.

  1. Indiquez le nombre de VM à créer, un compteur pour effectuer le suivi du nombre total de VM créées, la région dans laquelle créer les VM, et une variable pour stocker la zone dans laquelle Compute Engine crée les VM.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. Envoyez une requête initiale pour créer 5 000 VM, enregistrez la zone renvoyée par la requête, puis mettez à jour le compteur du nombre de VM créées.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. Continuez à envoyer des requêtes pour créer jusqu'à 5 000 VM à la fois dans la zone jusqu'à ce que Compute Engine crée le nombre de VM spécifié.

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

Créer des VM de manière groupée et afficher leur état

La procédure suivante montre comment créer un groupe de VM portant des noms prédéfinis, puis afficher leur état :

  1. Indiquez le nombre de VM à créer, la zone dans laquelle les créer, ainsi qu'une structure de données dans laquelle stocker les noms.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. Générez les noms modélisés des VM et ajoutez-les à la structure de données.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. Créez les VM et utilisez perInstanceProperties pour spécifier les noms.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. Pour obtenir des informations sur les VM, utilisez la méthode instances.list avec un filtre portant sur les noms des VM dont vous souhaitez connaître les détails.

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

Étape suivante

Après avoir créé des VM de manière groupée, effectuez l'une des opérations suivantes, ou les deux, pour simplifier la gestion de ces VM :