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 , con Google Cloud CLI o con le librerie client. Puoi anche creare un'istanza con una configurazione dell'istanza 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 maggiori informazioni, consulta la panoramica delle versioni di Spanner.

  4. Fai clic su Continua.

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

  6. Inserisci un ID istanza per identificare in modo permanente l'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 Più regioni.

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

  10. (Facoltativo) Per aggiungere una replica di sola lettura a una configurazione di 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:

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

    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 (anteprima), per consentire a Spanner di aggiungere e rimuovere automaticamente la capacità di calcolo. Il gestore della scalabilità automatica gestito è disponibile nelle versioni Spanner Enterprise ed Enterprise Plus. Per ulteriori informazioni sul gestore della scalabilità automatica gestito, consulta Gestore della scalabilità automatica gestito per Spanner. Configura le seguenti opzioni di scalabilità automatica gestita:

  14. In 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 questa opzione è attivata, per tutti i nuovi database dell'istanza vengono creati backup completi ogni 24 ore. Questi backup vengono conservati per 7 giorni. Puoi modificare o eliminare le pianificazioni dei backup predefinite in qualsiasi momento. Per ulteriori informazioni, consulta Pianificazioni dei backup predefinite.

  15. 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 il 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 delle istanze personalizzate, inizia con custom-. Per ulteriori informazioni, consulta le configurazioni delle istanze.
  • INSTANCE_DESCRIPTION: il nome da visualizzare per l'istanza nella console Google Cloud . Il nome dell'istanza deve essere univoco all'interno del progettoGoogle Cloud .
  • DEFAULT_BACKUP_SCHEDULE_TYPE: il tipo di pianificazione dei backup predefinito utilizzato nell'istanza. Deve essere uno dei seguenti valori:

    • AUTOMATIC: una pianificazione dei backup predefinita viene creata automaticamente 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 dei 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, expressed as a number of processing units. Inserisci quantità fino a 1000 in multipli di 100 (100, 200, 300 e così via) e inserisci quantità maggiori in multipli di 1000 (1000, 2000, 3000 e così via). Nota: non utilizzare questo parametro se stai creando un'istanza che prevedi di attivare con il gestore della scalabilità automatica gestito in un secondo momento.

Aggiungi la scalabilità automatica gestita (anteprima)

Puoi anche creare istanze Enterprise e Enterprise Plus per utilizzare l'autoscaling gestito con il comando gcloud beta spanner instances create. Per ulteriori informazioni, consulta Gestione della scalabilità automatica per Spanner.

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

  gcloud beta 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=CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE

o

  gcloud beta 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=CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE

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 delle istanze personalizzate, inizia con custom-. Per ulteriori informazioni, consulta le configurazioni delle istanze.
  • INSTANCE-DESCRIPTION: il nome da visualizzare per l'istanza nella console Google Cloud . 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 il ridimensionamento verso il basso. Per ulteriori informazioni, consulta Determinare il limite minimo.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: il numero massimo di unità di elaborazione o nodi durante l'aumento di scala. Per ulteriori informazioni, consulta Determinare il limite massimo.
  • CPU_PERCENTAGE: la percentuale target di CPU ad alta priorità da utilizzare, da 10 a 90%. Se esegui l'ottimizzazione in base al costo, utilizza una percentuale più alta. Per ulteriori informazioni, consulta Determinare il target di utilizzo della CPU.
  • STORAGE_PERCENTAGE: la percentuale target di spazio di archiviazione da utilizzare, da 10 a 99%. Per ulteriori informazioni, consulta Determinare il target di utilizzo dello spazio di archiviazione.

Esempi di utilizzo di 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 personalizzata per più regioni 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 all'esempio riportato di seguito:

Creating instance...done.

C++

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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 Spanner.

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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;
    }
}

Creare 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;
    }
}

Vai

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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
}

Creare un'istanza con la scalabilità automatica gestita utilizzando Go (anteprima)

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
}

Creare 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 Spanner.

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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");
    }
  }
}

Creare un'istanza con la scalabilità automatica gestita utilizzando Java (anteprima)


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 java.util.concurrent.ExecutionException;

class CreateInstanceWithAutoscalingConfigExample {

  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 = "regional-us-east4";
      String displayName = "Descriptive name";

      // Create an autoscaling config.
      // When autoscaling_config is enabled, node_count and processing_units fields
      // need not be specified.
      AutoscalingConfig autoscalingConfig =
          AutoscalingConfig.newBuilder()
              .setAutoscalingLimits(
                  AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2))
              .setAutoscalingTargets(
                  AutoscalingConfig.AutoscalingTargets.newBuilder()
                      .setHighPriorityCpuUtilizationPercent(65)
                      .setStorageUtilizationPercent(95))
              .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("Autoscaler 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");
      }
    }
  }
}

