Creazione e gestione delle istanze

Questa pagina descrive come creare, elencare, modificare ed eliminare le istanze Spanner.

Crea un'istanza

Puoi creare un'istanza con la console Google Cloud , Google Cloud CLI o le librerie client. Puoi anche creare un'istanza con una configurazione personalizzata aggiungendo repliche di sola lettura facoltative.

Console

  1. Nella console Google Cloud , vai alla pagina Istanze Spanner.

  2. Fai clic su Crea istanza.

    Vai a Crea istanza

  3. Nella sezione Seleziona una versione, seleziona una versione di Spanner.

    Se vuoi confrontare le specifiche delle diverse versioni, fai clic su Confronta le versioni. Per ulteriori informazioni, consulta la Panoramica delle versioni di Spanner.

  4. Fai clic su Continua.

  5. Nella sezione Assegna un nome all'istanza, inserisci un Nome istanza da visualizzare nella console Google Cloud . Il nome dell'istanza deve essere univoco all'interno del tuo Google Cloud progetto.

  6. Inserisci un ID istanza per identificare in modo permanente la tua istanza. L'ID istanza deve essere univoco anche all'interno del progetto Google Cloud . Non potrai modificare l'ID istanza in un secondo momento.

  7. Fai clic su Continua.

  8. Nella sezione Configura l'istanza, in Scegli una configurazione, seleziona Regionale, A due regioni o Multi-regionale.

  9. Seleziona una posizione di configurazione dal menu a discesa.

  10. (Facoltativo) Per aggiungere una replica di sola lettura a una configurazione base di Spanner, crea prima una configurazione dell'istanza personalizzata utilizzando Google Cloud CLI. L'aggiunta di repliche di sola lettura facoltative a una configurazione di base è disponibile nelle versioni Enterprise ed Enterprise Plus.

  11. Fai clic su Continua.

  12. Nella sezione Alloca capacità di calcolo, in Seleziona unità, fai clic su una delle seguenti opzioni:

    • Nodi per istanze di grandi dimensioni. Un nodo è pari a 1000 unità di elaborazione.
    • Unità di elaborazione per le istanze piccole.

    Per saperne di più, consulta Capacità di calcolo, nodi e unità di elaborazione.

  13. In Scegli una modalità di scalabilità, fai clic su una delle seguenti opzioni:

    • Allocazione manuale se vuoi impostare manualmente la capacità di calcolo per risorse e costi di calcolo fissi.

      • Quantità indica il numero di unità di elaborazione o nodi da utilizzare per questa istanza.
    • Scalabilità automatica per consentire a Spanner di aggiungere e rimuovere automaticamente la capacità di calcolo. Lo scalatore automatico gestito è disponibile nelle versioni Enterprise ed Enterprise Plus di Spanner. Per saperne di più sul gestore della scalabilità automatica gestito, consulta Gestore della scalabilità automatica gestito per Spanner. Configura le seguenti opzioni del gestore della scalabilità automatica gestito:

  14. (Facoltativo) Se selezioni Scalabilità automatica come modalità di scalabilità, puoi fare clic sul menu a discesa Mostra opzioni di scalabilità automatica asimmetrica per scalare automaticamente le repliche di sola lettura indipendentemente dalle altre repliche. Per saperne di più, consulta Scalabilità automatica asimmetrica di sola lettura.

    1. Seleziona la replica di sola lettura che vuoi scalare automaticamente in modo asimmetrico.

    2. Configura le seguenti opzioni del gestore della scalabilità automatica asimmetrica:

      • Minimo indica il limite minimo di fare lo scale down, a seconda dell'unità di misura scelta per Capacità di calcolo. Per ulteriori informazioni, vedi Determinare il limite minimo.
      • Massimo indica il limite massimo di scalabilità, a seconda dell'unità di misura scelta per la capacità di calcolo. Per saperne di più, consulta Determinare il limite massimo.
      • Target di utilizzo ad alta priorità della CPU indica la percentuale target di CPU da utilizzare per le attività ad alta priorità. Per saperne di più, consulta Determinare il target di utilizzo della CPU ad alta priorità.
      • Target di utilizzo totale della CPU indica la percentuale target di CPU da utilizzare per tutte le attività a bassa, media e alta priorità. La percentuale di CPU può variare dal 10 al 90%. Il target CPU totale deve essere maggiore del target CPU ad alta priorità. Se ottimizzi in base al costo, utilizza una percentuale più elevata. Per ulteriori informazioni, vedi Determinare il target di utilizzo totale della CPU.
      • Disabilita CPU totale indica che il gestore della scalabilità automatica deve ignorare esplicitamente il target CPU totale.
      • Disattiva CPU ad alta priorità indica che il gestore della scalabilità automatica deve ignorare esplicitamente il target CPU per le attività ad alta priorità.
  15. Nella sezione Backup, la casella di controllo Abilita le pianificazioni dei backup predefiniti è selezionata per impostazione predefinita. Per disattivare le pianificazioni dei backup predefiniti, deseleziona la casella di controllo. Se abilitata, tutti i nuovi database nell'istanza hanno backup completi creati ogni 24 ore. Questi backup vengono conservati per 7 giorni. Puoi modificare o eliminare le pianificazioni del backup predefinite in qualsiasi momento. Per saperne di più, consulta Pianificazioni di backup predefinite.

  16. Fai clic sul pulsante Crea per creare l'istanza.

