Créer des modèles d'instances

Cette page explique comment créer et gérer des modèles d'instances. Les modèles d'instances vous permettent de définir le type de machine, l'image de disque de démarrage ou de conteneur, le réseau, ainsi que d'autres propriétés d'instance à utiliser lors de la création d'instances de VM. Vous pouvez utiliser des modèles d'instances aussi bien pour créer des instances dans un groupe d'instances géré que pour créer des instances individuelles.

Avant de commencer

Créer un nouveau modèle d'instance

Une requête API standard pour créer une instance de VM individuelle comporte un certain nombre de propriétés d'instance, dont la plupart peuvent être définies dans le modèle d'instance. Cela inclut par exemple les métadonnées d'instance, les scripts de démarrage, les disques persistants, les comptes de service, etc.

A minima, la création d'un modèle d'instance requiert les mêmes propriétés que celles nécessaires à la création d'une instance. Pour obtenir la liste des champs obligatoires, consultez la documentation de référence de instanceTemplates().insert.

Créez un modèle d'instance à l'aide de Google Cloud Console, de l'outil de ligne de commande gcloud ou de l'API.

Console

  1. Dans Cloud Console, accédez à la page Modèles d'instance.

    Accéder à la page Modèles d'instance

  2. Cliquez sur Créer un modèle d'instance.
  3. Renseignez les champs avec les valeurs de votre choix pour votre modèle d'instance. Vous pouvez également accepter les valeurs par défaut, qui sont les suivantes :

    • Type de machine : n1-standard-1
    • Image : image la plus récente de Debian
    • Disque de démarrage : un nouveau disque de démarrage standard nommé d'après l'instance
    • Réseau VPC : le réseau VPC default
    • Adresse IP : une adresse IP externe éphémère
  4. Vous pouvez également modifier les paramètres de la VM protégée de l'instance si vous avez choisi une image compatible avec la VM protégée :

    1. Cliquez sur l'onglet Sécurité dans la section Gestion, sécurité, disques, mise en réseau et location unique.
    2. Si vous souhaitez désactiver le démarrage sécurisé, décochez la case Activer le démarrage sécurisé. Le démarrage sécurisé permet de protéger vos instances de VM contre les logiciels malveillants, et les rootkits opérant au niveau des secteurs de démarrage et du noyau. Pour plus d'informations, consultez la section Démarrage sécurisé.
    3. Si vous souhaitez désactiver le module vTPM (Virtual Trusted Platform Module), décochez la case Activer vTPM. Le module vTPM active le démarrage mesuré, ce qui permet de valider l'intégrité du pré-amorçage et du démarrage de la VM. Pour plus d'informations, consultez la section Module vTPM (Virtual Trusted Platform Module).

    4. Si vous souhaitez désactiver la surveillance de l'intégrité, décochez la case Activer la surveillance de l'intégrité. Cette fonctionnalité vous permet de surveiller l'intégrité du démarrage de vos instances de VM protégées à l'aide de Stackdriver Monitoring. Pour plus d'informations, consultez la section Surveillance de l'intégrité.

  5. Si vous le souhaitez, cliquez sur les onglets de la section Gestion, sécurité, disques, mise en réseau et location unique pour personnaliser davantage votre modèle. Vous pouvez ainsi ajouter jusqu'à 15 disques secondaires non amorçables.

  6. Vous pouvez également cliquer sur REST équivalent au bas de la page pour afficher le corps de la requête REST, qui comprend la représentation JSON de votre modèle d'instance.

  7. Cliquez sur Créer pour générer le modèle.

gcloud

Dans gcloud compute, créez un modèle d'instance à l'aide de la commande instance-templates create :

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME]

où vous remplacez [INSTANCE_TEMPLATE_NAME] par le nom que vous souhaitez donner au modèle d'instance.

Si vous ne fournissez pas de paramètres explicites pour le modèle, gcloud compute crée un modèle avec les valeurs par défaut suivantes :

  • Type de machine : n1-standard-1
  • Image : image la plus récente de Debian
  • Disque de démarrage : un nouveau disque de démarrage standard nommé d'après l'instance
  • Réseau : le réseau VPC default
  • Adresse IP : une adresse IP externe éphémère

Vous pouvez également fournir ces paramètres de configuration de manière explicite. Exemple :

gcloud compute instance-templates create example-template-custom \
    --machine-type n1-standard-4 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --boot-disk-size 250GB