Creare 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 {

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

  static void createInstanceWithoutDefaultBackupSchedules(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)
            .setDefaultBackupScheduleType(Instance.DefaultBackupScheduleType.NONE)
            .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");
    }
  }
}

Node.js

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


// Imports the Google Cloud client library
const {Spanner, protos} = require('@google-cloud/spanner');

// Creates a client
const spanner = new Spanner({
  projectId: projectId,
});

const instanceAdminClient = await spanner.getInstanceAdminClient();
/**
 * TODO(developer): Uncomment the following lines before running the sample.
 **/
// const projectId = 'my-project-id';
// const instanceId = 'my-instance';

// Creates a new instance
try {
  console.log(
    `Creating instance ${instanceAdminClient.instancePath(
      projectId,
      instanceId
    )}.`
  );
  const [operation] = await instanceAdminClient.createInstance({
    instanceId: instanceId,
    parent: instanceAdminClient.projectPath(projectId),
    instance: {
      config: instanceAdminClient.instanceConfigPath(
        projectId,
        'regional-us-central1'
      ),
      nodeCount: 1,
      displayName: 'Display name for the instance.',
      labels: {
        cloud_spanner_samples: 'true',
        created: Math.round(Date.now() / 1000).toString(), // current time
      },
      edition:
        protos.google.spanner.admin.instance.v1.Instance.Edition.STANDARD, //optional
    },
  });

  console.log(`Waiting for operation on ${instanceId} to complete...`);
  await operation.promise();

  console.log(`Created instance ${instanceId}.`);
} catch (err) {
  console.error('ERROR:', err);
}

Creare un'istanza senza una pianificazione dei backup predefinita

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 **/
// const projectId = 'my-project-id';
// const instanceId = 'my-instance';

// Imports the Google Cloud client library
const {Spanner, protos} = require('@google-cloud/spanner');

// Creates a client
const spanner = new Spanner({
  projectId: projectId,
});

const instanceAdminClient = await spanner.getInstanceAdminClient();
// Creates a new instance
try {
  const [operation] = await instanceAdminClient.createInstance({
    instanceId: instanceId,
    parent: instanceAdminClient.projectPath(projectId),
    instance: {
      config: instanceAdminClient.instanceConfigPath(
        projectId,
        'regional-me-central2'
      ),
      nodeCount: 1,
      displayName: 'Display name for the instance.',
      labels: {
        cloud_spanner_samples: 'true',
        created: Math.round(Date.now() / 1000).toString(), // current time
      },
      defaultBackupScheduleType:
        protos.google.spanner.admin.instance.v1.Instance
          .DefaultBackupScheduleType.NONE,
    },
  });
  await operation.promise();

  console.log(
    `Created instance ${instanceId} without default backup schedules.`
  );
} catch (err) {
  console.error('ERROR:', err);
}

PHP

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

use Google\Cloud\Spanner\Admin\Instance\V1\Client\InstanceAdminClient;
use Google\Cloud\Spanner\Admin\Instance\V1\CreateInstanceRequest;
use Google\Cloud\Spanner\Admin\Instance\V1\Instance;

/**
 * Creates an instance.
 * Example:
 * ```
 * create_instance($projectId, $instanceId);
 * ```
 *
 * @param string $projectId  The Spanner project ID.
 * @param string $instanceId The Spanner instance ID.
 */
function create_instance(string $projectId, string $instanceId): void
{
    $instanceAdminClient = new InstanceAdminClient();
    $parent = InstanceAdminClient::projectName($projectId);
    $instanceName = InstanceAdminClient::instanceName($projectId, $instanceId);
    $configName = $instanceAdminClient->instanceConfigName($projectId, 'regional-us-central1');
    $instance = (new Instance())
        ->setName($instanceName)
        ->setConfig($configName)
        ->setDisplayName('dispName')
        ->setNodeCount(1);

    $operation = $instanceAdminClient->createInstance(
        (new CreateInstanceRequest())
        ->setParent($parent)
        ->setInstanceId($instanceId)
        ->setInstance($instance)
    );

    print('Waiting for operation to complete...' . PHP_EOL);
    $operation->pollUntilComplete();

    printf('Created instance %s' . PHP_EOL, $instanceId);
}