gcloud

Utilizza il comando gcloud spanner instances create per creare un'istanza. Specifica la capacità di calcolo come numero di nodi o unità di elaborazione che vuoi nell'istanza.

gcloud spanner instances create INSTANCE_ID \
--edition=EDITION \
--config=INSTANCE_CONFIG \
--description=INSTANCE_DESCRIPTION \
--default-backup-schedule-type=DEFAULT_BACKUP_SCHEDULE_TYPE \
--nodes=NODE_COUNT

o

gcloud spanner instances create INSTANCE_ID \
--edition=EDITION \
--config=INSTANCE_CONFIG \
--description=INSTANCE_DESCRIPTION \
--default-backup-schedule-type=DEFAULT_BACKUP_SCHEDULE_TYPE \
--processing-units=PROCESSING_UNIT_COUNT

Sostituisci quanto segue:

  • INSTANCE-ID: un identificatore permanente univoco all'interno del tuo progetto Google Cloud . Non potrai modificare l'ID istanza in un secondo momento.
  • INSTANCE-CONFIG: un identificatore permanente della configurazione dell'istanza, che definisce la posizione geografica dell'istanza e influisce sulla modalità di replica dei dati. Per le configurazioni personalizzate delle istanze, inizia con custom-. Per saperne di più, consulta Configurazioni dell'istanza.
  • INSTANCE_DESCRIPTION: il nome da visualizzare per l'istanza nella Google Cloud console. Il nome dell'istanza deve essere univoco all'interno del progettoGoogle Cloud .
  • DEFAULT_BACKUP_SCHEDULE_TYPE: il tipo di pianificazione di backup predefinita utilizzato nell'istanza. Deve essere uno dei seguenti valori:

    • AUTOMATIC: viene creata automaticamente una pianificazione di backup predefinita quando viene creato un nuovo database nell'istanza. La pianificazione del backup predefinita crea un backup completo ogni 24 ore. Questi backup completi vengono conservati per 7 giorni. Puoi modificare o eliminare la pianificazione del backup predefinita una volta creata.
    • NONE: una pianificazione di backup predefinita non viene creata automaticamente quando viene creato un nuovo database nell'istanza.
  • NODE-COUNT: la capacità di calcolo dell'istanza, espressa come numero di nodi. Ogni nodo equivale a 1000 unità di elaborazione.

  • PROCESSING_UNIT_COUNT: la capacità di calcolo dell'istanza, espressa come numero di unità di elaborazione. Inserisci quantità fino a 1000 in multipli di 100 (100, 200, 300 e così via) e quantità maggiori in multipli di 1000 (1000, 2000, 3000 e così via). Nota: non utilizzare questo parametro se stai creando un'istanza che intendi abilitare in un secondo momento con il gestore della scalabilità automatica gestito.

Aggiungi la scalabilità automatica gestita

Puoi anche creare istanze delle versioni Enterprise ed Enterprise Plus per utilizzare la scalabilità automatica gestita con il comando gcloud spanner instances create. Per saperne di più, consulta Gestore della scalabilità automatica gestito per Spanner.

Utilizza il seguente comando per creare un'istanza con il gestore della scalabilità automatica gestito.

  gcloud spanner instances create INSTANCE_ID \
    --edition=EDITION \
    --config=INSTANCE_CONFIG \
    --description=INSTANCE_DESCRIPTION \
    --autoscaling-min-processing-units=MINIMUM_PROCESSING_UNITS \
    --autoscaling-max-processing-units=MAXIMUM_PROCESSING_UNITS \
    --autoscaling-high-priority-cpu-target=HIGH_PRIORITY_CPU_PERCENTAGE \
    --autoscaling-total-cpu-target=TOTAL_CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE \
    [--disable-downscaling | --no-disable-downscaling] \
    [--asymmetric-autoscaling-option \
       location=ASYMMETRIC_AUTOSCALING_LOCATION,\
       min_nodes=ASYMMETRIC_AUTOSCALING_MIN,\
       max_nodes=ASYMMETRIC_AUTOSCALING_MAX,\
       high_priority_cpu_target=ASYMMETRIC_HIGH_PRIORITY_CPU_TARGET,\
       total_cpu_target=ASYMMETRIC_TOTAL_CPU_TARGET \
       [,disable_total_cpu_autoscaling=TRUE|FALSE \
       | disable_high_priority_cpu_autoscaling=TRUE|FALSE]
    ]