Vous pouvez ajouter jusqu'à 15 disques secondaires non amorçables. Spécifiez l'indicateur --create-disk pour chaque disque secondaire que vous créez. Pour créer des disques secondaires à partir d'une image publique ou d'une image issue d'une banque d'images, spécifiez les propriétés image et image-project dans l'indicateur --create-disk. Pour créer un disque vide, n'incluez pas ces propriétés. Vous pouvez également inclure des valeurs pour les propriétés size et type du disque.

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --create-disk image=[DISK_IMAGE],image-project=[DISK_IMAGE_PROJECT],size=[SIZE_GB]

où :

  • [INSTANCE_TEMPLATE_NAME] correspond au nom du nouveau modèle.
  • [DISK_IMAGE] correspond à l'image source du disque secondaire. Pour obtenir la liste des images disponibles, exécutez la commande gcloud compute images list. Pour les disques vides, ne spécifiez pas d'image disque ni de projet d'image.
  • [DISK_IMAGE_PROJECT] est le projet d'image auquel appartient l'image disque. Pour les disques vides, ne spécifiez pas d'image disque ni de projet d'image.
  • [SIZE_GB] correspond à la taille du disque secondaire.

Si vous avez choisi une image compatible avec les VM protégées, vous pouvez également modifier les paramètres de la VM protégée de l'instance à l'aide de l'un des indicateurs suivants :

  • --no-shielded-secure-boot : désactive le démarrage sécurisé. Le démarrage sécurisé permet de protéger vos instances de VM contre les logiciels malveillants et les rootkits opérant au niveau des secteurs de démarrage et du noyau. Pour plus d'informations, consultez la section Démarrage sécurisé.
  • --no-shielded-vtpm : désactive le module vTPM (Virtual Trusted Platform Module). Le module vTPM active le démarrage mesuré, ce qui permet de valider l'intégrité du pré-amorçage et du démarrage de la VM. Pour plus d'informations, consultez la section Module vTPM (Virtual Trusted Platform Module).

  • --no-shielded-integrity-monitoring : désactive la surveillance de l'intégrité. Cette fonctionnalité vous permet de surveiller l'intégrité du démarrage de vos instances de VM protégées à l'aide de Stackdriver Monitoring. Pour plus d'informations, consultez la section Surveillance de l'intégrité.

Vous trouverez une liste des indicateurs disponibles dans la documentation de référence de gcloud compute.

Un modèle créé à partir des paramètres de configuration par défaut ressemblera par exemple à ceci :

gcloud compute instance-templates describe example-template
creationTimestamp: '2014-09-10T16:18:32.042-07:00'
description: ''
id: '6057583701980539406'
kind: compute#instanceTemplate
name: example-template
properties:
  canIpForward: false
  disks:
  - autoDelete: true
    boot: true
    initializeParams:
      sourceImage: https://compute.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    kind: compute#attachedDisk
    mode: READ_WRITE
    type: PERSISTENT
  machineType: n1-standard-1
  networkInterfaces:
  - accessConfigs:
    - kind: compute#accessConfig
      name: external-nat
      type: ONE_TO_ONE_NAT
    network: https://compute.googleapis.com/compute/v1/projects/myproject/global/networks/default
  scheduling:
    automaticRestart: true
    onHostMaintenance: MIGRATE
  serviceAccounts:
  - email: default
    scopes:
    - https://www.googleapis.com/auth/devstorage.read_only
selfLink: https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template

API

Dans l'API des modèles d'instances, vous devez définir explicitement tous les champs de configuration requis, comme décrit dans la documentation de instanceTemplates().insert. Ainsi, un modèle d'instance créé avec le minimum de champs requis ressemble à ceci :