Python

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def create_instance(instance_id):
    """Creates an instance."""
    from google.cloud.spanner_admin_instance_v1.types import spanner_instance_admin

    spanner_client = spanner.Client()

    config_name = "{}/instanceConfigs/regional-us-central1".format(
        spanner_client.project_name
    )

    operation = spanner_client.instance_admin_api.create_instance(
        parent=spanner_client.project_name,
        instance_id=instance_id,
        instance=spanner_instance_admin.Instance(
            config=config_name,
            display_name="This is a display name.",
            node_count=1,
            labels={
                "cloud_spanner_samples": "true",
                "sample_name": "snippets-create_instance-explicit",
                "created": str(int(time.time())),
            },
            edition=spanner_instance_admin.Instance.Edition.STANDARD,  # Optional
        ),
    )

    print("Waiting for operation to complete...")
    operation.result(OPERATION_TIMEOUT_SECONDS)

    print("Created instance {}".format(instance_id))

Creare un'istanza senza una pianificazione dei backup predefinita

def create_instance_without_default_backup_schedules(instance_id):
    spanner_client = spanner.Client()
    config_name = "{}/instanceConfigs/regional-me-central2".format(
        spanner_client.project_name
    )

    operation = spanner_client.instance_admin_api.create_instance(
      parent=spanner_client.project_name,
      instance_id=instance_id,
      instance=spanner_instance_admin.Instance(
          config=config_name,
          display_name="This is a display name.",
          node_count=1,
          default_backup_schedule_type=spanner_instance_admin.Instance.DefaultBackupScheduleType.NONE,  # Optional
      ),
    )

    print("Waiting for operation to complete...")
    operation.result(OPERATION_TIMEOUT_SECONDS)

    print("Created instance {} without default backup schedules".format(instance_id))

Ruby

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

# project_id  = "Your Google Cloud project ID"
# instance_id = "Your Spanner instance ID"
# instance_config_id = "Your Spanner InstanceConfig ID"

require "google/cloud/spanner"
require "google/cloud/spanner/admin/instance"

instance_admin_client = Google::Cloud::Spanner::Admin::Instance.instance_admin

project_path = instance_admin_client.project_path project: project_id
instance_path = instance_admin_client.instance_path project: project_id, instance: instance_id
instance_config_path = instance_admin_client.instance_config_path project: project_id, instance_config: instance_config_id

job = instance_admin_client.create_instance parent: project_path,
                                            instance_id: instance_id,
                                            instance: { name: instance_path,
                                                        config: instance_config_path,
                                                        display_name: instance_id,
                                                        node_count: 2,
                                                        labels: { cloud_spanner_samples: "true" } }

puts "Waiting for create instance operation to complete"

job.wait_until_done!

if job.error?
  puts job.error
else
  puts "Created instance #{instance_id}"
end

Elenca istanze

Puoi mostrare un elenco delle tue istanze Spanner.

Console

Vai alla pagina Istanze Spanner nella console Google Cloud .

Vai alla pagina Istanze

La console Google Cloud mostra un elenco delle tue istanze Spanner, insieme all'ID, al nome visualizzato, alla configurazione e alla capacità di calcolo di ciascuna istanza, espressa sia in unità di elaborazione sia in nodi.

gcloud

Utilizza il comando gcloud spanner instances list:

gcloud spanner instances list

Gcloud CLI stampa un elenco delle tue istanze Spanner, insieme all'ID, al nome visualizzato, alla configurazione e alla capacità di calcolo di ciascuna istanza.

Modifica un'istanza

Le sezioni seguenti spiegano come eseguire l'upgrade della versione dell'istanza e come modificare il nome visualizzato, la capacità di calcolo e il tipo di pianificazione del backup predefinito di un'istanza. Non puoi modificare l'ID o la configurazione dell'istanza (tuttavia, puoi spostare l'istanza).

Eseguire l'upgrade della versione

Puoi eseguire l'upgrade delle istanze della versione Standard a una versione di livello superiore. È possibile eseguire l'upgrade delle istanze della versione Standard alla versione Enterprise o Enterprise Plus. È possibile eseguire l'upgrade delle istanze della versione Enterprise alla versione Enterprise Plus.

Il downgrade self-service non è disponibile. Per eseguire il downgrade della versione della tua istanza, invia un ticket di assistenza. Per ulteriori informazioni, consulta le domande frequenti sulle versioni di Spanner.

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza di cui vuoi eseguire l'upgrade.

  3. Fai clic su Esegui l'upgrade accanto al tipo di versione.

  4. Nella pagina Edizione istanza, in Aggiorna versione, seleziona la nuova versione di livello superiore per l'istanza.

  5. Fai clic su Salva.

gcloud

Utilizza il comando gcloud spanner instances update per eseguire l'upgrade della versione dell'istanza:

gcloud spanner instances update INSTANCE_ID --edition=EDITION \
[--async]

Sostituisci quanto segue:

  • INSTANCE_ID: l'identificatore permanente dell'istanza.
  • EDITION: specifica la nuova versione di livello superiore per la tua istanza. Per ulteriori informazioni, consulta la panoramica delle versioni di Spanner.

Flag facoltativi:

  • --async: utilizza questo flag se vuoi che la richiesta venga restituita immediatamente, senza attendere il completamento dell'operazione in corso. Puoi controllare lo stato della tua richiesta eseguendo gcloud spanner operations describe.

Vai

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"
)

func updateInstance(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()

	req := &instancepb.UpdateInstanceRequest{
		Instance: &instancepb.Instance{
			Name: fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID),
			// The edition selected for this instance.
			// Different editions provide different capabilities at different price points.
			// For more information, see https://cloud.google.com/spanner/docs/editions-overview.
			Edition: instancepb.Instance_ENTERPRISE,
		},
		FieldMask: &field_mask.FieldMask{
			Paths: []string{"edition"},
		},
	}
	op, err := instanceAdmin.UpdateInstance(ctx, req)
	if err != nil {
		return fmt.Errorf("could not update instance %s: %w", fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID), err)
	}
	// Wait for the instance update to finish.
	_, err = op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance update to finish failed: %w", err)
	}

	fmt.Fprintf(w, "Updated instance [%s]\n", instanceID)
	return nil
}

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.common.collect.Lists;
import com.google.protobuf.FieldMask;
import com.google.spanner.admin.instance.v1.Instance;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.InstanceName;
import com.google.spanner.admin.instance.v1.UpdateInstanceRequest;
import java.util.concurrent.ExecutionException;

public class UpdateInstanceExample {

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

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

    // Update an Instance object that will be used to update the instance.
    Instance instance =
        Instance.newBuilder()
            .setName(InstanceName.of(projectId, instanceId).toString())
            .setDisplayName(displayName)
            .setNodeCount(nodeCount)
            .setEdition(Instance.Edition.ENTERPRISE)
            .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 updatedInstance operation to finish.
      Instance updatedInstance =
          instanceAdminClient
              .updateInstanceAsync(
                  UpdateInstanceRequest.newBuilder()
                      .setFieldMask(
                          FieldMask.newBuilder().addAllPaths(Lists.newArrayList("edition")))
                      .setInstance(instance)
                      .build())
              .get();
      System.out.printf("Instance %s was successfully updated%n", updatedInstance.getName());
    } catch (ExecutionException e) {
      System.out.printf(
          "Error: Updating instance %s failed with error message %s%n",
          instance.getName(), e.getMessage());
    } catch (InterruptedException e) {
      System.out.println("Error: Waiting for updateInstance operation to finish was interrupted");
    }
  }
}

Node.js

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


// Imports the Google Cloud client library
const {Spanner, protos} = require('@google-cloud/spanner');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = 'my-project-id';
// const instanceId = 'my-instance';

// Creates a client
const spanner = new Spanner({
  projectId: projectId,
});

const instanceAdminClient = spanner.getInstanceAdminClient();

// Updates an instance
try {
  console.log(
    `Updating instance ${instanceAdminClient.instancePath(
      projectId,
      instanceId
    )}.`
  );
  const [operation] = await instanceAdminClient.updateInstance({
    instance: {
      name: instanceAdminClient.instancePath(projectId, instanceId),
      labels: {
        updated: 'true',
        created: Math.round(Date.now() / 1000).toString(), // current time
      },
      edition:
        protos.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE, //optional
    },
    // Field mask specifying fields that should get updated in an Instance
    fieldMask: (protos.google.protobuf.FieldMask = {
      paths: ['labels', 'edition'],
    }),
  });

  console.log(`Waiting for operation on ${instanceId} to complete...`);
  await operation.promise();
  console.log(`Updated instance ${instanceId}.`);
  const [metadata] = await instanceAdminClient.getInstance({
    name: instanceAdminClient.instancePath(projectId, instanceId),
  });
  console.log(
    `Instance ${instanceId} has been updated with the ${metadata.edition} ` +
      'edition.'
  );
} catch (err) {
  console.error('ERROR:', err);
}