o

  gcloud spanner instances create INSTANCE_ID \
    --edition=EDITION \
    --config=INSTANCE_CONFIG \
    --description=INSTANCE_DESCRIPTION \
    --autoscaling-min-nodes=MINIMUM_NODES \
    --autoscaling-max-nodes=MAXIMUM_NODES \
    --autoscaling-high-priority-cpu-target=HIGH_PRIORITY_CPU_PERCENTAGE \
    --autoscaling-total-cpu-target=TOTAL_CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE \
    [--disable-downscaling | --no-disable-downscaling] \
    [--asymmetric-autoscaling-option \
       location=ASYMMETRIC_AUTOSCALING_LOCATION,\
       min_nodes=ASYMMETRIC_AUTOSCALING_MIN,\
       max_nodes=ASYMMETRIC_AUTOSCALING_MAX,\
       high_priority_cpu_target=ASYMMETRIC_HIGH_PRIORITY_CPU_TARGET, \
       total_cpu_target=ASYMMETRIC_TOTAL_CPU_TARGET, \
       [,disable_total_cpu_autoscaling=TRUE|FALSE \
       | disable_high_priority_cpu_autoscaling=TRUE|FALSE]
    ]

Sostituisci quanto segue:

  • INSTANCE-ID: un identificatore permanente univoco all'interno del tuo progetto Google Cloud . Non potrai modificare l'ID istanza in un secondo momento.
  • INSTANCE-CONFIG: un identificatore permanente della configurazione dell'istanza, che definisce la posizione geografica dell'istanza e influisce sulla modalità di replica dei dati. Per le configurazioni personalizzate delle istanze, inizia con custom-. Per saperne di più, consulta Configurazioni dell'istanza.
  • INSTANCE-DESCRIPTION: il nome da visualizzare per l'istanza nella Google Cloud console. Il nome dell'istanza deve essere univoco all'interno del progettoGoogle Cloud .
  • MINIMUM_PROCESSING_UNITS, MINIMUM_NODES: il numero minimo di unità di elaborazione o nodi durante la riduzione della scalabilità. Per saperne di più, consulta Determinare il limite minimo.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: il numero massimo di unità di elaborazione o nodi durante lo scale up. Per saperne di più, consulta Determinare il limite massimo.
  • HIGH_PRIORITY_CPU_PERCENTAGE: la percentuale target di CPU ad alta priorità da utilizzare, in base alla priorità dell'attività. La percentuale di CPU può variare dal 10 al 90%. Se esegui l'ottimizzazione in base al costo, utilizza una percentuale più elevata. Per saperne di più, consulta Determinare il target di utilizzo della CPU ad alta priorità.
  • TOTAL_CPU_PERCENTAGE: la percentuale target della CPU con priorità totale da utilizzare. Il target CPU totale deve essere maggiore del target CPU ad alta priorità. La percentuale di CPU può variare dal 10 al 90%. Se stai ottimizzando in base al costo, utilizza una percentuale più elevata. Per ulteriori informazioni, consulta Determinare il target di utilizzo totale della CPU.
  • STORAGE_PERCENTAGE: la percentuale target di spazio di archiviazione da utilizzare, da 10 a 99%. Per saperne di più, consulta Determinare la destinazione di utilizzo dello spazio di archiviazione.

Flag facoltativi:

  • --disable-downscaling: utilizza questo flag booleano per disattivare la riduzione della scalabilità. Se impostato su TRUE, impedisce al gestore della scalabilità automatica di ridurre il numero di nodi o unità di elaborazione. L'upscaling continua a funzionare normalmente per soddisfare la maggiore domanda. Per attivare la riduzione della scalabilità dopo averla disattivata, utilizza il flag --no-disable-downscaling.
  • --asymmetric-autoscaling-option: utilizza questo flag per abilitare la scalabilità automatica asimmetrica. Sostituisci i seguenti parametri:

    • ASYMMETRIC_AUTOSCALING_LOCATION: se viene utilizzato il flag, questo parametro è obbligatorio. La posizione della regione di sola lettura che vuoi scalare in modo asimmetrico.
    • ASYMMETRIC_AUTOSCALING_MIN: parametro facoltativo. Il numero minimo di nodi durante la riduzione della scalabilità. Se non specificato, questo valore viene ereditato dalla configurazione dell'istanza di base.
    • ASYMMETRIC_AUTOSCALING_MAX: parametro facoltativo. Il numero massimo di nodi durante lo scale up. Se non specificato, questo valore viene ereditato dalla configurazione dell'istanza di base.
    • ASYMMETRIC_HIGH_PRIORITY_CPU_TARGET: parametro facoltativo. La percentuale target di CPU da utilizzare, in base alla priorità dell'attività. Se non specificato, questo valore viene ereditato dalla configurazione dell'istanza di base. Se stai ottimizzando in base al costo, utilizza una percentuale più elevata. Le repliche possono avere una percentuale target diversa rispetto all'istanza di base e alle altre repliche, ma per gli scenari di failover consigliamo di utilizzare target coerenti tra le diverse repliche. Per saperne di più, consulta Considerazioni sul failover.
    • ASYMMETRIC_TOTAL_CPU_TARGET: parametro facoltativo. Imposta il target dal 10 al 90% per la CPU totale. Se non specificato, questo valore viene ereditato dalla configurazione dell'istanza di base. Se stai ottimizzando in base al costo, utilizza una percentuale più elevata. Le repliche possono avere una percentuale target diversa rispetto all'istanza di base e alle altre repliche, ma per gli scenari di failover consigliamo di utilizzare target coerenti tra le diverse repliche. Per saperne di più, consulta Scalabilità automatica asimmetrica di sola lettura.
    • disable_total_cpu_autoscaling: imposta questo parametro su TRUE se non vuoi che il gestore della scalabilità automatica esegua la scalabilità automatica della CPU totale sulle repliche. Non specificare questo parametro se vuoi che l'istanza erediti la destinazione total_cpu_autoscaling dall'istanza di base. Non puoi disattivare sia la CPU totale sia la CPU ad alta priorità nella stessa replica.
    • disable_high_priority_cpu_autoscaling: imposta disable_high_priority_cpu_autoscaling su TRUE se non vuoi che il gestore della scalabilità automatica esegua la scalabilità automatica della CPU ad alta priorità sulle repliche. Non specificare questo parametro se vuoi che l'istanza erediti la destinazione high_priority_cpu_autoscaling dall'istanza di base. Non puoi disattivare sia la CPU totale sia la CPU ad alta priorità sulla stessa replica.

