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 e l'esportazione delle immagini VM.
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi 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:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- esportare dall'interno dello stesso progetto in cui si trova l'immagine
- esportare l'immagine manualmente
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.
DESTINATION_URI
: l'URI Cloud Storage destinazione del file immagine esportato.IMAGE_NAME
: il nome dell'immagine del disco da esportare.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
.- Esegui una richiesta
projects.builds.get
utilizzando il valore
build-id
restituito. - Esamina i log ospitati all'indirizzo
logUrl
fornito. 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 \ --image IMAGE_NAME \ --compute-service-account SERVICE_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.
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.
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.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.(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-snapshot
Sostituisci
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-disk
Tieni 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 del disco. Ad esempio, il disco seguente ha una tabella di partizione 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
- Condividere le immagini utilizzando il ruolo utente immagine.
- Scopri i metodi di importazione disponibili per Compute Engine.
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 sull'autenticazione di Google Cloud.
Limitazioni e restrizioni
Al processo di esportazione delle immagini si applicano le seguenti limitazioni.
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 un'immagine con un solo comando
Esportare un'immagine in Cloud Storage
Puoi esportare le immagini utilizzando la console Google Cloud, la CLI Google Cloud o REST.
Console
gcloud
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 comandogcloud compute images create
.Utilizzando Google Cloud CLI, esegui:
gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME
Sostituisci quanto segue:
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 includonovmdk
,vhdx
,vpc
,vdi
eqcow2
.Esempio
Ad esempio, il seguente comando esporta un'immagine denominata
my-image
damy-project
in un bucket Cloud Storage denominatomy-bucket
. Per impostazione predefinita, l'immagine viene esportata comedisk.raw file
e compressa nel formato filetar.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
.REST
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:
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:
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.
gcloud
Esempio
Ad esempio, il seguente comando esporta un'immagine denominata
my-image
damy-project
in un bucket Cloud Storage denominatomy-bucket
con un account di servizio con indirizzo emailimage-export-service-account@proj-12345.iam.gserviceaccount.com
. Per impostazione predefinita, l'immagine viene esportata come filedisk.raw
e compressa nel formato filetar.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
.REST
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 condiviso
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.
gcloud
Utilizza il comando
gcloud compute images export
per esportare l'immagine.gcloud compute images export \ --image IMAGE_NAME \ --destination-uri DESTINATION_URI \ --project PROJECT_ID \ --network NETWORK \ --subnet SUBNET \ --zone ZONE
Sostituisci quanto segue:
Ad esempio, il seguente comando esporta un'immagine denominata
example-image
damy-project
in un bucket Cloud Storage denominatomy-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 filedisk.raw
e compressa nel formato filetar.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
REST
Creare ed esportare un'immagine manualmente
Se i comandi
gcloud compute images create
egcloud 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:
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
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-12-22 UTC.
-