Python

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def update_instance(instance_id):
    """Updates an instance."""
    from google.cloud.spanner_admin_instance_v1.types import \
        spanner_instance_admin

    spanner_client = spanner.Client()

    name = "{}/instances/{}".format(spanner_client.project_name, instance_id)

    operation = spanner_client.instance_admin_api.update_instance(
        instance=spanner_instance_admin.Instance(
            name=name,
            labels={
                "sample_name": "snippets-update_instance-explicit",
            },
            edition=spanner_instance_admin.Instance.Edition.ENTERPRISE,  # Optional
        ),
        field_mask=field_mask_pb2.FieldMask(paths=["labels", "edition"]),
    )

    print("Waiting for operation to complete...")
    operation.result(OPERATION_TIMEOUT_SECONDS)

    print("Updated instance {}".format(instance_id))

Modificare il nome visualizzato

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza che vuoi rinominare.

  3. Fai clic su Modifica istanza.

  4. Inserisci un nuovo nome per l'istanza. Questo nome deve essere univoco all'interno del progettoGoogle Cloud .

  5. Fai clic su Salva.

gcloud

Utilizza il comando gcloud spanner instances update:

gcloud spanner instances update INSTANCE_ID --description=INSTANCE_NAME

Sostituisci quanto segue:

  • INSTANCE_ID: l'identificatore permanente dell'istanza.
  • INSTANCE_NAME: il nome da visualizzare per l'istanza nella console Google Cloud . Il nome dell'istanza deve essere univoco all'interno del progettoGoogle Cloud .

Modificare la capacità di calcolo

Devi eseguire il provisioning di una capacità di calcolo sufficiente per mantenere l'utilizzo della CPU e l'utilizzo dello spazio di archiviazione al di sotto dei valori massimi consigliati. Per ulteriori informazioni, consulta le quote e i limiti per Spanner.

In alcuni casi non è possibile ridurre la capacità di calcolo di un'istanza esistente:

  • La rimozione della capacità di calcolo richiede che l'istanza memorizzi più di 10 TB di dati per 1000 unità di elaborazione (1 nodo).
  • In base ai tuoi pattern di utilizzo storici, Spanner ha creato un gran numero di suddivisioni per i dati della tua istanza e, in alcuni rari casi, Spanner non sarebbe in grado di gestire le suddivisioni dopo la rimozione della capacità di calcolo.

In quest'ultimo caso, puoi provare a ridurre la capacità di calcolo in misura sempre minore finché non trovi la capacità minima di cui Spanner ha bisogno per gestire tutte le suddivisioni dell'istanza. Se l'istanza non richiede più così tante suddivisioni a causa di una modifica dei pattern di utilizzo, Spanner potrebbe eventualmente unire alcune suddivisioni e consentirti di provare a ridurre ulteriormente la capacità di calcolo dell'istanza dopo una o due settimane.

Quando rimuovi la capacità di calcolo, monitora l'utilizzo della CPU e le latenze delle richieste in Cloud Monitoring per assicurarti che l'utilizzo della CPU rimanga al di sotto del 65% per le istanze regionali e del 45% per ogni regione nelle istanze multiregionali. Potresti notare un aumento temporaneo delle latenze delle richieste durante la rimozione della capacità di calcolo.

Se vuoi aumentare la capacità di calcolo di un'istanza, il progettoGoogle Cloud deve avere una quota sufficiente per aggiungere la capacità di calcolo. Il tempo necessario per completare la richiesta di aumento dipende dalle dimensioni della richiesta. Nella maggior parte dei casi, le richieste vengono completate entro pochi minuti. In rare occasioni, l'aumento di scala potrebbe richiedere fino a un'ora.

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza da modificare.

  3. Fai clic su Modifica istanza.

  4. Modifica la capacità di calcolo scegliendo le unità di misura (unità di elaborazione o nodi) e inserendo una quantità. Quando utilizzi le 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). Ogni nodo equivale a 1000 unità di elaborazione.

  5. Fai clic su Salva.

Se viene visualizzata una finestra di dialogo che ti informa che la quota non è sufficiente per aggiungere la capacità di calcolo in questa località, segui le istruzioni per richiedere una quota più alta.

gcloud

Utilizza il comando gcloud spanner instances update. Quando utilizzi questo comando, specifica la capacità di calcolo come numero di nodi o unità di elaborazione.

gcloud spanner instances update INSTANCE_ID --nodes=NODE_COUNT
[--async]

o

gcloud spanner instances update INSTANCE_ID
--processing-units=PROCESSING_UNIT_COUNT [--async]

Sostituisci quanto segue:

  • INSTANCE_ID: l'identificatore permanente dell'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, expressed as a number of processing units. Inserisci quantità fino a 1000 in multipli di 100 (100, 200, 300 e così via) e inserisci quantità maggiori in multipli di 1000 (1000, 2000, 3000 e così via).