Esempi di utilizzo delle configurazioni personalizzate

Per creare un'istanza test-instance nella configurazione dell'istanza regionale di base us-central1, esegui:

gcloud spanner instances create test-instance --edition=STANDARD --config=regional-us-central1 \
  --description="Test Instance" --nodes=1

Per creare un'istanza custom-eur6-instance nella configurazione dell'istanza multiregionale personalizzata custom-eur6, devi prima creare una configurazione dell'istanza personalizzata.

Dopodiché, esegui:

  gcloud spanner instances create custom-eur6-instance --edition=ENTERPRISE_PLUS --config=custom-eur6 \
      --description="Instance with custom read-only" --nodes=1

Dopo aver eseguito uno dei comandi precedenti, dovresti visualizzare un messaggio simile al seguente esempio:

Creating instance...done.

C++

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client di Spanner.

Per eseguire l'autenticazione in Spanner, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

void CreateInstance(google::cloud::spanner_admin::InstanceAdminClient client,
                    std::string const& project_id,
                    std::string const& instance_id,
                    std::string const& display_name,
                    std::string const& config_id) {
  namespace spanner = ::google::cloud::spanner;
  spanner::Instance in(project_id, instance_id);

  auto project = google::cloud::Project(project_id);
  std::string config_name =
      project.FullName() + "/instanceConfigs/" + config_id;
  auto instance =
      client
          .CreateInstance(spanner::CreateInstanceRequestBuilder(in, config_name)
                              .SetDisplayName(display_name)
                              .SetNodeCount(1)
                              .SetLabels({{"cloud_spanner_samples", "true"}})
                              .Build())
          .get();
  if (!instance) throw std::move(instance).status();
  std::cout << "Created instance [" << in << "]:\n" << instance->DebugString();
}

C#

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client di Spanner.

Per eseguire l'autenticazione in Spanner, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Spanner.Admin.Instance.V1;
using Google.Cloud.Spanner.Common.V1;
using Google.LongRunning;
using System;
using System.Threading.Tasks;

public class CreateInstanceAsyncSample
{
    public async Task<Instance> CreateInstanceAsync(
        string projectId,
        string instanceId,
        Instance.Types.Edition edition = Instance.Types.Edition.Standard)
    {
        // Create the InstanceAdminClient instance.
        InstanceAdminClient instanceAdminClient = await InstanceAdminClient.CreateAsync();

        // Initialize request parameters.
        Instance instance = new Instance
        {
            InstanceName = InstanceName.FromProjectInstance(projectId, instanceId),
            ConfigAsInstanceConfigName = InstanceConfigName.FromProjectInstanceConfig(projectId, "regional-us-central1"),
            DisplayName = "This is a display name.",
            NodeCount = 1,
            Labels =
            {
                { "cloud_spanner_samples", "true" },
            },
            Edition = edition,
        };
        ProjectName projectName = ProjectName.FromProject(projectId);

        // Make the CreateInstance request.
        Operation<Instance, CreateInstanceMetadata> response = await instanceAdminClient.CreateInstanceAsync(projectName, instanceId, instance);

        Console.WriteLine("Waiting for the operation to finish.");

        // Poll until the returned long-running operation is complete.
        Operation<Instance, CreateInstanceMetadata> completedResponse = await response.PollUntilCompletedAsync();

        if (completedResponse.IsFaulted)
        {
            Console.WriteLine($"Error while creating instance: {completedResponse.Exception}");
            throw completedResponse.Exception;
        }

        Console.WriteLine($"Instance created successfully.");

        return completedResponse.Result;
    }
}

Crea un'istanza senza una pianificazione dei backup predefinita


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Spanner.Admin.Instance.V1;
using Google.Cloud.Spanner.Common.V1;
using Google.LongRunning;
using System;
using System.Threading.Tasks;

