Si vous devez transférer les données du disque de démarrage Compute Engine en dehors de votre projet Compute Engine, vous pouvez exporter une image de disque de démarrage vers Cloud Storage sous la forme d'un fichier tar.gz
. Si vous avez besoin de créer une image de disque persistant à utiliser lorsque vous créez des disques persistants sur Compute Engine, consultez la section Créer une image personnalisée.
Vous pouvez sauvegarder ou partager une image personnalisée en l'exportant vers Cloud Storage. Cette méthode est idéale pour partager des images individuelles avec des projets qui n'ont pas accès à vos images. Vous pouvez également autoriser le partage d'une image en attribuant à une ou plusieurs personnes le rôle d'utilisateur d'images Compute Engine sur une image spécifique ou sur le projet contenant l'image.
Le diagramme ci-dessous présente certains workflows types pour la création et la réutilisation d'une image personnalisée.
Avant de commencer
- Si vous souhaitez utiliser les exemples de ligne de commande de ce guide, procédez comme suit :
- Installez la dernière version de Google Cloud CLI ou appliquez la mise à jour correspondante.
- Définissez une région et une zone par défaut.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Consultez la page Images.
- Si le projet à partir duquel vous souhaitez exporter l'image possède un règlement relatif aux images de confiance, ajoutez
projects/compute-image-import
etprojects/compute-image-tools
à la liste des éditeurs autorisés. - Pour savoir comment satisfaire les exigences avant d'exporter des images, consultez la section Conditions préalables à l'importation et à l'exportation d'images de VM.
Limites et restrictions
Pour les projets protégés avec VPC Service Controls, utilisez l'une des méthodes suivantes :
- Exporter depuis le projet où se trouve l'image
- Exporter l'image manuellement
Exporter une image à l'aide d'une seule commande
Exporter une image vers Cloud Storage
Vous pouvez exporter vos images à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API Cloud Build
Console
Dans la console Google Cloud, accédez à la page Images.
Cliquez sur le nom de l'image que vous souhaitez exporter pour accéder à la page des détails de l'image. Vous ne pouvez pas exporter d'images publiques fournies par Google. Vous ne pouvez exporter que les images que vous avez précédemment créées ou importées.
Sur la page des détails de l'image, cliquez sur Exporter pour ouvrir la page Exporter l'image.
Sur la page Exporter l'image, choisissez le format d'exportation de l'image.
Choisissez l'emplacement Cloud Storage vers lequel vous souhaitez exporter votre image en cliquant sur Parcourir.
Choisissez un emplacement Cloud Storage existant pour exporter votre image. Vous pouvez également suivre les instructions de création d'un bucket Cloud Storage, puis nommer le nouveau bucket Cloud Storage.
Après avoir sélectionné un emplacement Cloud Storage, choisissez un nom de fichier pour l'image exportée. Vous pouvez utiliser le nom de fichier par défaut ou choisir votre propre nom de fichier.
Après avoir sélectionné un emplacement Cloud Storage et saisi un nom de fichier pour l'image, cliquez sur Sélectionner.
Sur la page Exporter l'image, cliquez sur Exporter. Lorsque vous sélectionnez Exporter, la console Google Cloud affiche l'historique des exportations d'images. Il vous permet de consulter le processus d'exportation d'images. Pour en savoir plus sur le processus d'exportation d'images, cliquez sur l'ID Cloud Build pour accéder à la page Détails sur les exportations d'images. Elle vous permet d'afficher et de télécharger le journal des exportations d'images.
Pour accéder à l'image exportée, consultez la page Stockage.
gcloud
Le moyen le plus simple d'exporter une image vers Cloud Storage consiste à utiliser la commande gcloud compute images export
. Cette commande exploite l'outil Daisy, qui permet d'exécuter à la suite les différentes étapes nécessaires à l'exportation d'une image.
Nous partons ici du principe que vous avez déjà créé une image, par exemple à l'aide de la commande gcloud compute images create
.
À l'aide de Google Cloud CLI, exécutez la commande suivante :
gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME
Remplacez les éléments suivants :
DESTINATION_URI
: destination de l'URI Cloud Storage du fichier image exporté.IMAGE_NAME
: nom de l'image disque à exporter.
Par défaut, les images sont exportées au format Compute Engine, qui est un fichier disk.raw
compressé aux formats TAR et GZIP. Pour exporter des images dans d'autres formats compatibles avec l'utilitaire d'image disque QEMU, vous pouvez utiliser l'option --export-format
. Les formats valides sont vmdk
, vhdx
, vpc
, vdi
et qcow2
.
Exemple
Par exemple, la commande suivante permet d'exporter une image appelée my-image
depuis le projet my-project
vers un bucket Cloud Storage appelé my-bucket
. Par défaut, l'image est exportée en tant que disk.raw file
et compressée au format de fichier tar.gz
.
gcloud compute images export \ --destination-uri gs://my-bucket/my-image.tar.gz \ --image my-image \ --project my-project
Pour en savoir plus sur les indicateurs, consultez la documentation de référence de gcloud compute images export
.
API
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": "7200s", "steps":[ { "args":[ "-timeout=7000s", "-source_image=SOURCE_IMAGE", "-client_id=api", "-format=IMAGE_FORMAT", "-destination_uri=DESTINATION_URI" ], "name":"gcr.io/compute-image-tools/gce_vm_image_export:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":[ "gce-daisy", "gce-daisy-image-export" ] }
Remplacez l'élément suivant :
PROJECT_ID
: ID du projet contenant l'image que vous souhaitez exporter.SOURCE_IMAGE
: nom de l'image à exporter.IMAGE_FORMAT
: format de l'image exportée. Les formats valides sontvmdk
,vhdx
,vpc
,vdi
etqcow2
.DESTINATION_URI
: emplacement d'URL Cloud Storage vers lequel vous souhaitez exporter le fichier image. Exemple :gs://my-bucket/my-exported-image.vmdk
.
Pour connaître les autres valeurs args
que vous pouvez spécifier, consultez la section "Optional flags" (Options facultatives) de la page GitHub dédiée à l'exportation d'images de VM.
Exemple de réponse
L'exemple de réponse suivant ressemble au résultat renvoyé :
{ "name": "operations/build/myproject-12345/operation-1578608233418", "metadata": { "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata", "build": { "id": "3a2055bc-ccbd-4101-9434-d376b88b8940", "status": "QUEUED", "createTime": "2019-10-02T18:59:13.393492020Z", "steps": [ { "name": "gcr.io/compute-image-tools/gce_vm_image_export:release", "env": [ "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940" ], "args": [ "-timeout=7056s", "-source_image=my-image", "-client_id=api", "-format=vmdk", "-destination_uri=gs://my-bucket/my-exported-image.vmdk" ] } ], "timeout": "7200s", "projectId": "myproject-12345", "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com", "options": { "logging": "LEGACY" }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456" } }
Vous pouvez surveiller votre compilation de deux manières différentes :
- Exécutez une requête projects.builds.get en utilisant la valeur
build-id
renvoyée. - Examinez les journaux hébergés à l'adresse
logUrl
fournie.
Exporter une image d'un projet à l'aide d'un compte de service Compute Engine personnalisé
Lors d'une exportation d'image, une instance de machine virtuelle (VM) temporaire est créée dans votre projet. L'outil d'exportation d'image de cette VM temporaire doit être authentifié.
Un compte de service est une identité associée à une VM. Les jetons d'accès au compte de service sont accessibles via le serveur de métadonnées d'instance et permettent d'authentifier l'outil d'exportation d'images sur la VM.
Par défaut, le processus d'exportation utilise l'agent de service Compute Engine par défaut du projet. Toutefois, si le compte de service Compute Engine par défaut est désactivé dans votre projet ou si vous souhaitez utiliser un compte de service Compute Engine personnalisé, vous devez créer un compte de service et le spécifier pour le processus d'exportation.
Vous pouvez exporter vos images à l'aide de Google Cloud CLI ou de l'API Cloud Build.
gcloud
Créez un compte de service et attribuez les rôles minimaux. Pour en savoir plus sur la création des comptes de service, consultez la page Créer et gérer des comptes de service.
Au minimum, le compte de service Compute Engine spécifié doit avoir les rôles suivants :
roles/compute.storageAdmin
roles/storage.objectAdmin
Pour en savoir plus, consultez la section Attribuer les rôles requis au compte de service Compute Engine.
Exécutez la commande
gcloud compute images export
pour exporter l'image.gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME \ --compute-service-account SERVICE_ACCOUNT_EMAIL
Remplacez les éléments suivants :
DESTINATION_URI
: destination de l'URI Cloud Storage du fichier image exporté.IMAGE_NAME
: nom de l'image disque à exporter.SERVICE_ACCOUNT_EMAIL
: adresse e-mail associée au compte de service Compute Engine créé à l'étape précédente.
Exemple
Par exemple, la commande suivante permet d'exporter une image appelée my-image
depuis le projet my-project
vers un bucket Cloud Storage nommé my-bucket
avec un compte de service dont l'adresse e-mail est image-export-service-account@proj-12345.iam.gserviceaccount.com
. Par défaut, l'image est exportée en tant que fichier disk.raw
et compressée au format tar.gz
.
gcloud compute images export \ --destination-uri gs://my-bucket/my-image.tar.gz \ --image my-image \ --project my-project \ --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
Pour en savoir plus sur les indicateurs, consultez la documentation de référence de gcloud compute images export
.
API
Créez un compte de service et attribuez les rôles minimaux. Pour en savoir plus sur la création des comptes de service, consultez la page Créer et gérer des comptes de service.
Au minimum, le compte de service Compute Engine spécifié doit avoir les rôles suivants :
roles/compute.storageAdmin
roles/storage.objectAdmin
Pour en savoir plus, consultez la section Attribuer les rôles requis au compte de service Compute Engine.
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": "7200s", "steps":[ { "args":[ "-timeout=7000s", "-source_image=SOURCE_IMAGE", "-client_id=api", "-format=IMAGE_FORMAT", "-destination_uri=DESTINATION_URI", "-compute_service_account=SERVICE_ACCOUNT_EMAIL" ], "name":"gcr.io/compute-image-tools/gce_vm_image_export:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":[ "gce-daisy", "gce-daisy-image-export" ] }
Remplacez l'élément suivant :
PROJECT_ID
: ID du projet contenant l'image que vous souhaitez exporter.SOURCE_IMAGE
: nom de l'image à exporter.IMAGE_FORMAT
: format de l'image exportée. Les formats valides sontvmdk
,vhdx
,vpc
,vdi
etqcow2
.DESTINATION_URI
: emplacement d'URL Cloud Storage vers lequel vous souhaitez exporter le fichier image. Exemple :gs://my-bucket/my-exported-image.vmdk
.SERVICE_ACCOUNT_EMAIL
: adresse e-mail associée au compte de service Compute Engine créé à l'étape précédente.
Pour connaître les autres valeurs args
que vous pouvez spécifier, consultez la section "Optional flags" (Options facultatives) de la page GitHub dédiée à l'exportation d'images de VM.
Exporter une image à l'aide d'un VPC partagé
Avant d'exporter une image qui utilise un VPC partagé, vous devez ajouter le rôle compute.networkUser
au compte de service Cloud Build.
Pour plus d'informations, consultez la section Attribuer les rôles requis au compte de service Cloud Build.
Vous pouvez exporter votre image à l'aide de Google Cloud CLI ou de l'API Cloud Build.
gcloud
Exécutez la commande gcloud compute images export
pour exporter votre image.
gcloud compute images export \ --image IMAGE_NAME \ --destination-uri DESTINATION_URI \ --project PROJECT_ID \ --network NETWORK \ [--subnet SUBNET \] [--zone ZONE]
Remplacez les éléments suivants :
IMAGE_NAME
: nom de l'image à exporter.DESTINATION_URI
: emplacement d'URL Cloud Storage vers lequel vous souhaitez exporter le fichier image.PROJECT_ID
: ID du projet dans lequel se trouve l'image.NETWORK
: chemin d'accès complet à un réseau VPC partagé. Exemple :projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
.SUBNET
: chemin d'accès complet à un sous-réseau VPC partagé. Exemple :projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
.La spécification de ce mode dépend du mode de réseau VPC.
- Si le réseau VPC utilise l'ancien mode, ne spécifiez pas de sous-réseau.
- Si le réseau VPC utilise le mode automatique, la spécification du sous-réseau est facultative.
- Si le réseau VPC utilise le mode personnalisé, ce champ doit être spécifié.
ZONE
: zone à utiliser pour l'exportation. Cette zone doit correspondre à la région du sous-réseau. Par exemple, si la régionSUBNET
se trouve dans la régionus-west1
, la zone d'exportation doit être l'une des suivantes :us-west1-a
,us-west1-b
ouus-west1-c
.Dans la plupart des cas, la spécification d'une zone est facultative. Si un sous-réseau (
SUBNET
) est spécifié, la zone doit être spécifiée.
Par exemple, la commande suivante permet d'exporter une image appelée example-image
depuis le projet my-project
vers un bucket Cloud Storage appelé my-bucket
. Dans cet exemple, le réseau cloud privé virtuel (my-shared-vp
) utilise un sous-réseau personnalisé (my-custom-subnet
). Par défaut, l'image est exportée en tant que fichier disk.raw
et compressée au format de fichier tar.gz
.
Exemple de commande
gcloud compute images export \ --image example-image \ --destination-uri gs://my-bucket/my-image.tar.gz \ --project my-project \ --network projects/my-vpc-project/global/networks/my-shared-vpc \ --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-custom-subnet \ --zone us-west1-c
API
Ajoutez l'image dans Cloud Storage.
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": "7200s", "steps":[ { "args":[ "-timeout=7000s", "-source_image=SOURCE_IMAGE", "-client_id=api", "-format=IMAGE_FORMAT", "-destination_uri=DESTINATION_URI", "-network=NETWORK", "-subnet=SUBNET", "-zone=ZONE" ], "name":"gcr.io/compute-image-tools/gce_vm_image_export:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":[ "gce-daisy", "gce-daisy-image-export" ] }
Remplacez l'élément suivant :
PROJECT_ID
: ID du projet contenant l'image que vous souhaitez exporter.SOURCE_IMAGE
: nom de l'image à exporter.IMAGE_FORMAT
: format de l'image exportée. Les formats valides sontvmdk
,vhdx
,vpc
,vdi
etqcow2
.DESTINATION_URI
: emplacement d'URL Cloud Storage vers lequel vous souhaitez exporter le fichier image. Exemple :gs://my-bucket/my-exported-image.vmdk
.NETWORK
: chemin d'accès complet à un réseau VPC partagé. Exemple :projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
.SUBNET
: chemin d'accès complet à un sous-réseau VPC partagé. Exemple :projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
.La spécification de ce mode dépend du mode de réseau VPC.
- Si le réseau VPC utilise l'ancien mode, ne spécifiez pas de sous-réseau.
- Si le réseau VPC utilise le mode automatique, la spécification du sous-réseau est facultative.
- Si le réseau VPC utilise le mode personnalisé, ce champ doit être spécifié.
ZONE
: zone à utiliser pour l'exportation. Cette zone doit correspondre à la région du sous-réseau. Par exemple, si la régionSUBNET
se trouve dans la régionus-west1
, la zone d'exportation doit être l'une des suivantes :us-west1-a
,us-west1-b
ouus-west1-c
.Dans la plupart des cas, la spécification d'une zone est facultative. Si un sous-réseau (
SUBNET
) est spécifié, la zone doit être spécifiée.
Pour connaître les autres valeurs
args
que vous pouvez spécifier, consultez la section "Optional flags" (Options facultatives) de la page GitHub dédiée à l'exportation d'images de VM.
Créer et exporter une image manuellement
Si les commandes gcloud compute images create
et gcloud compute images export
ne répondent pas à vos exigences, vous pouvez créer et exporter une image manuellement à partir d'une instance Compute Engine. Ce processus comporte des étapes distinctes permettant de créer, puis d'exporter une image.
Dans l'exemple suivant, notez que le disque créé est appelé image-disk.
Pour créer et exporter une image, effectuez les étapes suivantes :
Facultatif : Arrêtez l'instance associée au disque avant de créer l'instantané. Cette opération facultative permet d'assurer l'intégrité du contenu du disque au sein de l'instantané. Remplacez
DISK_NAME
par le nom du disque que vous souhaitez utiliser pour créer l'instantané.Créez un instantané du disque. Nommez-le
image-snapshot
.gcloud compute disks snapshot DISK_NAME \ --snapshot-names image-snapshot
Exécutez la commande suivante pour créer un disque appelé
image-disk
à partir de l'instantanéimage-snapshot
:gcloud compute disks create image-disk \ --source-snapshot image-snapshot
Créez un disque temporaire nommé
temporary-disk
pour stocker votre fichiertar
. Spécifiez le paramètreSIZE
et assurez-vous que le disque temporaire soit au moins 50 % plus volumineux que le disque image-disk.Vous pourrez dissocier et supprimer ce disque temporaire plus tard.
gcloud compute disks create temporary-disk \ --size SIZE
où
SIZE
correspond à la taille, en gigaoctets ou en téraoctets, du disque temporaire. Par exemple, spécifiez100GB
pour créer un disque de 100 Go.Créez une instance et activez le champ d'application
storage-rw
sur celle-ci. Associez égalementimage-disk
ettemporary-disk
à l'instance en tant que disques secondaires avec des attributsdevice-name
spécifiques. RemplacezVM_NAME
par le nom de l'instance à créer.gcloud compute instances create VM_NAME \ --scopes storage-rw \ --disk name=image-disk,device-name=image-disk \ --disk name=temporary-disk,device-name=temporary-disk
Notez que l'envoi de champs d'application de compte de service vous permettra d'importer votre fichier dans Cloud Storage par la suite.
Étudiez plus en détail comment démarrer une nouvelle instance si nécessaire.
Connectez-vous à l'instance. Remplacez
VM_NAME
par le nom de l'instance à laquelle vous souhaitez vous connecter.gcloud compute ssh VM_NAME
Formatez et installez le disque temporaire. Le formatage permet de supprimer le contenu du disque temporaire.
sudo mkdir /mnt/tmp
sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
Facultatif : Installez le disque "image-disk" et apportez des modifications supplémentaires avant de créer le fichier
tar
. Par exemple, vous pouvez supprimer tous les fichiers du répertoire/home
si vous ne souhaitez pas qu'ils soient présents dans votre image. Installez les partitions de disque dont vous avez besoin, modifiez les fichiers concernés sur le disque en question, puis désinstallez le disque une fois l'opération terminée.Créez un répertoire dans lequel vous pourrez installer votre disque ou votre partition.
sudo mkdir /mnt/image-disk
Identifiez le disque ou la partition à installer à l'aide de la commande
ls
.ls /dev/disk/by-id/
La commande affiche une liste d'ID et de partitions de disque. Par exemple, le disque suivant possède une table de partition ne contenant qu'une partition. L'ID
google-image-disk
pointe vers le disque complet à partir duquel vous souhaitez créer une image. L'IDgoogle-image-disk-part1
pointe vers la première partition de ce disque. Installez la partition si vous avez besoin d'apporter des modifications au disque, puis créez l'image à partir du disque complet.google-image-disk google-image-disk-part1
Installez le disque ou la partition. Si votre disque possède une table de partition, installez les partitions individuelles de votre disque. Par exemple, installez
google-image-disk-part1
.sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
Si votre disque est au format RAW et ne possède pas de table de partition, installez le disque
google-image-disk
complet.sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
Modifiez les fichiers du répertoire
/mnt/image-disk
pour configurer les fichiers sur le disque. Vous pouvez par exemple supprimer le fichier/mnt/image-disk/home/[USER]/.ssh/authorized_keys
afin d'empêcher le partage de vos clés SSH.Une fois les fichiers modifiés, désinstallez le disque.
sudo umount /mnt/image-disk/
Créez un fichier
tar
de votre image.Lorsque vous avez fini de personnaliser les fichiers du disque "image-disk", créez un fichier de disque RAW sur votre disque temporaire. Le nom de l'image du disque RAW doit être "disk.raw" :
sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
Créez ensuite le fichier
tar.gz
:cd /mnt/tmp
sudo tar czvf myimage.tar.gz disk.raw
Cette commande permet de créer une image de l'instance à l'emplacement suivant :
/mnt/tmp/myimage.tar.gz
Importez l'image dans Cloud Storage.
Pour importer le fichier
tar
dans Cloud Storage, utilisez l'outil de ligne de commande gsutil préinstallé sur votre instance.Créez un bucket à l'aide de
gsutil
.Avant de créer votre bucket, vérifiez les consignes d'attribution de noms pour les buckets et les objets. Créez ensuite votre bucket à l'aide de la commande suivante : Remplacez
BUCKET_NAME
par le nom du bucket à créer.me@example-instance:~$ gsutil mb gs://BUCKET_NAME
Copiez votre fichier dans votre nouveau bucket. Remplacez
BUCKET_NAME
par le nom du bucket dans lequel copier le fichier.me@example-instance:~$ gsutil cp /mnt/tmp/myimage.tar.gz gs://BUCKET_NAME
Vous avez exporté votre fichier vers Cloud Storage. Vous pouvez maintenant partager l'image avec d'autres personnes ou utiliser le fichier tar
pour ajouter une nouvelle image à un projet de la console Google Cloud.
Étapes suivantes
- Partagez des images à l'aide du rôle d'utilisateur d'images.
- Découvrez les méthodes d'importation disponibles pour Compute Engine.