Flag facoltativi:

  • --async: utilizza questo flag se vuoi che la richiesta venga restituita immediatamente, senza attendere il completamento dell'operazione in corso. Puoi controllare lo stato della tua richiesta eseguendo gcloud spanner operations describe.

Attivare o modificare il gestore della scalabilità automatica gestito su un'istanza

Quando aggiungi o modifichi la funzionalità di scalabilità automatica gestita su un'istanza esistente, si applicano le seguenti limitazioni:

  • L'autoscalabilità gestita è disponibile solo nelle versioni Enterprise o Enterprise Plus.
  • Non puoi attivare lo scalatore automatico gestito su un'istanza che stai spostando.
  • Non puoi spostare un'istanza mentre l'autoscalabilità gestita è attivata.

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza su cui vuoi attivare l'autoscaler gestito.

  3. Fai clic su Modifica istanza.

  4. In Configura capacità di calcolo, fai clic su Scalabilità automatica.

  5. In Minimo, seleziona il limite minimo da utilizzare per la riduzione. Per ulteriori informazioni, consulta Determinare il limite minimo.

  6. In Massimo, seleziona il limite massimo da utilizzare per l'aumento. Per maggiori informazioni, consulta Determinare il limite massimo.

  7. Per Target di utilizzo della CPU ad alta priorità, seleziona la percentuale di CPU ad alta priorità da utilizzare. Per ulteriori informazioni, consulta Determinare il target di utilizzo della CPU.

  8. In Target di utilizzo dello spazio di archiviazione, seleziona la percentuale di spazio di archiviazione da utilizzare. Per ulteriori informazioni, consulta Determinare il target di utilizzo dello spazio di archiviazione.

  9. Fai clic su Salva.

gcloud

Utilizza il comando gcloud beta spanner instances update per aggiungere il gestore della scalabilità automatica gestito a un'istanza. Per ulteriori informazioni e limitazioni, consulta Google Cloud CLI indicatori e limitazioni.

Puoi aggiungere l'autoscalatore gestito con il seguente comando:

  gcloud beta spanner instances update INSTANCE_ID \
    --autoscaling-min-processing-units=MINIMUM_PROCESSING_UNITS \
    --autoscaling-max-processing-units=MAXIMUM_PROCESSING_UNITS \
    --autoscaling-high-priority-cpu-target=CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE

o

  gcloud beta spanner instances update INSTANCE_ID \
    --autoscaling-min-processing-units=MINIMUM_NODES \
    --autoscaling-max-processing-units=MAXIMUM_NODES \
    --autoscaling-high-priority-cpu-target=CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE

Sostituisci quanto segue:

  • INSTANCE_ID: l'identificatore permanente dell'istanza.
  • MINIMUM_PROCESSING_UNITS, MINIMUM_NODES: il numero minimo di unità di elaborazione o nodi da utilizzare per il ridimensionamento verso il basso. Per ulteriori informazioni, consulta Determinare il limite minimo.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: il numero massimo di unità di elaborazione o nodi da utilizzare durante l'aumento di scala. Per maggiori informazioni, consulta Determinare il limite massimo.
  • CPU_PERCENTAGE: la percentuale target di CPU ad alta priorità da utilizzare, dal 10% al 90%. Se esegui l'ottimizzazione in base al costo e non hai bisogno di una bassa latenza per tutte le richieste, utilizza una percentuale più alta. Per ulteriori informazioni, consulta la sezione Determinare il target di utilizzo della CPU.
  • STORAGE_PERCENTAGE: la percentuale target di spazio di archiviazione da utilizzare, da 10% a 99%. Per ulteriori informazioni, consulta Determinare il target di utilizzo dello spazio di archiviazione.

Dopo aver aggiunto l'autoscalabilità gestita a un'istanza, puoi anche modificare le impostazioni dell'autoscalabilità gestita. Ad esempio, se vuoi aumentare il numero massimo di unità di elaborazione a 10000, esegui il seguente comando:

gcloud beta spanner instances update test-instance \
     --autoscaling-max-processing-units=10000

Passare da un'istanza che utilizza il gestore della scalabilità automatica gestito alla scalabilità manuale

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza per cui vuoi disattivare l'autoscaler gestito.

  3. In Scegli una modalità di scalabilità, fai clic su Allocazione manuale.

  4. Fai clic su Salva.

gcloud

Utilizza il comando gcloud beta spanner instances update per aggiornare l'istanza.

Utilizza il seguente comando per passare da un'istanza che utilizza l'autoscaler gestito alla scalabilità manuale:

  gcloud beta spanner instances update INSTANCE_ID \
  --processing-units=PROCESSING_UNIT_COUNT

o

  gcloud beta spanner instances update INSTANCE_ID \
  --nodes=NODE_COUNT