public class CreateInstanceWithoutDefaultBackupSchedulesAsyncSample
{
    public async Task<Instance> CreateInstanceWithoutDefaultBackupSchedulesAsync(string projectId, string instanceId)
    {
        // Create the InstanceAdminClient instance.
        InstanceAdminClient instanceAdminClient = await InstanceAdminClient.CreateAsync();

        // Initialize request parameters.
        Instance instance = new Instance
        {
            InstanceName = InstanceName.FromProjectInstance(projectId, instanceId),
            ConfigAsInstanceConfigName =
                InstanceConfigName.FromProjectInstanceConfig(projectId, "regional-me-central2"),
            DisplayName = "This is a display name.",
            NodeCount = 1,
            Labels =
            {
                { "cloud_spanner_samples", "true" },
            },
            DefaultBackupScheduleType = Instance.Types.DefaultBackupScheduleType.None,
        };
        ProjectName projectName = ProjectName.FromProject(projectId);

        // Make the CreateInstance request.
        Operation<Instance, CreateInstanceMetadata> response =
            await instanceAdminClient.CreateInstanceAsync(projectName, instanceId, instance);

        Console.WriteLine("Waiting for the operation to finish.");

        // Poll until the returned long-running operation is complete.
        Operation<Instance, CreateInstanceMetadata> completedResponse =
            await response.PollUntilCompletedAsync();

        if (completedResponse.IsFaulted)
        {
            Console.WriteLine($"Error while creating instance: {completedResponse.Exception}");
            throw completedResponse.Exception;
        }

        Console.WriteLine($"Instance created successfully.");
        return completedResponse.Result;
    }
}

Go

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client di Spanner.

Per eseguire l'autenticazione in Spanner, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"fmt"
	"io"

	instance "cloud.google.com/go/spanner/admin/instance/apiv1"
	"cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
)

func createInstance(w io.Writer, projectID, instanceID string) error {
	// projectID := "my-project-id"
	// instanceID := "my-instance"
	ctx := context.Background()
	instanceAdmin, err := instance.NewInstanceAdminClient(ctx)
	if err != nil {
		return err
	}
	defer instanceAdmin.Close()

	op, err := instanceAdmin.CreateInstance(ctx, &instancepb.CreateInstanceRequest{
		Parent:     fmt.Sprintf("projects/%s", projectID),
		InstanceId: instanceID,
		Instance: &instancepb.Instance{
			Config:      fmt.Sprintf("projects/%s/instanceConfigs/%s", projectID, "regional-us-central1"),
			DisplayName: instanceID,
			NodeCount:   1,
			Labels:      map[string]string{"cloud_spanner_samples": "true"},
			Edition:     instancepb.Instance_STANDARD,
		},
	})
	if err != nil {
		return fmt.Errorf("could not create instance %s: %w", fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID), err)
	}
	// Wait for the instance creation to finish.
	i, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance creation to finish failed: %w", err)
	}
	// The instance may not be ready to serve yet.
	if i.State != instancepb.Instance_READY {
		fmt.Fprintf(w, "instance state is not READY yet. Got state %v\n", i.State)
	}
	fmt.Fprintf(w, "Created instance [%s]\n", instanceID)
	return nil
}

Crea un'istanza con la scalabilità automatica gestita utilizzando Go

import (
	"context"
	"fmt"
	"io"

	instance "cloud.google.com/go/spanner/admin/instance/apiv1"
	"cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
	"google.golang.org/genproto/protobuf/field_mask"
)

// Example of creating an autoscaling instance with Go.
// projectID is the ID of the project that the new instance will be in.
// instanceID is the ID of the new instance to be created.
func createInstanceWithAutoscalingConfig(w io.Writer, projectID, instanceID string) error {
	// projectID := "my-project-id"
	// instanceID := "my-instance"
	ctx := context.Background()
	instanceAdmin, err := instance.NewInstanceAdminClient(ctx)
	if err != nil {
		return fmt.Errorf("could not create instance admin client for project %s: %w", projectID, err)
	}
	defer instanceAdmin.Close()

	instanceName := fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID)
	fmt.Fprintf(w, "Creating instance %s.", instanceName)

	op, err := instanceAdmin.CreateInstance(ctx, &instancepb.CreateInstanceRequest{
		Parent:     fmt.Sprintf("projects/%s", projectID),
		InstanceId: instanceID,
		Instance: &instancepb.Instance{
			Config:      fmt.Sprintf("projects/%s/instanceConfigs/%s", projectID, "regional-us-central1"),
			DisplayName: "Create instance example",
			AutoscalingConfig: &instancepb.AutoscalingConfig{
				AutoscalingLimits: &instancepb.AutoscalingConfig_AutoscalingLimits{
					MinLimit: &instancepb.AutoscalingConfig_AutoscalingLimits_MinNodes{
						MinNodes: 1,
					},
					MaxLimit: &instancepb.AutoscalingConfig_AutoscalingLimits_MaxNodes{
						MaxNodes: 2,
					},
				},
				AutoscalingTargets: &instancepb.AutoscalingConfig_AutoscalingTargets{
					HighPriorityCpuUtilizationPercent: 65,
					StorageUtilizationPercent:         95,
				},
			},
			Labels:  map[string]string{"cloud_spanner_samples": "true"},
			Edition: instancepb.Instance_ENTERPRISE_PLUS,
		},
	})
	if err != nil {
		return fmt.Errorf("could not create instance %s: %w", instanceName, err)
	}
	fmt.Fprintf(w, "Waiting for operation on %s to complete...", instanceID)
	// Wait for the instance creation to finish.
	i, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance creation to finish failed: %w", err)
	}
	// The instance may not be ready to serve yet.
	if i.State != instancepb.Instance_READY {
		fmt.Fprintf(w, "instance state is not READY yet. Got state %v\n", i.State)
	}
	fmt.Fprintf(w, "Created instance [%s].\n", instanceID)

	instance, err := instanceAdmin.GetInstance(ctx, &instancepb.GetInstanceRequest{
		Name: instanceName,
		// Get the autoscaling_config field from the newly created instance.
		FieldMask: &field_mask.FieldMask{Paths: []string{"autoscaling_config"}},
	})
	if err != nil {
		return fmt.Errorf("failed to get instance [%s]: %w", instanceName, err)
	}
	fmt.Fprintf(w, "Instance %s has autoscaling_config: %s.", instanceID, instance.AutoscalingConfig)
	return nil
}

