Créer des images système

Utilisez une image système pour stocker la totalité de la configuration, des métadonnées, des autorisations et des données d'un ou plusieurs disques pour une instance de VM exécutée sur Compute Engine. L'instance de VM que vous utilisez pour créer une image système est appelée instance source.

Pour savoir quand et comment utiliser des images système, consultez la page Images système.

Cette page explique comment créer une image système à partir d'une instance source.

Avant de commencer

Limites et restrictions

  • Vous pouvez partager une image système entre plusieurs projets. Toutefois, notez que les réseaux VPC partagés ne sont pas compatibles.
  • Vous pouvez protéger une image système à l'aide de Cloud Key Management Service (Cloud KMS) ou d'une clé de chiffrement fournie par le client (CSEK). La clé de chiffrement protège le contenu des disques. Cependant, notez que les métadonnées ne sont pas protégées.
  • Si vous utilisez une clé CSEK pour protéger votre image système, une copie intégrale de toutes les données du disque est enregistrée lors de la génération de l'image système. Dans tout autre scénario, les données de disque sont stockées dans des copies différentielles.

Créer une image système à partir d'une instance

Vous pouvez créer des images système à l'aide de Google Cloud Console, de l'outil de ligne de commande gcloud ou de l'API Compute Engine.

Pour créer une image système, vous avez besoin des informations suivantes :

  • Le nom de l'image système que vous souhaitez créer.
  • Le nom de l'instance source.
  • La zone dans laquelle se trouve l'instance source.
  • Description facultative
  • Un emplacement storageLocation facultatif. Si vous ne spécifiez pas d'emplacement, l'emplacement de stockage par défaut est l'emplacement Cloud Storage multirégional de l'instance source.
  • Une clé de chiffrement facultative. Vous pouvez choisir entre une clé gérée par Google, une clé Cloud Key Management Service (Cloud KMS) ou une clé de chiffrement fournie par le client (CSEK). Si aucune clé de chiffrement n'est spécifiée, les images système sont chiffrées à l'aide d'une clé gérée par Google.
  • Si vous souhaitez utiliser une image système pour cloner et répliquer une instance, supprimez les informations de système d'exploitation et d'application propres à l'instance avant de l'utiliser pour générer l'image système. Par exemple, pour les instances de VM Windows, utilisez GCESysprep pour préparer le système à la réplication.

console

  1. Dans Google Cloud Console, accédez à la page Images système.

    Accéder à la page "Images système"

  2. Cliquez sur Créer une image système.
  3. Spécifiez un nom pour votre image système.
  4. (Facultatif) Fournissez une description.
  5. Sélectionnez l'instance de VM source.
  6. (Facultatif) Spécifiez l'emplacement où stocker l'image système. Choisissez entre un stockage multirégional ou régional. Pour en savoir plus sur les emplacements, consultez la section Emplacement de stockage des images système.
  7. (Facultatif) Sélectionnez une méthode de chiffrement.
  8. Cliquez sur Créer.

gcloud

Pour créer une image système à partir d'une instance, utilisez la commande gcloud beta compute machine-images create.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance SOURCE_INSTANCE_NAME

Remplacez l'élément suivant :

  • MACHINE_IMAGE_NAME : nom de l'image système que vous souhaitez créer.
  • SOURCE_INSTANCE_NAME : nom de l'instance source devant servir de base à la création de l'image.

Exemple

Par exemple, vous pouvez utiliser la commande gcloud suivante pour créer une image système appelée my-machine-image à partir d'une instance source nommée my-instance :

gcloud beta compute machine-images create my-machine-image  \
    --source-instance my-instance

Le processus prend quelques minutes. Une fois l'image système créée, vous obtenez un résultat semblable à celui-ci :

Created [https://www.googleapis.com/compute/beta/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

API

Dans l'API, envoyez une requête POST à la méthode machineimages.insert. Dans le corps de la requête, incluez la requête POST suivante :

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL"
}

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet.
  • MACHINE_IMAGE_NAME : nom de l'image système que vous souhaitez créer.
  • SOURCE_INSTANCE_URL : URL complète ou partielle de l'instance source que vous souhaitez utiliser pour créer l'image système. Par exemple, si vous avez une instance source appelée my-instance dans un projet nommé myProject, les URL suivantes sont valides :

    • https://www.googleapis.com/compute/v1/projects/myProject/global/instances/my-instance
    • projects/myProject/global/instances/my-instance
    • global/instances/my-instance

