Se devi spostare i dati del disco di avvio di Compute Engine
all'esterno del tuo progetto Compute Engine, puoi esportare un'immagine del disco di avvio
in Cloud Storage come file tar.gz
. Se devi creare un'immagine del disco permanente da utilizzare per la creazione di nuovi dischi permanenti su Compute Engine, leggi la sezione Creare un'immagine personalizzata.
Puoi eseguire il backup o condividere un'immagine personalizzata esportandola in Cloud Storage. Questo metodo è ideale per condividere singole immagini con progetti che non hanno accesso alle tue immagini. In alternativa, puoi condividere le immagini concedendo il ruolo Utente immagine Compute Engine all'immagine o al progetto che la contiene.
Il seguente diagramma mostra alcuni flussi di lavoro tipici per la creazione e il riutilizzo di un'immagine personalizzata.
Prima di iniziare
- Leggi la pagina Immagini.
- Se nel progetto da cui vuoi esportare l'immagine è definito un criterio per le immagini attendibili, aggiungi
projects/compute-image-import
eprojects/compute-image-tools
all'elenco consentito di publisher. - Per scoprire come soddisfare i requisiti prima di esportare le immagini, consulta Prerequisiti per l'importazione ed esportazione delle immagini VM.
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API. Google Cloud
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione Google Cloud sull'autenticazione.
-
Limitazioni e restrizioni
Le seguenti limitazioni si applicano alla procedura di esportazione delle immagini.
Limitazioni generali
Quando esporti un'immagine, viene creata una sessione sulla macchina da cui stai esportando l'immagine. Questa sessione deve rimanere attiva fino al completamento del processo di esportazione. Se la sessione termina prima del completamento della procedura di esportazione, le risorse effimere come i dischi temporanei, le istanze VM o i bucket di archiviazione potrebbero non essere eliminate. In questo caso, devi eliminare manualmente queste risorse temporanee.
Il processo di esportazione utilizza Cloud Build per esportare un'immagine. Una sessione Cloud Build dura al massimo 24 ore. Se l'immagine è molto grande e sono necessarie più di 24 ore per esportarla, puoi esportarla manualmente.
Limitazioni di Controlli di servizio VPC
Per i progetti protetti con Controlli di servizio VPC, utilizza uno dei seguenti metodi:
- esportare dall'interno dello stesso progetto in cui si trova l'immagine
- esportare l'immagine manualmente
Esportare un'immagine con un solo comando
Esportare un'immagine in Cloud Storage
Puoi esportare le immagini utilizzando la console Google Cloud, Google Cloud CLI o REST.
Nella console Google Cloud, vai alla pagina Immagini.
Fai clic sul nome dell'immagine che vuoi esportare per passare alla pagina dei dettagli dell'immagine. Non puoi esportare le immagini pubbliche fornite da Google. Puoi esportare solo le immagini che hai creato o importato in precedenza.
Nella pagina dei dettagli dell'immagine, fai clic su Esporta per aprire la pagina Esporta immagine.
Nella pagina Esporta immagine, scegli il Formato di esportazione dell'immagine.
Scegli la posizione di Cloud Storage in cui esportare l'immagine facendo clic su Sfoglia.
Scegli una posizione Cloud Storage esistente in cui esportare l'immagine. In alternativa, segui le istruzioni per creare un nuovo bucket Cloud Storage, quindi inserisci un nome per il nuovo bucket Cloud Storage.
Dopo aver scelto un bucket Cloud Storage, scegli un nome file per l'immagine esportata. Puoi utilizzare il nome file predefinito o sceglierne uno personalizzato.
Dopo aver scelto un bucket Cloud Storage e aver inserito un nome per l'immagine, fai clic su Seleziona.
Nella pagina Esporta immagine, fai clic su Esporta. Dopo aver scelto Esporta, la console Google Cloud mostra la Cronologia dell'esportazione delle immagini, dove puoi visualizzare la procedura di esportazione delle immagini. Per ulteriori dettagli sulla procedura di esportazione delle immagini, fai clic sull'ID build cloud per accedere alla pagina Dettagli esportazione immagine, dove puoi visualizzare e scaricare il log dell'esportazione dell'immagine.
Vai alla pagina Spazio di archiviazione per accedere all'immagine esportata.
Il modo migliore per esportare un'immagine in Cloud Storage è utilizzare il comando gcloud compute images export
. Questo comando utilizza
Daisy
per mettere in sequenza i vari passaggi necessari per esportare un'immagine.
Presuppone che tu abbia già
creato un'immagine,
ad esempio con il
comando
gcloud compute images create
.
Utilizzando Google Cloud CLI, esegui:
gcloud compute images export \ --destination-uriDESTINATION_URI \ --imageIMAGE_NAME
Sostituisci quanto segue:
DESTINATION_URI
: l'URI Cloud Storage destinazione del file immagine esportato.IMAGE_NAME
: il nome dell'immagine del disco da esportare.
Per impostazione predefinita, le immagini vengono esportate nel formato Compute Engine,
ovvero un file disk.raw
compresso con tar e gzip. Per esportare le immagini in altri formati supportati dall'utilità di immagini disco QEMU, puoi utilizzare il flag --export-format
. I formati validi includono vmdk
, vhdx
, vpc
, vdi
e qcow2
.
Esempio
Ad esempio, il seguente comando esporta un'immagine denominata my-image
da
my-project
in un bucket Cloud Storage denominato my-bucket
. Per impostazione predefinita, l'immagine viene esportata come disk.raw file
e compressa nel formato file tar.gz
.
gcloud compute images export \ --destination-uri gs://my-bucket/my-image.tar.gz \ --image my-image \ --project my-project
Per i flag, consulta la documentazione di riferimento di gcloud compute images export
.
Invia una richiesta POST
all'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" ] }
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene l'immagine da esportare.SOURCE_IMAGE
: il nome dell'immagine da esportare.IMAGE_FORMAT
: il formato dell'immagine esportata. I formati validi includonovmdk
,vhdx
,vpc
,vdi
eqcow2
.DESTINATION_URI
: la posizione dell'URI Cloud Storage in cui vuoi esportare il file immagine. Ad esempio,gs://my-bucket/my-exported-image.vmdk
.
Per altri valori args
che possono essere forniti, consulta la sezione facoltativa dei flag della pagina GitHub sull'esportazione delle immagini VM.
Risposta di esempio
La seguente risposta di esempio è simile all'output restituito:
{ "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" } }
Esistono due modi per monitorare la compilazione:
- Esegui una richiesta
projects.builds.get
utilizzando il valore
build-id
restituito. - Esamina i log ospitati all'indirizzo
logUrl
fornito.
Esportare un'immagine da un progetto utilizzando un account di servizio Compute Engine personalizzato
Durante l'esportazione di un'immagine, nel progetto viene creata un'istanza di una macchina virtuale (VM) temporanea. Lo strumento di esportazione delle immagini su questa VM temporanea deve essere autenticato.
Un account di servizio è un'identità associata a una VM. È possibile accedere ai token di accesso dell'account di servizio tramite il server dei metadati dell'istanza e utilizzarli per autenticare lo strumento di esportazione delle immagini sulla VM.
Per impostazione predefinita, il processo di esportazione utilizza l'agente di servizio Compute Engine predefinito del progetto. Tuttavia, se l'account di servizio Compute Engine predefinito è disattivato nel tuo progetto o se vuoi utilizzare un account di servizio Compute Engine personalizzato, devi creare un account di servizio e specificarlo per la procedura di esportazione.
Puoi esportare le immagini utilizzando Google Cloud CLI o REST.
Crea un account di servizio e assegna i ruoli minimi. Per ulteriori informazioni sulla creazione degli account di servizio, consulta Creare e gestire gli account di servizio.
All'account di servizio Compute Engine specificato devono essere assegnati almeno i seguenti ruoli:
roles/compute.storageAdmin
roles/storage.objectAdmin
Per ulteriori informazioni, consulta Assegnare i ruoli richiesti all'account di servizio Compute Engine.
Utilizza il comando
gcloud compute images export
per esportare l'immagine.gcloud compute images export \ --destination-uri
DESTINATION_URI \ --imageIMAGE_NAME \ --compute-service-accountSERVICE_ACCOUNT_EMAIL Sostituisci quanto segue:
DESTINATION_URI
: l'URI Cloud Storage destinazione del file immagine esportato.IMAGE_NAME
: il nome dell'immagine del disco da esportare.SERVICE_ACCOUNT_EMAIL
: l'indirizzo email associato all'account di servizio Compute Engine creato nel passaggio precedente.
Esempio
Ad esempio, il seguente comando esporta un'immagine denominata my-image
da
my-project
in un bucket Cloud Storage denominato my-bucket
con un
account di servizio con indirizzo email
image-export-service-account@proj-12345.iam.gserviceaccount.com
. Per impostazione predefinita, l'immagine viene esportata come file disk.raw
e compressa nel formato file 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
Per i flag, consulta la documentazione di riferimento di gcloud compute images export
.
Crea un account di servizio e assegna i ruoli minimi. Per ulteriori informazioni sulla creazione degli account di servizio, consulta Creare e gestire gli account di servizio.
All'account di servizio Compute Engine specificato devono essere assegnati almeno i seguenti ruoli:
roles/compute.storageAdmin
roles/storage.objectAdmin
Per ulteriori informazioni, consulta Assegnare i ruoli richiesti all'account di servizio Compute Engine.
Nell'API, crea una richiesta
POST
all'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" ] }Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene l'immagine da esportare.SOURCE_IMAGE
: il nome dell'immagine da esportare.IMAGE_FORMAT
: il formato dell'immagine esportata. I formati validi includonovmdk
,vhdx
,vpc
,vdi
eqcow2
.DESTINATION_URI
: la posizione dell'URI Cloud Storage in cui vuoi esportare il file immagine. Ad esempio,gs://my-bucket/my-exported-image.vmdk
.SERVICE_ACCOUNT_EMAIL
: l'indirizzo email associato all'account di servizio Compute Engine creato nel passaggio precedente.
Per altri valori args
che possono essere forniti, consulta la sezione facoltativa dei flag della pagina GitHub sull'esportazione delle immagini VM.
Esportare un'immagine utilizzando la rete VPC condivisa
Prima di esportare un'immagine che utilizza un VPC condiviso, devi
aggiungere il ruolo compute.networkUser
all'account di servizio Cloud Build.
Per ulteriori informazioni, consulta Concedi i ruoli richiesti all'account di servizio Cloud Build.
Puoi esportare l'immagine utilizzando Google Cloud CLI o REST.
Utilizza il comando gcloud compute images export
per esportare l'immagine.
gcloud compute images export \ --imageIMAGE_NAME \ --destination-uriDESTINATION_URI \ --projectPROJECT_ID \ --networkNETWORK \ --subnetSUBNET \ --zoneZONE
Sostituisci quanto segue:
IMAGE_NAME
: il nome dell'immagine da esportare.DESTINATION_URI
: la posizione dell'URI Cloud Storage in cui vuoi esportare il file immagine.PROJECT_ID
: ID del progetto in cui si trova l'immagine.NETWORK
: il percorso completo di una rete VPC condivisa. Ad esempio,projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
.SUBNET
: facoltativo. Il percorso completo di una subnet VPC condivisa. Ad esempio,projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
.La specifica di questa modalità dipende dalla modalità di rete VPC.
- Se la rete VPC utilizza la modalità precedente, non specificare una subnet.
- Se la rete VPC utilizza la modalità automatica, la specifica della subnet è facoltativa.
- Se la rete VPC utilizza la modalità personalizzata, questo campo deve essere specificato.
ZONE
: facoltativo. La zona da utilizzare per l'esportazione. Questa zona deve corrispondere alla regione della subnet. Ad esempio, seSUBNET
si trova nella regioneus-west1
, la zona di esportazione deve essere una delle seguenti:us-west1-a
,us-west1-b
ous-west1-c
.Se hai specificato un
SUBNET
, devi specificare anche la zona.
Ad esempio, il seguente comando esporta un'immagine denominata example-image
da
my-project
in un bucket Cloud Storage denominato my-bucket
. In questo
esempio, la rete Virtual Private Cloud (my-shared-vp
) utilizza una sottorete personalizzata
(my-custom-subnet
).
Per impostazione predefinita, l'immagine viene esportata come file disk.raw
e compressa nel
formato file tar.gz
.
Comando di esempio
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
Aggiungi l'immagine a Cloud Storage.
Nell'API, crea una richiesta
POST
all'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" ] }Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene l'immagine da esportare.SOURCE_IMAGE
: il nome dell'immagine da esportare.IMAGE_FORMAT
: il formato dell'immagine esportata. I formati validi includonovmdk
,vhdx
,vpc
,vdi
eqcow2
.DESTINATION_URI
: la posizione dell'URI Cloud Storage in cui vuoi esportare il file immagine. Ad esempio,gs://my-bucket/my-exported-image.vmdk
.NETWORK
: il percorso completo di una rete VPC condivisa. Ad esempio,projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
.SUBNET
: il percorso completo di una subnet VPC condivisa. Ad esempio,projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
.La specifica di questa modalità dipende dalla modalità di rete VPC.
- Se la rete VPC utilizza la modalità precedente, non specificare una subnet.
- Se la rete VPC utilizza la modalità automatica, la specifica della subnet è facoltativa.
- Se la rete VPC utilizza la modalità personalizzata, questo campo deve essere specificato.
ZONE
: la zona da utilizzare per l'esportazione. Questa zona deve corrispondere alla regione della subnet. Ad esempio, seSUBNET
si trova nella regioneus-west1
, la zona di esportazione deve essere una delle seguenti:us-west1-a
,us-west1-b
ous-west1-c
.Nella maggior parte dei casi, la specifica di una zona è facoltativa. Se è specificato
SUBNET
, è necessario specificare anche la zona.
Per altri valori
args
che possono essere forniti, consulta la sezione facoltativa dei flag della pagina GitHub sull'esportazione delle immagini VM.
Creare ed esportare un'immagine manualmente
Se i comandi gcloud compute images create
e gcloud compute images export
non soddisfano i tuoi requisiti, puoi creare ed esportare un'immagine manualmente da un'istanza Compute Engine. Questo processo prevede passaggi distinti per creare prima un'immagine ed esportarla poi.
Nell'esempio seguente, tieni presente che il disco creato si chiama image-disk.
Per creare ed esportare un'immagine:
(Facoltativo) Arresta l'istanza a cui è collegato il disco prima di creare lo snapshot. L'interruzione dell'istanza garantisce l'integrità dei contenuti del disco nello snapshot.
Crea uno snapshot del disco. Assegna un nome allo snapshot
image-snapshot
.gcloud compute disks snapshot
DISK_NAME \ --snapshot-names image-snapshotSostituisci
DISK_NAME
con il nome del disco che vuoi utilizzare per creare lo snapshot. Puoi trovare il nome del disco elencando i dischi.Utilizza lo snapshot
image-snapshot
per creare un nuovo disco denominatoimage-disk
eseguendo il seguente comando:gcloud compute disks create image-disk \ --source-snapshot image-snapshot
Crea un disco temporaneo denominato
temporary-disk
per contenere il filetar
e specifica che ilSIZE
del disco sia almeno il 50% più grande del disco immagine.In seguito, puoi scollegare ed eliminare il disco.
gcloud compute disks create temporary-disk \ --size
SIZE dove
SIZE
è la dimensione, in gigabyte o terabyte, del disco temporaneo. Ad esempio, specifica100GB
per creare un disco da 100 gigabyte.Crea un'istanza e attiva l'ambito
storage-rw
. Inoltre, collegaimage-disk
etemporary-disk
all'istanza come dischi secondari con attributidevice-name
specifici. SostituisciVM_NAME
con il nome dell'istanza da creare.gcloud compute instances create
VM_NAME \ --scopes storage-rw \ --disk name=image-disk,device-name=image-disk \ --disk name=temporary-disk,device-name=temporary-diskTieni presente che stai passando gli ambiti dell'account di servizio in modo da poter caricare il file su Cloud Storage nei passaggi successivi.
Se necessario, esamina i dettagli sull'avvio di una nuova istanza.
Connettiti all'istanza. Sostituisci
VM_NAME
con il nome dell'istanza a cui connetterti.gcloud compute ssh
VM_NAME Formatta e monta il disco temporaneo. La formattazione del disco elimina i contenuti del disco temporaneo.
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
(Facoltativo) Monta il disco immagine e apporta modifiche aggiuntive prima di creare il file
tar
. Ad esempio, potresti eliminare eventuali file esistenti dalla directory/home
se non vuoi che vengano inclusi nell'immagine. Monta le partizioni del disco da modificare, modifica i file sul disco da modificare e, al termine, smonta il disco.Crea una directory in cui puoi montare il disco o la partizione.
sudo mkdir /mnt/image-disk
Utilizza il comando
ls
per determinare quale disco o partizione del disco devi montare.ls /dev/disk/by-id/
Il comando stampa un elenco di ID e partizioni dei dischi. Ad esempio, il seguente disco ha una tabella delle partizioni con una partizione. L'ID
google-image-disk
fa riferimento al disco completo da cui vuoi creare un'immagine. L'IDgoogle-image-disk-part1
fa riferimento alla prima partizione su questo disco. Monta la partizione se devi apportare modifiche al disco, quindi crea l'immagine dal disco completo.google-image-disk google-image-disk-part1
Monta il disco o la partizione. Se il disco ha una tabella delle partizioni, monta le singole partizioni del disco. Ad esempio, mount
google-image-disk-part1
.sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
In alternativa, se il disco è formattato in raw senza tabella delle partizioni, monta il disco
google-image-disk
completo.sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
Modifica i file nella directory
/mnt/image-disk
per configurare i file sul disco. Ad esempio, potresti rimuovere il file/mnt/image-disk/home/[USER]/.ssh/authorized_keys
per proteggere la condivisione delle tue chiavi SSH.Una volta terminate le modifiche ai file, smonta il disco.
sudo umount /mnt/image-disk/
Crea un file
tar
della tua immagine.Al termine della personalizzazione dei file sul disco immagine, crea un file del disco grezzo sul disco temporaneo. Il nome dell'immagine del disco non elaborato deve essere "disk.raw":
sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
Quindi crea il file
tar.gz
:cd /mnt/tmp
sudo tar czvf myimage.tar.gz disk.raw
Questo comando crea un'immagine dell'istanza nella seguente posizione:
/mnt/tmp/myimage.tar.gz
Carica l'immagine in Cloud Storage.
Per caricare il file
tar
su Cloud Storage, utilizza Google Cloud CLI, preinstallato sull'istanza.Crea un bucket utilizzando gcloud CLI.
Assicurati di leggere le linee guida sulla denominazione di bucket e oggetti prima di creare il bucket. Quindi, crea il bucket utilizzando il comando seguente. Sostituisci
BUCKET_NAME
con il nome del bucket da creare.me@example-instance:~$ gcloud storage buckets create gs://
BUCKET_NAME Copia il file nel nuovo bucket. Sostituisci
BUCKET_NAME
con il nome del bucket in cui copiare il file.me@example-instance:~$ gcloud storage cp /mnt/tmp/myimage.tar.gz gs://
BUCKET_NAME
Hai esportato il file in Cloud Storage. Ora puoi condividere
l'immagine con altre persone o utilizzare il file tar
per aggiungere una nuova immagine a un
progetto della console Google Cloud.
Passaggi successivi
- Condividere le immagini utilizzando il ruolo utente immagine.
- Scopri i metodi di importazione disponibili per Compute Engine.