{
"name": "example-template",
"properties": {
  "machineType": "n1-standard-4",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

Pour la propriété disks, vous devez renseigner soit la propriété initializeParams pour créer des disques de démarrage persistants pour chaque instance, soit la propriété source pour associer un disque de démarrage persistant existant. Si vous associez un disque de démarrage existant, vous ne pouvez créer qu'une seule instance à partir de votre modèle.

Vous pouvez ajouter jusqu'à 15 disques secondaires non amorçables en utilisant la propriété initializeParams pour chaque disque supplémentaire. Créez des disques supplémentaires avec une image publique ou privée. Pour ajouter des disques vides, ne spécifiez pas la propriété sourceImage. Vous pouvez également inclure les propriétés diskSizeGb, diskType et labels.

Si vous avez choisi une image compatible avec les VM protégées, vous pouvez éventuellement modifier les paramètres de VM protégée de l'instance en renseignant les éléments booléens suivants dans le corps de la requête :

  • enableSecureBoot : active ou désactive le démarrage sécurisé. Le démarrage sécurisé permet de protéger vos instances de VM contre les logiciels malveillants et les rootkits opérant au niveau des secteurs de démarrage et du noyau. Pour plus d'informations, consultez la section Démarrage sécurisé.
  • enableVtpm : active ou désactive le module vTPM (Virtual Trusted Platform Module). Le module vTPM active le démarrage mesuré, ce qui permet de valider l'intégrité du pré-amorçage et du démarrage de la VM. Pour plus d'informations, consultez la section Module vTPM (Virtual Trusted Platform Module).
  • enableIntegrityMonitoring : active ou désactive la surveillance de l'intégrité. La surveillance de l'intégrité vous permet de contrôler et de valider l'intégrité pendant le démarrage de l'environnement d'exécution de vos instances de VM protégées au moyen de rapports Stackdriver Monitoring. Pour plus d'informations, consultez la section Surveillance de l'intégrité.

Pour connaître tous les champs qu'il est possible de définir, reportez-vous à la documentation de référence.

Créer un modèle d'instance basé sur une instance existante

Vous pouvez utiliser les indicateurs --source-instance et --source-instance-zone pour enregistrer la configuration d'une instance de VM existante en tant que modèle d'instance. Vous pouvez éventuellement modifier la définition des disques sources pour l'instance, qui est spécifiée dans le modèle.

Le tableau suivant présente les options permettant de modifier la manière dont les disques sont définis dans le modèle :

Type de disque Options
Disque de démarrage
  • [Par défaut] Utiliser la même image source ou famille d'images sources que celle utilisée pour créer le disque de démarrage dans l'instance source.
  • Utiliser l'URL d'une image (personnalisée ou publique) de votre choix.
Autre(s) disque(s) persistant(s) en lecture/écriture
  • [Par défaut] Utiliser la même image source ou famille d'images sources que celle utilisée pour créer le disque dans l'instance source. Remarque : Si le disque de l'instance source ne possède pas de propriété d'image source ou de famille d'image source, il est inclus dans le modèle en tant que disque vide.
  • Utiliser l'URL d'une image (personnalisée ou publique) de votre choix.
  • Utiliser un disque vide dans le modèle. Lorsque le modèle est utilisé pour créer une instance, ce disque est créé sans formatage. Vous devez formater et installer le disque dans un script de démarrage avant de pouvoir l'utiliser dans une configuration évolutive.
  • Ne pas inclure de disque.
Disque(s) en lecture seule
  • [Par défaut] Inclure le disque en mode lecture seule.
  • Ne pas inclure de disque.
Disque(s) SSD local/locaux
  • [Par défaut] Inclure un disque SSD local vide. Lorsque le modèle est utilisé pour créer une instance, ce disque est créé sans formatage. Vous devez formater et installer le disque dans un script de démarrage avant de pouvoir l'utiliser dans une configuration évolutive.

Pour chaque disque, vous pouvez également remplacer l'attribut auto-delete pour indiquer si le disque doit être supprimé ou non lorsque l'instance associée est elle-même supprimée.

Par défaut, si aucune option de remplacement n'est spécifiée, la configuration du disque dans le modèle correspond à celle de l'instance source.

gcloud

Pour obtenir la liste de tous les indicateurs de commande, consultez la documentation de référence sur gcloud instance-templates create.

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --source-instance=[SOURCE_INSTANCE] \
    --source-instance-zone=[SOURCE_INSTANCE_ZONE] \
    [--configure-disk= \
        device-name=[SOURCE_DISK], \
        instantiate-from=[INSTANTIATE_FROM], \
        auto-delete=[AUTO_DELETE]]

où :

  • [INSTANCE_TEMPLATE_NAME] correspond au nom du modèle à créer.
  • [SOURCE_INSTANCE] correspond au nom de l'instance à utiliser comme référence pour le nouveau modèle.
  • [SOURCE_INSTANCE_ZONE] correspond à la zone hébergeant l'instance source.
  • [SOURCE_DISK] correspond au nom d'un disque d'instance source que vous souhaitez remplacer dans le modèle.
  • [INSTANTIATE_FROM] spécifie si le disque doit être inclus et quelle image utiliser. Les valeurs valides dépendent du type de disque :
    • source-image ou source-image-family (valide uniquement pour les disques de démarrage et autres disques persistants en lecture-écriture).
    • custom-image (valide uniquement pour les disques de démarrage et autres disques persistants en lecture-écriture). Si cette valeur est utilisée, le chemin d'accès ou l'URL de l'image personnalisée doit alors également être spécifié (voir exemple ci-dessous).
    • attach-read-only (valide uniquement pour les disques en lecture seule).
    • blank (valide uniquement pour les disques persistants non amorçables et les disques SSD locaux). Si cette valeur est utilisée, le disque est alors créé sans formatage lorsque le modèle est utilisé pour créer une instance. Vous devez formater et installer le disque dans un script de démarrage avant de pouvoir l'utiliser dans une configuration évolutive.
    • do-not-include (valide uniquement pour les disques persistants non amorçables et les disques en lecture seule).
    • blank (valide uniquement pour les disques persistants non amorçables et les disques en lecture seule).
  • [AUTO_DELETE] spécifie si le disque sera automatiquement supprimé lorsque l'instance elle-même est supprimée. Les valeurs valides sont false, no, true et yes.

À titre d'exemple, la commande suivante crée un modèle d'instance basé sur l'instance my-source-instance en utilisant l'image d'origine pour data-disk-a, par ailleurs configuré pour être supprimé automatiquement (valeur auto-delete définie sur true) et pour remplacer data-disk-b par une image personnalisée.

gcloud compute instance-templates create my-instance-template  \
    --source-instance my-source-instance \
    --configure-disk=device-name=data-disk-a,instantiate-from=source-image, \
      auto-delete=true
    --configure-disk=device-name=data-disk-b,instantiate-from=custom-image, \
      custom-image=projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810

API

Pour obtenir la liste de tous les indicateurs, consultez la documentation de l'API pour InstanceTemplates.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/instanceTemplates
{
  "name": "[INSTANCE_TEMPLATE_NAME]",
  "sourceInstance": "zones/[SOURCE_INSTANCE_ZONE]/instances/[SOURCE_INSTANCE]",
  "sourceInstanceParams": {
    "diskConfigs": [
      {
        "deviceName": "[SOURCE_DISK]",
        "instantiateFrom": "[INSTANTIATE_FROM]"
      }
    ]
  }
}

où :

  • [PROJECT_ID] correspond à l'ID de projet de cette requête.
  • [INSTANCE_TEMPLATE_NAME] correspond au nom du nouveau modèle.
  • [SOURCE_INSTANCE_ZONE] correspond à la zone de l'instance source.
  • [SOURCE_INSTANCE] correspond au nom de l'instance source à utiliser comme modèle pour ce modèle d'instance.
  • [SOURCE_DISK] correspond au nom d'un disque d'instance source que vous souhaitez remplacer dans le modèle.
  • [INSTANTIATE_FROM] spécifie si le disque doit être inclus et quelle image utiliser. Les valeurs valides dépendent du type de disque :
    • source-image ou source-image-family (valide uniquement pour les disques de démarrage et autres disques persistants en lecture-écriture).
    • custom-image (valide uniquement pour les disques de démarrage et autres disques persistants en lecture-écriture). Si cette valeur est utilisée, le chemin d'accès ou l'URL de l'image personnalisée doit alors également être spécifié (voir exemple ci-dessous).
    • attach-read-only (valide uniquement pour les disques en lecture seule).
    • blank (valide uniquement pour les disques persistants non amorçables et les disques SSD locaux). Si cette valeur est utilisée, le disque est alors créé sans formatage lorsque le modèle est utilisé pour créer une instance. Vous devez formater et installer le disque dans un script de démarrage avant de pouvoir l'utiliser dans une configuration évolutive.
    • do-not-include (valide uniquement pour les disques persistants non amorçables et les disques en lecture seule).

L'exemple suivant crée un modèle d'instance basé sur my-source-instance. Dans le modèle d'instance, l'image de data-disk-a est remplacée par projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810.

POST https://compute.googleapis.com/compute/v1/projects/my_project/global/instanceTemplates
{
  "name": "my-instance-template",
  "sourceInstance": "zones/us-central1-a/instances/my-source-instance",
  "sourceInstanceParams":
  {
    "diskConfigs":
    [
      {
        "deviceName": "data-disk-a",
        "instantiateFrom": "custom-image",
        "customImage": "projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810"
      }
    ]
  }
}

Créer un modèle d'instance avec une image de conteneur

Vous pouvez spécifier une image de conteneur dans un modèle d'instance. Par défaut, Compute Engine inclut également dans le modèle une image Container-Optimized OS sur laquelle Docker est installé. Lorsque vous utilisez le modèle pour créer une instance, le conteneur est lancé automatiquement au démarrage de l'instance.

Console

  1. Accédez à la page Modèles d'instance.

    Accéder à la page Modèles d'instance

  2. Cliquez sur Créer un modèle d'instance.
  3. Dans la section Conteneur, cochez la case Déployer une image de conteneur dans cette instance de VM.
  4. Spécifiez l'Image de conteneur à utiliser.
    • Par exemple, vous pouvez spécifier gcr.io/cloud-marketplace/google/nginx1:1.12 pour sélectionner une image de conteneur NGINX 1.12 à partir de Google Cloud Marketplace.
    • Si vous utilisez une image de conteneur de Docker Hub, spécifiez toujours le nom complet de l'image Docker. Par exemple, indiquez le nom d'image suivant pour déployer une image de conteneur Apache : docker.io/httpd:2.4.
  5. Vous pouvez également cliquer sur Options avancées des conteneurs. Pour plus d'informations, consultez la page Configurer des options pour exécuter votre conteneur.
  6. Cliquez sur Créer.

gcloud

Exécutez la commande gcloud compute instance-templates create-with-container :

gcloud compute instance-templates create-with-container [INSTANCE_TEMPLATE_NAME] \
     --container-image [CONTAINER_IMAGE]

où :

  • [INSTANCE_TEMPLATE_NAME] correspond au nom du modèle à créer.
  • [CONTAINER_IMAGE] correspond au nom complet de l'image de conteneur à utiliser.

Par exemple, la commande suivante crée un modèle d'instance appelé nginx-vm. Une instance de VM créée à partir de ce modèle lance et exécute l'image de conteneur gcr.io/cloud-marketplace/google/nginx1:1.12 au démarrage de la VM.

 gcloud compute instance-templates create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:1.12

Vous pouvez également configurer des options pour exécuter votre conteneur.

Créer un modèle d'instance spécifiant un sous-réseau

Les commandes de modèle d'instance possèdent des indicateurs --subnet et --region qui peuvent positionner de nouvelles instances dans le sous-réseau de votre choix. L'indicateur --subnet requiert l'indicateur --region.

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --region [REGION] \
    --subnet [SUBNET_NAME_OR_URL]

où :

  • [INSTANCE_TEMPLATE_NAME] correspond au nom que vous souhaitez donner au modèle d'instance.
  • [REGION] correspond à la région du sous-réseau.
  • [SUBNET_NAME_OR_URL] correspond au nom du sous-réseau ou à son URL. Remarque : Si vous utilisez le nom du sous-réseau, Google trouvera ce sous-réseau dans la région cible (à condition qu'il existe dans cette région). Toutefois, si vous utilisez l'URL de sous-réseau, le modèle d'instance ne pourra être utilisé que pour créer des instances dans la région spécifique associée à cette URL de sous-réseau.

L'exemple suivant génère un modèle appelé template-qa qui crée uniquement des instances dans le sous-réseau subnet-us-qa.

gcloud compute instance-templates create template-qa \
    --region us-central1 \
    --subnet subnet-us-qa

Created [https://compute.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME        MACHINE_TYPE  PREEMPTIBLE CREATION_TIMESTAMP
template-qa n1-standard-1             2015-12-23T20:34:00.791-07:00

En faisant appel à ce modèle pour créer des instances dans le cadre d'un groupe d'instances géré (avec ou sans autoscaling), vous générez automatiquement l'instance dans la région et le sous-réseau spécifiés. Cela vous permet de contrôler le sous-réseau des nouvelles instances créées pour l'équilibrage de charge.

Utiliser des images personnalisées ou publiques dans vos modèles d'instances

Les groupes d'instances gérés étant conçus pour ajouter et supprimer fréquemment des instances, il est utile de créer une image personnalisée et de la spécifier dans le modèle d'instance. Préparez votre image pour intégrer les applications et les paramètres dont vos instances ont besoin. Cela vous évitera d'avoir à configurer manuellement ces éléments sur des instances individuelles du groupe d'instances géré.

Une autre solution consiste à créer un modèle d'instance utilisant une image publique et un script de démarrage pour préparer l'instance après son démarrage. Les images personnalisées sont plus déterministes et démarrent plus rapidement que les instances utilisant des scripts de démarrage. Cependant, les scripts de démarrage sont plus souples et vous facilitent la mise à jour des applications et des paramètres de vos instances.

Mettre à jour un modèle d'instance

Il est impossible de mettre à jour un modèle d'instance existant ou de modifier un modèle d'instance après sa création. Si un modèle d'instance devient obsolète ou si vous devez en modifier la configuration, créez-en un autre.

Étapes suivantes