Sostituisci quanto segue:

  • INSTANCE_ID: l'identificatore permanente dell'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, expressed as a number of processing units. Inserisci quantità fino a 1000 in multipli di 100 (100, 200, 300 e così via) e inserisci quantità maggiori in multipli di 1000 (1000, 2000, 3000 e così via).

Etichetta un'istanza

Le etichette ti aiutano a organizzare le risorse.

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Seleziona la casella di controllo per l'istanza. Il riquadro Informazioni viene visualizzato sul lato destro della pagina.

  3. Fai clic sulla scheda Etichette nel riquadro delle informazioni. Puoi quindi aggiungere, eliminare o aggiornare le etichette per l'istanza Spanner.

Modificare il tipo di pianificazione del backup predefinito

Le pianificazioni dei backup predefinite vengono attivate automaticamente per tutte le nuove istanze. Puoi attivare o disattivare le pianificazioni dei backup predefinite in un'istanza durante la creazione o in un secondo momento modificando l'istanza. Per ulteriori informazioni, consulta Pianificazioni dei backup predefinite.

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza di cui vuoi modificare la pianificazione del backup predefinita.

  3. Fai clic su Modifica istanza.

  4. In Backup, la casella di controllo Abilita le pianificazioni dei backup predefiniti determina se le pianificazioni dei backup predefiniti sono attive o meno. Se questa opzione è attivata, per tutti i nuovi database in questa istanza viene creata una pianificazione del backup predefinita.

  5. Fai clic su Salva.

gcloud

Utilizza il comando gcloud spanner instances update per modificare il tipo di pianificazione dei backup predefinito.

Puoi modificare il tipo di pianificazione del backup predefinito eseguendo il seguente comando:

  gcloud spanner instances update INSTANCE_ID \
    --default-backup-schedule-type=DEFAULT_BACKUP_SCHEDULE_TYPE

Sostituisci quanto segue:

  • INSTANCE_ID: l'identificatore permanente dell'istanza.
  • DEFAULT_BACKUP_SCHEDULE_TYPE: il tipo di pianificazione dei backup predefinito utilizzato nell'istanza. Deve essere uno dei seguenti valori:

    • AUTOMATIC: una pianificazione dei backup predefinita viene creata automaticamente 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 dei backup predefinita non viene creata automaticamente quando viene creato un nuovo database nell'istanza.

C#

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


using Google.Cloud.Spanner.Admin.Instance.V1;
using Google.Cloud.Spanner.Common.V1;
using Google.LongRunning;
using Google.Protobuf.WellKnownTypes;
using System;
using System.Threading.Tasks;

public class UpdateInstanceDefaultBackupScheduleTypeAsyncSample
{
    public async Task<Instance> UpdateInstanceDefaultBackupScheduleTypeAsync(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),
            DefaultBackupScheduleType = Instance.Types.DefaultBackupScheduleType.Automatic,
        };
        FieldMask mask = new FieldMask 
        {
            Paths = { "default_backup_schedule_type" }
        };

        // Make the CreateInstance request.
        Operation<Instance, UpdateInstanceMetadata> response =
            await instanceAdminClient.UpdateInstanceAsync(instance, mask);

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

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

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

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

Vai

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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"
	"google.golang.org/genproto/protobuf/field_mask"
)

// updateInstanceDefaultBackupScheduleType updates instance default backup schedule type to AUTOMATIC.
// This means a default backup schedule will be created automatically on creation of a database within the instance.
func updateInstanceDefaultBackupScheduleType(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()

	// Updates the default backup schedule type field of an instance.  The field mask is required to
	// indicate which field is being updated.
	req := &instancepb.UpdateInstanceRequest{
		Instance: &instancepb.Instance{
			Name: fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID),
			// Controls the default backup behavior for new databases within the instance.
			DefaultBackupScheduleType: instancepb.Instance_AUTOMATIC,
		},
		FieldMask: &field_mask.FieldMask{
			Paths: []string{"default_backup_schedule_type"},
		},
	}
	op, err := instanceAdmin.UpdateInstance(ctx, req)
	if err != nil {
		return fmt.Errorf("could not update instance %s: %w", fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID), err)
	}
	// Wait for the instance update to finish.
	_, err = op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance update to finish failed: %w", err)
	}

	fmt.Fprintf(w, "Updated instance [%s]\n", instanceID)
	return nil
}

Java

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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.common.collect.Lists;
import com.google.protobuf.FieldMask;
import com.google.spanner.admin.instance.v1.Instance;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.InstanceName;
import com.google.spanner.admin.instance.v1.UpdateInstanceRequest;
import java.util.concurrent.ExecutionException;