Crea un'istanza con scalabilità automatica asimmetrica di sola lettura utilizzando Go

import (
	"context"
	"fmt"
	"io"

	instance "cloud.google.com/go/spanner/admin/instance/apiv1"
	"cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
	"google.golang.org/genproto/protobuf/field_mask"
)

// createInstanceWithAsymmetricAutoscalingConfig is a code snippet to show
// an example of creating an asymmetric autoscaling enabled instance in Go.
//
// projectID is the ID of the project that the new instance will be in.
// instanceID is the ID of the new instance to be created.
func createInstanceWithAsymmetricAutoscalingConfig(w io.Writer, projectID, instanceID string) error {
	ctx := context.Background()
	instanceAdmin, err := instance.NewInstanceAdminClient(ctx)
	if err != nil {
		return fmt.Errorf("could not create instance admin client for project %s: %w", projectID, err)
	}
	defer instanceAdmin.Close()

	instanceName := fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID)
	fmt.Fprintf(w, "Creating instance %s.", instanceName)

	op, err := instanceAdmin.CreateInstance(ctx, &instancepb.CreateInstanceRequest{
		Parent:     fmt.Sprintf("projects/%s", projectID),
		InstanceId: instanceID,
		Instance: &instancepb.Instance{
			Config:      fmt.Sprintf("projects/%s/instanceConfigs/%s", projectID, "nam-eur-asia3"),
			DisplayName: "Create instance example",
			AutoscalingConfig: &instancepb.AutoscalingConfig{
				AutoscalingLimits: &instancepb.AutoscalingConfig_AutoscalingLimits{
					MinLimit: &instancepb.AutoscalingConfig_AutoscalingLimits_MinNodes{
						MinNodes: 1,
					},
					MaxLimit: &instancepb.AutoscalingConfig_AutoscalingLimits_MaxNodes{
						MaxNodes: 10,
					},
				},
				AutoscalingTargets: &instancepb.AutoscalingConfig_AutoscalingTargets{
					HighPriorityCpuUtilizationPercent: 65,
					StorageUtilizationPercent:         95,
				},
				// Read-only replicas in europe-west1, europe-west4, and asia-east1 are autoscaled
				// independly from other replicas based on the usage in the respective region.
				AsymmetricAutoscalingOptions: []*instancepb.AutoscalingConfig_AsymmetricAutoscalingOption{
					&instancepb.AutoscalingConfig_AsymmetricAutoscalingOption{
						ReplicaSelection: &instancepb.ReplicaSelection{
							Location: "europe-west1",
						},
					},
					&instancepb.AutoscalingConfig_AsymmetricAutoscalingOption{
						ReplicaSelection: &instancepb.ReplicaSelection{
							Location: "europe-west4",
						},
					},
					&instancepb.AutoscalingConfig_AsymmetricAutoscalingOption{
						ReplicaSelection: &instancepb.ReplicaSelection{
							Location: "asia-east1",
						},
					},
				},
			},
			Labels:  map[string]string{"cloud_spanner_samples": "true"},
			Edition: instancepb.Instance_ENTERPRISE_PLUS,
		},
	})
	if err != nil {
		return fmt.Errorf("could not create instance %s: %w", instanceName, err)
	}
	fmt.Fprintf(w, "Waiting for operation on %s to complete...", instanceID)
	// Wait for the instance creation to finish.
	i, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance creation to finish failed: %w", err)
	}
	// The instance may not be ready to serve yet.
	if i.State != instancepb.Instance_READY {
		fmt.Fprintf(w, "instance state is not READY yet. Got state %v\n", i.State)
	}
	fmt.Fprintf(w, "Created instance [%s].\n", instanceID)

	instance, err := instanceAdmin.GetInstance(ctx, &instancepb.GetInstanceRequest{
		Name: instanceName,
		// Get the autoscaling_config field from the newly created instance.
		FieldMask: &field_mask.FieldMask{Paths: []string{"autoscaling_config"}},
	})
	if err != nil {
		return fmt.Errorf("failed to get instance [%s]: %w", instanceName, err)
	}
	fmt.Fprintf(w, "Instance %s has autoscaling_config: %s.", instanceID, instance.AutoscalingConfig)
	return nil
}