Créer une image système à partir d'un dispositif virtuel

Activer l'API Cloud Build

Dans la plupart des cas, gcloud beta compute machine-images import tente d'accorder ces autorisations au compte de service Cloud Build. Toutefois, vous pouvez accorder manuellement ces autorisations pour vous assurer que les autorisations requises sont en vigueur.

Console

  1. Activez l'API Cloud Build.

    Activer l'API Cloud Build

    Lorsque vous activez l'API Cloud Build depuis la console, Compute Engine accorde au compte de service Cloud Build les rôles suivants, de sorte que le service Cloud Build puisse importer des instances vers Compute Engine :

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    L'outil d'importation utilise également le compte de service Compute Engine par défaut, qui dispose par défaut du rôle IAM d'éditeur de projet. Si ce rôle est retiré, le processus d'importation peut échouer. Pour attribuer de nouveau le rôle au compte de service, consultez la section Accorder l'accès. Pour plus d'informations sur le compte de service par défaut Compute Engine, consultez la section Compte de service Compute Engine par défaut.

gcloud

Pour configurer le service Cloud Build à l'aide de l'outil de ligne de commande gcloud, procédez comme suit :

  1. Activez Cloud Build.

    gcloud services enable cloudbuild.googleapis.com

    L'outil d'importation utilise également le compte de service Compute Engine par défaut, qui dispose par défaut du rôle IAM d'éditeur de projet. Si ce rôle est retiré, le processus d'importation peut échouer. Pour attribuer de nouveau le rôle au compte de service, consultez la section Accorder l'accès. Pour plus d'informations sur le compte de service par défaut Compute Engine, consultez la section Compte de service Compute Engine par défaut.

  2. Ajoutez le rôle compute.admin au compte de service de l'API Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. Ajoutez le rôle iam.serviceAccountUser au compte de service de l'API Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. Ajoutez le rôle iam.serviceAccountTokenCreator au compte de service de l'API Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    Remplacez l'élément suivant :

    • PROJECT_ID : ID de votre projet
    • PROJECT_NUM : le numéro de votre projet

Conditions requises

Créer une image système à partir d'un dispositif virtuel

Vous pouvez créer des images système à partir de dispositifs virtuels à l'aide de l'outil de ligne de commande gcloud ou de l'API Compute Engine.

gcloud

Exécutez la commande gcloud beta compute machine-images import pour créer une image système à partir de dispositifs virtuels.

gcloud beta compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:PATH_TO_VIRTUAL_APPLIANCE_FILE
    --os=OS

Remplacez l'élément suivant :

  • MACHINE_IMAGE_NAME : nom de l'image système que vous souhaitez créer.
  • PATH_TO_VIRTUAL_APPLIANCE_FILE : chemin d'accès à votre fichier OVA ou OVF dans Cloud Storage.
  • OS : système d'exploitation du fichier OVA. Cette option est par défaut facultative, mais elle peut être obligatoire dans certains cas. Nous vous recommandons de la renseigner.

Exemple

Par exemple, vous pouvez utiliser la commande gcloud suivante afin d'utiliser un fichier OVA source nommé my-ova pour créer une image système appelée my-machine-image, qui sera stockée dans le répertoire gs://my-bucket et qui exécute centos-7 :

gcloud beta compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