public class UpdateInstanceDefaultBackupScheduleTypeExample {

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

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

    // Update an Instance object that will be used to update the instance.
    Instance instance =
        Instance.newBuilder()
            .setName(InstanceName.of(projectId, instanceId).toString())
            .setDisplayName(displayName)
            .setNodeCount(nodeCount)
            .setDefaultBackupScheduleType(Instance.DefaultBackupScheduleType.AUTOMATIC)
            .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 updatedInstance operation to finish.
      Instance updatedInstance =
          instanceAdminClient
              .updateInstanceAsync(
                  UpdateInstanceRequest.newBuilder()
                      .setFieldMask(
                          FieldMask.newBuilder()
                              .addAllPaths(Lists.newArrayList("default_backup_schedule_type")))
                      .setInstance(instance)
                      .build())
              .get();
      System.out.printf("Instance %s was successfully updated%n", updatedInstance.getName());
    } catch (ExecutionException e) {
      System.out.printf(
          "Error: Updating instance %s failed with error message %s%n",
          instance.getName(), e.getMessage());
    } catch (InterruptedException e) {
      System.out.println("Error: Waiting for updateInstance operation to finish was interrupted");
    }
  }
}

Node.js

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = 'my-project-id';
// const instanceId = 'my-instance';

// Imports the Google Cloud client library
const {Spanner, protos} = require('@google-cloud/spanner');

// Creates a client
const spanner = new Spanner({
  projectId: projectId,
});
const instanceAdminClient = await spanner.getInstanceAdminClient();

// Updates an instance
try {
  const [operation] = await instanceAdminClient.updateInstance({
    instance: {
      name: instanceAdminClient.instancePath(projectId, instanceId),
      defaultBackupScheduleType:
        protos.google.spanner.admin.instance.v1.Instance
          .DefaultBackupScheduleType.AUTOMATIC, // optional
    },
    // Field mask specifying fields that should get updated in an Instance
    fieldMask: (protos.google.protobuf.FieldMask = {
      paths: ['default_backup_schedule_type'],
    }),
  });

  await operation.promise();
  const [metadata] = await instanceAdminClient.getInstance({
    name: instanceAdminClient.instancePath(projectId, instanceId),
  });
  console.log(
    `Instance ${instanceId} has been updated with the ${metadata.defaultBackupScheduleType}` +
      ' default backup schedule type.'
  );
} catch (err) {
  console.error('ERROR:', err);
}

Python

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

Per autenticarti a Spanner, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def update_instance_default_backup_schedule_type(instance_id):
    spanner_client = spanner.Client()

    name = "{}/instances/{}".format(spanner_client.project_name, instance_id)

    operation = spanner_client.instance_admin_api.update_instance(
      instance=spanner_instance_admin.Instance(
          name=name,
          default_backup_schedule_type=spanner_instance_admin.Instance.DefaultBackupScheduleType.AUTOMATIC,  # Optional
      ),
      field_mask=field_mask_pb2.FieldMask(
          paths=["default_backup_schedule_type"]
      ),
    )

    print("Waiting for operation to complete...")
    operation.result(OPERATION_TIMEOUT_SECONDS)

    print("Updated instance {} to have default backup schedules".format(instance_id))

Sposta un'istanza

Per istruzioni su come spostare l'istanza da una configurazione all'altra, incluse le configurazioni regionali e multiregionali, consulta Spostare un'istanza.

Elimina un'istanza

Puoi eliminare un'istanza con la console Google Cloud o con Google Cloud CLI.

Se vuoi eliminare un'istanza con uno o più database con la protezione dall'eliminazione abilitata, devi prima disattivare la protezione dall'eliminazione su tutti i database dell'istanza prima di poter eliminare l'istanza.

Console

  1. Vai alla pagina Istanze Spanner nella console Google Cloud .

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza che vuoi eliminare.

  3. Fai clic su Elimina istanza.

  4. Segui le istruzioni per confermare che vuoi eliminare l'istanza.

  5. Fai clic su Elimina.

gcloud

Utilizza il comando gcloud spanner instances delete, sostituendo INSTANCE_ID con l'ID istanza:

gcloud spanner instances delete INSTANCE_ID

Arrestare o riavviare un'istanza

Spanner è un servizio di database completamente gestito che supervisiona le proprie attività e risorse sottostanti, tra cui il monitoraggio e il riavvio delle procedure, se necessario, senza tempi di inattività. Poiché non è necessario interrompere o riavviare manualmente una determinata istanza, Spanner non offre un modo per farlo.

Passaggi successivi