Crea un'istanza senza una pianificazione dei backup predefinita

import (
	"context"
	"fmt"
	"io"

	instance "cloud.google.com/go/spanner/admin/instance/apiv1"
	"cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
)

// createInstanceWithoutDefaultBackupSchedule creates instance with default backup schedule disabled.
func createInstanceWithoutDefaultBackupSchedule(w io.Writer, projectID, instanceID string) error {
	// projectID := "my-project-id"
	// instanceID := "my-instance"
	ctx := context.Background()
	instanceAdmin, err := instance.NewInstanceAdminClient(ctx)
	if err != nil {
		return err
	}
	defer instanceAdmin.Close()

	// Create an instance without default backup schedule, whicn means no default backup schedule will
	// be created automatically on creation of a database within the instance.
	req := &instancepb.CreateInstanceRequest{
		Parent:     fmt.Sprintf("projects/%s", projectID),
		InstanceId: instanceID,
		Instance: &instancepb.Instance{
			Config:                    fmt.Sprintf("projects/%s/instanceConfigs/%s", projectID, "regional-us-central1"),
			DisplayName:               instanceID,
			NodeCount:                 1,
			Labels:                    map[string]string{"cloud_spanner_samples": "true"},
			DefaultBackupScheduleType: instancepb.Instance_NONE,
		},
	}

	op, err := instanceAdmin.CreateInstance(ctx, req)
	if err != nil {
		return fmt.Errorf("could not create instance %s: %w", fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID), err)
	}
	// Wait for the instance creation to finish.  For more information about instances, see
	// https://cloud.google.com/spanner/docs/instances.
	instance, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance creation to finish failed: %w", err)
	}
	// The instance may not be ready to serve yet.
	if instance.State != instancepb.Instance_READY {
		fmt.Fprintf(w, "instance state is not READY yet. Got state %v\n", instance.State)
	}
	fmt.Fprintf(w, "Created instance [%s]\n", instanceID)
	return nil
}

Java

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client di Spanner.

Per eseguire l'autenticazione in Spanner, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
import com.google.spanner.admin.instance.v1.CreateInstanceRequest;
import com.google.spanner.admin.instance.v1.Instance;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.ProjectName;
import java.util.concurrent.ExecutionException;

class CreateInstanceExample {

  static void createInstance() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project";
    String instanceId = "my-instance";
    createInstance(projectId, instanceId);
  }

  static void createInstance(String projectId, String instanceId) {
    // Set Instance configuration.
    int nodeCount = 2;
    String displayName = "Descriptive name";

    // Create an Instance object that will be used to create the instance.
    Instance instance =
        Instance.newBuilder()
            .setDisplayName(displayName)
            .setEdition(Instance.Edition.STANDARD)
            .setNodeCount(nodeCount)
            .setConfig(InstanceConfigName.of(projectId, "regional-us-east4").toString())
            .build();

    try (Spanner spanner =
            SpannerOptions.newBuilder().setProjectId(projectId).build().getService();
        InstanceAdminClient instanceAdminClient = spanner.createInstanceAdminClient()) {

      // Wait for the createInstance operation to finish.
      Instance createdInstance =
          instanceAdminClient
              .createInstanceAsync(
                  CreateInstanceRequest.newBuilder()
                      .setParent(ProjectName.of(projectId).toString())
                      .setInstanceId(instanceId)
                      .setInstance(instance)
                      .build())
              .get();
      System.out.printf("Instance %s was successfully created%n", createdInstance.getName());
    } catch (ExecutionException e) {
      System.out.printf(
          "Error: Creating instance %s failed with error message %s%n",
          instance.getName(), e.getMessage());
    } catch (InterruptedException e) {
      System.out.println("Error: Waiting for createInstance operation to finish was interrupted");
    }
  }
}

Crea un'istanza con la scalabilità automatica gestita utilizzando Java


import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
import com.google.spanner.admin.instance.v1.AutoscalingConfig;
import com.google.spanner.admin.instance.v1.CreateInstanceRequest;
import com.google.spanner.admin.instance.v1.Instance;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.ProjectName;
import com.google.spanner.admin.instance.v1.ReplicaSelection;
import java.util.concurrent.ExecutionException;

class CreateInstanceWithAsymmetricAutoscalingConfigExample {