API

  1. Importez le dispositif virtuel dans Cloud Storage.

  2. Dans l'API, créez une requête POST auprès de l'API Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout":"TIMEOUT",
     "steps":[
       {
         "args":[
           "-machine-image-name=MACHINE_IMAGE_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-client-id=api",
           "-timeout=TIMEOUT"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":"gce-ovf-machine-image-import"
    }
    

    Remplacez l'élément suivant :

    • PROJECT_ID : ID du projet dans lequel vous souhaitez importer le fichier OVA.
    • TIMEOUT : durée maximale d'une compilation, au-delà de laquelle l'opération échoue et affiche un message TIMEOUT. Dans l'API, cette durée doit être spécifiée en secondes. Une valeur de 7200s pour le délai d'expiration devrait fonctionner dans la plupart des scénarios.
    • MACHINE_IMAGE_NAME : nom de l'image système à créer. Exemple : my-machine-image.
    • SOURCE_URI : URI du fichier OVA ou d'un répertoire contenant des packages OVF, hébergé dans Cloud Storage. Exemple : gs://my-bucket/my-instance.ova.
    • OS : système d'exploitation du fichier OVA. Par exemple, ubuntu-1604. Cette option est par défaut facultative, mais elle peut être obligatoire dans certains cas. Nous vous recommandons de le renseigner.

    Pour consulter les autres valeurs args que vous pouvez spécifier, reportez-vous à la section des options facultatives ("optional flags") de la page GitHub dédiée à l'importation OVF dans Compute Engine.

Créer des images système avec des remplacements OVF

CPU et mémoire personnalisés

gcloud

Pour remplacer la configuration du processeur ou de la mémoire spécifiées dans le fichier OVF, suivez les étapes décrites pour l'outil de ligne de commande gcloud permettant de créer une image système à partir d'un dispositif virtuel, mais en spécifiant les options --custom-cpu et --custom-memory.

Exemple

Par exemple, pour créer une image système nommée my-machine-image et dans laquelle les remplacements suivants sont appliqués aux paramètres du fichier OVF :

  • Système d'exploitation : Ubuntu 1404
  • Processeur : 2 CPUs
  • Mémoire : 2048 MB

Exécutez la commande suivante :

gcloud beta compute machine-images import my-machine-image \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

API

Pour remplacer la configuration du processeur ou de la mémoire spécifiées dans le fichier OVF, suivez les étapes décrites pour l'API Compute Engine permettant de créer une image système à partir d'un dispositif virtuel, mais en spécifiant l'option -machine-type. Cette option -machine-type représente un type de machine prédéfini ou personnalisé à utiliser.

Exemple

Par exemple, pour créer une image système nommée my-machine-image et dans laquelle les remplacements suivants sont appliqués aux paramètres du fichier OVF :

  • Système d'exploitation : Ubuntu 1404
  • Processeur : 2 CPUs
  • Mémoire : 2048 MB

Envoyez la requête suivante à l'API Compute Engine. Remplacez PROJECT_ID par votre ID de projet :

{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Réseaux personnalisés

gcloud

Pour configurer un réseau personnalisé, suivez les étapes décrites pour l'outil de ligne de commande gcloud permettant de créer une image système à partir d'un dispositif virtuel, mais en spécifiant l'option --network. Si le réseau est configuré en mode sous-réseau personnalisé, vous devez également spécifier les options --subnet et --zone.

Exemple

Par exemple, pour créer une image système nommée my-machine-image et dans laquelle les remplacements suivants sont appliqués aux paramètres du fichier OVF :

  • Système d'exploitation : Ubuntu 1404
  • Réseau : custom-vpc-network
  • Sous-réseau : company-vpc-us-east1-c
  • Zone : us-east1-c

Exécutez la commande suivante :

gcloud beta compute machine-images import my-machine-image \
    --os ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

API

Pour utiliser un réseau personnalisé, suivez les étapes décrites pour l'API Compute Engine permettant de créer une image système à partir d'un dispositif virtuel, mais en spécifiant l'option -network. Si le réseau est configuré en mode sous-réseau personnalisé, vous devez également spécifier des arguments -subnet et -zone.

Exemple

Par exemple, pour créer une image système nommée my-machine-image et dans laquelle les remplacements suivants sont appliqués aux paramètres du fichier OVF :

  • Système d'exploitation : Ubuntu 1404
  • Réseau : custom-vpc-network
  • Sous-réseau : company-vpc-us-east1-c
  • Zone : us-central1-c

Envoyez la requête suivante à l'API Compute Engine. Remplacez PROJECT_ID par votre ID de projet :

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Étapes suivantes