Crea un'istanza VM da un modello di istanza con override
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Crea un'istanza VM da un modello di istanza, quindi esegui l'override delle opzioni del disco e del tipo di macchina nel modello.
Per saperne di più
Per la documentazione dettagliata che include questo esempio di codice, vedi quanto segue:
Esempio di codice
Go
Prima di provare questo esempio, segui le istruzioni di configurazione di Go disponibili nella
guida rapida di Compute Engine sull'utilizzo
delle librerie client.
Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Go di Compute Engine.
Per eseguire l'autenticazione in Compute Engine, configura Credenziali predefinite dell'applicazione.
Per maggiori informazioni, consulta
Configurare l'autenticazione per un ambiente di sviluppo locale.
import (
"context"
"fmt"
"io"
compute "cloud.google.com/go/compute/apiv1"
computepb "cloud.google.com/go/compute/apiv1/computepb"
"google.golang.org/protobuf/proto"
)
// createInstanceFromTemplate creates a Compute Engine VM instance from an instance template, but overrides the disk and machine type options in the template.
func createInstanceFromTemplateWithOverrides(w io.Writer, projectID, zone, instanceName, instanceTemplateName, machineType, newDiskSourceImage string) error {
// projectID := "your_project_id"
// zone := "europe-central2-b"
// instanceName := "your_instance_name"
// instanceTemplateName := "your_instance_template_name"
// machineType := "n1-standard-2"
// newDiskSourceImage := "projects/debian-cloud/global/images/family/debian-10"
ctx := context.Background()
instancesClient, err := compute.NewInstancesRESTClient(ctx)
if err != nil {
return fmt.Errorf("NewInstancesRESTClient: %w", err)
}
defer instancesClient.Close()
intanceTemplatesClient, err := compute.NewInstanceTemplatesRESTClient(ctx)
if err != nil {
return fmt.Errorf("NewInstanceTemplatesRESTClient: %w", err)
}
defer intanceTemplatesClient.Close()
// Retrieve an instance template by name.
reqGetTemplate := &computepb.GetInstanceTemplateRequest{
Project: projectID,
InstanceTemplate: instanceTemplateName,
}
instanceTemplate, err := intanceTemplatesClient.Get(ctx, reqGetTemplate)
if err != nil {
return fmt.Errorf("unable to get intance template: %w", err)
}
for _, disk := range instanceTemplate.Properties.Disks {
diskType := disk.InitializeParams.GetDiskType()
if diskType != "" {
disk.InitializeParams.DiskType = proto.String(fmt.Sprintf(`zones/%s/diskTypes/%s`, zone, diskType))
}
}
reqInsertInstance := &computepb.InsertInstanceRequest{
Project: projectID,
Zone: zone,
InstanceResource: &computepb.Instance{
Name: proto.String(instanceName),
MachineType: proto.String(fmt.Sprintf(`zones/%s/machineTypes/%s`, zone, machineType)),
Disks: append(
// If you override a repeated field, all repeated values
// for that property are replaced with the
// corresponding values provided in the request.
// When adding a new disk to existing disks,
// insert all existing disks as well.
instanceTemplate.Properties.Disks,
&computepb.AttachedDisk{
InitializeParams: &computepb.AttachedDiskInitializeParams{
DiskSizeGb: proto.Int64(10),
SourceImage: &newDiskSourceImage,
},
AutoDelete: proto.Bool(true),
Boot: proto.Bool(false),
Type: proto.String(computepb.AttachedDisk_PERSISTENT.String()),
},
),
},
SourceInstanceTemplate: instanceTemplate.SelfLink,
}
op, err := instancesClient.Insert(ctx, reqInsertInstance)
if err != nil {
return fmt.Errorf("unable to create instance: %w", err)
}
if err = op.Wait(ctx); err != nil {
return fmt.Errorf("unable to wait for the operation: %w", err)
}
fmt.Fprintf(w, "Instance created\n")
return nil
}
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.
[{
"type": "thumb-down",
"id": "hardToUnderstand",
"label":"Hard to understand"
},{
"type": "thumb-down",
"id": "incorrectInformationOrSampleCode",
"label":"Incorrect information or sample code"
},{
"type": "thumb-down",
"id": "missingTheInformationSamplesINeed",
"label":"Missing the information/samples I need"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Problema di traduzione"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Altra"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Facile da capire"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Il problema è stato risolto"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Altra"
}]