  static void createInstance() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project";
    String instanceId = "my-instance";
    createInstance(projectId, instanceId);
  }

  static void createInstance(String projectId, String instanceId) {
    try (Spanner spanner =
        SpannerOptions.newBuilder()
            .setProjectId(projectId)
            .build()
            .getService();
        InstanceAdminClient instanceAdminClient = spanner.createInstanceAdminClient()) {
      // Set Instance configuration.
      String configId = "nam-eur-asia3";
      String displayName = "Descriptive name";

      // Create an autoscaling config.
      // When autoscaling_config is enabled, node_count and processing_units fields
      // need not be specified.
      // The read-only replicas listed in the asymmetric autoscaling options scale independently
      // from other replicas.
      AutoscalingConfig autoscalingConfig =
          AutoscalingConfig.newBuilder()
              .setAutoscalingLimits(
                  AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2))
              .setAutoscalingTargets(
                  AutoscalingConfig.AutoscalingTargets.newBuilder()
                      .setHighPriorityCpuUtilizationPercent(65)
                      .setStorageUtilizationPercent(95))
              .addAsymmetricAutoscalingOptions(
                  AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder()
                  .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("europe-west1")))
              .addAsymmetricAutoscalingOptions(
                  AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder()
                  .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("europe-west4")))
              .addAsymmetricAutoscalingOptions(
                  AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder()
                  .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("asia-east1")))
              .build();
      Instance instance =
          Instance.newBuilder()
              .setAutoscalingConfig(autoscalingConfig)
              .setDisplayName(displayName)
              .setConfig(
                  InstanceConfigName.of(projectId, configId).toString())
              .build();

      // Creates a new instance
      System.out.printf("Creating instance %s.%n", instanceId);
      try {
        // Wait for the createInstance operation to finish.
        Instance instanceResult = instanceAdminClient.createInstanceAsync(
            CreateInstanceRequest.newBuilder()
                .setParent(ProjectName.of(projectId).toString())
                .setInstanceId(instanceId)
                .setInstance(instance)
                .build()).get();
        System.out.printf("Asymmetric Autoscaling instance %s was successfully created%n",
            instanceResult.getName());
      } catch (ExecutionException e) {
        System.out.printf(
            "Error: Creating instance %s failed with error message %s%n",
            instance.getName(), e.getMessage());
      } catch (InterruptedException e) {
        System.out.println("Error: Waiting for createInstance operation to finish was interrupted");
      }
    }
  }
}

Crea un'istanza con scalabilità automatica asimmetrica di sola lettura utilizzando Java


import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
import com.google.spanner.admin.instance.v1.AutoscalingConfig;
import com.google.spanner.admin.instance.v1.CreateInstanceRequest;
import com.google.spanner.admin.instance.v1.Instance;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.ProjectName;
import com.google.spanner.admin.instance.v1.ReplicaSelection;
import java.util.concurrent.ExecutionException;

class CreateInstanceWithAsymmetricAutoscalingConfigExample {

  static void createInstance() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project";
    String instanceId = "my-instance";
    createInstance(projectId, instanceId);
  }

  static void createInstance(String projectId, String instanceId) {
    try (Spanner spanner =
        SpannerOptions.newBuilder()
            .setProjectId(projectId)
            .build()
            .getService();
        InstanceAdminClient instanceAdminClient = spanner.createInstanceAdminClient()) {
      // Set Instance configuration.
      String configId = "nam-eur-asia3";
      String displayName = "Descriptive name";

      // Create an autoscaling config.
      // When autoscaling_config is enabled, node_count and processing_units fields
      // need not be specified.
      // The read-only replicas listed in the asymmetric autoscaling options scale independently
      // from other replicas.
      AutoscalingConfig autoscalingConfig =
          AutoscalingConfig.newBuilder()
              .setAutoscalingLimits(
                  AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2))
              .setAutoscalingTargets(
                  AutoscalingConfig.AutoscalingTargets.newBuilder()
                      .setHighPriorityCpuUtilizationPercent(65)
                      .setStorageUtilizationPercent(95))
              .addAsymmetricAutoscalingOptions(
                  AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder()
                  .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("europe-west1")))
              .addAsymmetricAutoscalingOptions(
                  AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder()
                  .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("europe-west4")))
              .addAsymmetricAutoscalingOptions(
                  AutoscalingConfig.AsymmetricAutoscalingOption.newBuilder()
                  .setReplicaSelection(ReplicaSelection.newBuilder().setLocation("asia-east1")))
              .build();
      Instance instance =
          Instance.newBuilder()
              .setAutoscalingConfig(autoscalingConfig)
              .setDisplayName(displayName)
              .setConfig(
                  InstanceConfigName.of(projectId, configId).toString())
              .build();

      // Creates a new instance
      System.out.printf("Creating instance %s.%n", instanceId);
      try {
        // Wait for the createInstance operation to finish.
        Instance instanceResult = instanceAdminClient.createInstanceAsync(
            CreateInstanceRequest.newBuilder()
                .setParent(ProjectName.of(projectId).toString())
                .setInstanceId(instanceId)
                .setInstance(instance)
                .build()).get();
        System.out.printf("Asymmetric Autoscaling instance %s was successfully created%n",
            instanceResult.getName());
      } catch (ExecutionException e) {
        System.out.printf(
            "Error: Creating instance %s failed with error message %s%n",
            instance.getName(), e.getMessage());
      } catch (InterruptedException e) {
        System.out.println("Error: Waiting for createInstance operation to finish was interrupted");
      }
    }
  }
}

Crea un'istanza senza una pianificazione dei backup predefinita


import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
import com.google.spanner.admin.instance.v1.CreateInstanceRequest;
import com.google.spanner.admin.instance.v1.Instance;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.ProjectName;
import java.util.concurrent.ExecutionException;

class CreateInstanceWithoutDefaultBackupSchedulesExample {