Membuat dan mengelola instance

Halaman ini menjelaskan cara membuat, mencantumkan, mengedit, dan menghapus instance Spanner.

Membuat instance

Anda dapat membuat instance dengan Google Cloud konsol, Google Cloud CLI, atau library klien. Anda juga dapat membuat instance dengan konfigurasi instance kustom dengan menambahkan replika hanya baca opsional.

Konsol

  1. Di konsol Google Cloud , buka halaman Spanner Instances.

  2. Klik Create instance.

    Buka Buat instance

  3. Di bagian Select an edition, pilih edisi Spanner.

    Jika Anda ingin membandingkan spesifikasi antara edisi yang berbeda, klik Bandingkan edisi. Untuk mengetahui informasi selengkapnya, lihat ringkasan edisi Spanner.

  4. Klik Lanjutkan.

  5. Di bagian Beri nama instance Anda, masukkan Nama instance untuk ditampilkan di konsol Google Cloud . Nama instance harus unik dalam project Google Cloud Anda.

  6. Masukkan ID Instance untuk mengidentifikasi instance Anda secara permanen. ID instance juga harus unik dalam project Google Cloud Anda. Anda tidak dapat mengubah ID instance nanti.

  7. Klik Lanjutkan.

  8. Di bagian Konfigurasi instance Anda, di bagian Pilih konfigurasi, pilih Regional, Dual-region, atau Multi-region.

  9. Pilih lokasi konfigurasi dari menu drop-down.

  10. Opsional: Untuk menambahkan replika hanya baca ke konfigurasi dasar Spanner, buat konfigurasi instance kustom terlebih dahulu menggunakan Google Cloud CLI. Penambahan replika baca saja opsional ke konfigurasi dasar tersedia di edisi Enterprise dan edisi Enterprise Plus.

  11. Klik Lanjutkan.

  12. Di bagian Allocate compute capacity, di bagian Select unit, klik salah satu opsi berikut:

    • Node untuk instance besar. Node adalah 1.000 unit pemrosesan.
    • Unit pemrosesan untuk instance kecil.

    Untuk mengetahui informasi selengkapnya, lihat Kapasitas komputasi, node, dan unit pemrosesan.

  13. Di bagian Pilih mode penskalaan, klik salah satu opsi berikut:

    • Alokasi manual jika Anda ingin menetapkan kapasitas komputasi secara manual untuk biaya dan resource komputasi tetap.

      • Quantity menunjukkan jumlah unit pemrosesan atau node yang akan digunakan untuk instance ini.
    • Penskalaan otomatis agar Spanner dapat menambahkan dan menghapus kapasitas komputasi secara otomatis. Penskalakan otomatis terkelola tersedia di edisi Spanner Enterprise dan Enterprise Plus. Untuk mengetahui informasi selengkapnya tentang penskala otomatis terkelola, lihat Penskala otomatis terkelola untuk Spanner. Konfigurasi opsi penskalaan otomatis terkelola berikut:

      • Minimum menunjukkan batas minimum untuk memperkecil skala, bergantung pada satuan pengukuran yang Anda pilih untuk Kapasitas komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas minimum.
      • Maksimum menunjukkan batas maksimum untuk melakukan penskalaan, bergantung pada satuan pengukuran yang Anda pilih untuk Kapasitas komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas maksimum.
      • Target pemakaian CPU prioritas tinggi menunjukkan target persentase CPU prioritas tinggi yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan CPU.
      • Target pemanfaatan penyimpanan menunjukkan target persentase penyimpanan yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Menentukan Target Pemanfaatan Penyimpanan.
  14. Opsional: Jika Anda memilih Penskalaan otomatis sebagai mode penskalaan, Anda dapat mengklik dropdown Tampilkan opsi penskalaan otomatis asimetris untuk melakukan penskalaan otomatis replika hanya baca secara terpisah dari replika lainnya. Untuk mengetahui informasi selengkapnya, lihat Penskalaan otomatis hanya baca asimetris.

    1. Pilih replika hanya baca yang ingin Anda lakukan penskalaan otomatis asimetris.

    2. Konfigurasi opsi autoscaler asimetris berikut:

      • Minimum menunjukkan batas minimum untuk memperkecil skala, bergantung pada satuan pengukuran yang Anda pilih untuk Kapasitas komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas minimum.
      • Maksimum menunjukkan batas maksimum untuk melakukan penskalaan, bergantung pada satuan pengukuran yang Anda pilih untuk Kapasitas komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas maksimum.
      • Target pemakaian CPU prioritas tinggi menunjukkan target persentase CPU prioritas tinggi yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan CPU.
  15. Di bagian Pencadangan, kotak Aktifkan jadwal pencadangan default dicentang secara default. Untuk menonaktifkan jadwal pencadangan default, hapus centang pada kotak. Jika diaktifkan, semua database baru dalam instance akan memiliki cadangan lengkap yang dibuat setiap 24 jam. Cadangan ini disimpan selama 7 hari. Anda dapat mengedit atau menghapus jadwal pencadangan default kapan saja. Untuk informasi selengkapnya, lihat Jadwal pencadangan default.

  16. Klik Buat untuk membuat instance.

gcloud

Gunakan perintah gcloud spanner instances create untuk membuat instance. Tentukan kapasitas komputasi sebagai jumlah node atau unit pemrosesan yang Anda inginkan di instance.

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

atau

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

Ganti kode berikut:

  • INSTANCE-ID: ID permanen yang unik dalam project Google Cloud Anda. Anda tidak dapat mengubah ID instance nanti.
  • INSTANCE-CONFIG: ID permanen konfigurasi instance Anda, yang menentukan lokasi geografis instance dan memengaruhi cara data direplikasi. Untuk konfigurasi instance kustom, dimulai dengan custom-. Untuk mengetahui informasi selengkapnya, lihat konfigurasi instance.
  • INSTANCE_DESCRIPTION: nama yang akan ditampilkan untuk instance di konsol Google Cloud . Nama instance harus unik dalam project Google Cloud Anda.
  • DEFAULT_BACKUP_SCHEDULE_TYPE: jenis jadwal pencadangan default yang digunakan dalam instance. Harus salah satu dari nilai berikut:

    • AUTOMATIC: jadwal pencadangan default dibuat secara otomatis saat database baru dibuat di instance. Jadwal pencadangan default membuat cadangan penuh setiap 24 jam. Cadangan penuh ini dipertahankan selama 7 hari. Anda dapat mengedit atau menghapus jadwal pencadangan default setelah dibuat.
    • NONE: jadwal pencadangan default tidak dibuat secara otomatis saat database baru dibuat di instance.
  • NODE-COUNT: kapasitas komputasi instance, dinyatakan sebagai jumlah node. Setiap node sama dengan 1.000 unit pemrosesan.

  • PROCESSING_UNIT_COUNT: kapasitas komputasi instance, yang dinyatakan sebagai jumlah unit pemrosesan. Masukkan jumlah hingga 1.000 dalam kelipatan 100 (100, 200, 300, dan seterusnya) dan masukkan jumlah yang lebih besar dalam kelipatan 1.000 (1.000, 2.000, 3.000, dan seterusnya). Catatan: Jangan gunakan parameter ini jika Anda membuat instance yang akan diaktifkan dengan managed autoscaler nanti.

Menambahkan penskalaan otomatis terkelola

Anda juga dapat membuat instance edisi Enterprise dan edisi Enterprise Plus untuk menggunakan penskalaan otomatis terkelola dengan perintah gcloud spanner instances create. Untuk mengetahui informasi selengkapnya, lihat Penskalaan otomatis terkelola untuk Spanner.

Gunakan perintah berikut untuk membuat instance dengan penskala otomatis terkelola.

  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=CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE \
    [--asymmetric-autoscaling-option \
       location=ASYMMETRIC_AUTOSCALING_LOCATION,min_nodes=ASYMMETRIC_AUTOSCALING_MIN,\
       max_nodes=ASYMMETRIC_AUTOSCALING_MAX,high_priority_cpu_target=ASYMMETRIC_CPU_TARGET]

atau

  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=CPU_PERCENTAGE \
    --autoscaling-storage-target=STORAGE_PERCENTAGE \
    [--asymmetric-autoscaling-option \
       location=ASYMMETRIC_AUTOSCALING_LOCATION,min_nodes=ASYMMETRIC_AUTOSCALING_MIN,\
       max_nodes=ASYMMETRIC_AUTOSCALING_MAX,high_priority_cpu_target=ASYMMETRIC_CPU_TARGET]

Ganti kode berikut:

  • INSTANCE-ID: ID permanen yang unik dalam project Google Cloud Anda. Anda tidak dapat mengubah ID instance nanti.
  • INSTANCE-CONFIG: ID permanen konfigurasi instance Anda, yang menentukan lokasi geografis instance dan memengaruhi cara data direplikasi. Untuk konfigurasi instance kustom, dimulai dengan custom-. Untuk mengetahui informasi selengkapnya, lihat konfigurasi instance.
  • INSTANCE-DESCRIPTION: nama yang akan ditampilkan untuk instance di konsol Google Cloud . Nama instance harus unik dalam project Google Cloud Anda.
  • MINIMUM_PROCESSING_UNITS, MINIMUM_NODES: jumlah minimum unit pemrosesan atau node saat menurunkan skala. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas minimum.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: jumlah maksimum unit pemrosesan atau node saat melakukan penskalaan. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas maksimum.
  • CPU_PERCENTAGE: target persentase CPU prioritas tinggi yang akan digunakan, dari 10 hingga 90%. Jika Anda mengoptimalkan biaya, gunakan persentase yang lebih tinggi. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan CPU.
  • STORAGE_PERCENTAGE: target persentase penyimpanan yang akan digunakan, dari 10 hingga 99%. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan penyimpanan.

Flag opsional:

  • --asymmetric-autoscaling-option: gunakan flag ini untuk mengaktifkan penskalaan otomatis asimetris. Ganti parameter berikut:

    • ASYMMETRIC_AUTOSCALING_LOCATION: jika flag digunakan, maka parameter ini wajib ada. Lokasi region hanya baca yang ingin Anda skalakan secara asimetris.
    • ASYMMETRIC_AUTOSCALING_MIN: parameter opsional. Jumlah minimum node saat menurunkan skala.
    • ASYMMETRIC_AUTOSCALING_MAX: parameter opsional. Jumlah maksimum node saat meningkatkan skala.
    • ASYMMETRIC_CPU_TARGET: parameter opsional. Target persentase CPU prioritas tinggi yang akan digunakan, dari 10 hingga 90%. Jika Anda mengoptimalkan biaya, gunakan persentase yang lebih tinggi.

Contoh penggunaan konfigurasi kustom

Untuk membuat instance test-instance dalam konfigurasi instance regional dasar us-central1, jalankan:

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

Untuk membuat instance custom-eur6-instance dalam konfigurasi instance multi-region kustom custom-eur6, pertama-tama buat konfigurasi instance kustom.

Kemudian, jalankan:

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

Anda akan melihat pesan yang mirip dengan contoh berikut setelah menjalankan salah satu perintah sebelumnya:

Creating instance...done.

C++

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Membuat instance tanpa jadwal pencadangan default


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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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
}

Membuat instance dengan penskalaan otomatis terkelola menggunakan 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
}

Membuat instance dengan penskalaan otomatis hanya baca asimetris menggunakan 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
}

Membuat instance tanpa jadwal pencadangan default

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Membuat instance dengan penskalaan otomatis terkelola menggunakan 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");
      }
    }
  }
}

Membuat instance dengan penskalaan otomatis hanya baca asimetris menggunakan 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");
      }
    }
  }
}

Membuat instance tanpa jadwal pencadangan default


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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


// 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);
}

Membuat instance dengan penskalaan otomatis terkelola menggunakan Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

// 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,
});

// Get the instance admin client
const instanceAdminClient = spanner.getInstanceAdminClient();

const autoscalingConfig =
  protos.google.spanner.admin.instance.v1.AutoscalingConfig.create({
    // Only one of minNodes/maxNodes or minProcessingUnits/maxProcessingUnits can be set.
    autoscalingLimits:
      protos.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingLimits.create(
        {
          minNodes: 1,
          maxNodes: 2,
        },
      ),
    // highPriorityCpuUtilizationPercent and storageUtilizationPercent are both
    // percentages and must lie between 0 and 100.
    autoscalingTargets:
      protos.google.spanner.admin.instance.v1.AutoscalingConfig.AutoscalingTargets.create(
        {
          highPriorityCpuUtilizationPercent: 65,
          storageUtilizationPercent: 95,
        },
      ),
  });

// Creates a new instance with autoscaling configuration
// When autoscalingConfig is enabled, nodeCount and processingUnits fields
// need not be specified.
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',
      ),
      displayName: 'Display name for the instance.',
      autoscalingConfig: autoscalingConfig,
      labels: {
        cloud_spanner_samples: 'true',
        created: Math.round(Date.now() / 1000).toString(), // current time
      },
      // Managed autoscaler is available only for ENTERPRISE edition
      edition:
        protos.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE,
    },
  });

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

  // get instance metadata
  const [metadata] = await instanceAdminClient.getInstance({
    name: instanceAdminClient.instancePath(projectId, instanceId),
  });
  console.log(
    `Autoscaling configurations of ${instanceId} are:  ` +
      '\n' +
      `Min nodes: ${metadata.autoscalingConfig.autoscalingLimits.minNodes} ` +
      'nodes.' +
      '\n' +
      `Max nodes: ${metadata.autoscalingConfig.autoscalingLimits.maxNodes}` +
      ' nodes.' +
      '\n' +
      `High priority cpu utilization percent: ${metadata.autoscalingConfig.autoscalingTargets.highPriorityCpuUtilizationPercent}.` +
      '\n' +
      `Storage utilization percent: ${metadata.autoscalingConfig.autoscalingTargets.storageUtilizationPercent}.`,
  );
} catch (err) {
  console.error('ERROR:', err);
}

Membuat instance tanpa jadwal pencadangan default

/**
 * 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Membuat instance dengan penskalaan otomatis terkelola menggunakan Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

def create_instance_with_autoscaling_config(instance_id):
    """Creates a Cloud Spanner instance with an autoscaling configuration."""
    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
    )

    autoscaling_config = spanner_instance_admin.AutoscalingConfig(
        # Only one of minNodes/maxNodes or minProcessingUnits/maxProcessingUnits can be set.
        autoscaling_limits=spanner_instance_admin.AutoscalingConfig.AutoscalingLimits(
            min_nodes=1,
            max_nodes=2,
        ),
        # highPriorityCpuUtilizationPercent and storageUtilizationPercent are both
        # percentages and must lie between 0 and 100.
        autoscaling_targets=spanner_instance_admin.AutoscalingConfig.AutoscalingTargets(
            high_priority_cpu_utilization_percent=65,
            storage_utilization_percent=95,
        ),
    )

    #  Creates a new instance with autoscaling configuration
    #  When autoscalingConfig is enabled, nodeCount and processingUnits fields
    #  need not be specified.
    request = spanner_instance_admin.CreateInstanceRequest(
        parent=spanner_client.project_name,
        instance_id=instance_id,
        instance=spanner_instance_admin.Instance(
            config=config_name,
            display_name="This is a display name.",
            autoscaling_config=autoscaling_config,
            labels={
                "cloud_spanner_samples": "true",
                "sample_name": "snippets-create_instance_with_autoscaling_config",
                "created": str(int(time.time())),
            },
            edition=spanner_instance_admin.Instance.Edition.ENTERPRISE,  # Optional
        ),
    )

    operation = spanner_client.instance_admin_api.create_instance(request=request)

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

    print(
        "Created instance {} with {} autoscaling config".format(
            instance_id, instance.autoscaling_config
        )
    )

Membuat instance tanpa jadwal pencadangan default

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

# 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

Mencantumkan instance

Anda dapat menampilkan daftar instance Spanner.

Konsol

Buka halaman Spanner Instances di konsol Google Cloud .

Buka halaman Instances

Konsol Google Cloud menampilkan daftar instance Spanner Anda, beserta ID, nama tampilan, konfigurasi, dan kapasitas komputasi setiap instance yang dinyatakan dalam unit pemrosesan dan node.

gcloud

Gunakan perintah gcloud spanner instances list:

gcloud spanner instances list

gcloud CLI mencetak daftar instance Spanner Anda, beserta ID, nama tampilan, konfigurasi, dan kapasitas komputasi setiap instance.

Mengedit instance

Bagian berikut menjelaskan cara mengupgrade edisi instance, dan mengubah nama tampilan, kapasitas komputasi, dan jenis jadwal pencadangan default instance. Anda tidak dapat mengubah ID instance atau konfigurasi instance (namun, Anda dapat memindahkan instance).

Mengupgrade edisi

Anda dapat mengupgrade instance edisi Standard ke edisi tingkat yang lebih tinggi. Instance edisi Standard dapat diupgrade ke edisi Enterprise atau Enterprise Plus. Instance edisi Enterprise dapat diupgrade ke edisi Enterprise Plus. Upgrade edisi memerlukan waktu sekitar 10 menit untuk diselesaikan tanpa periode nonaktif.

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang ingin Anda upgrade.

  3. Klik Upgrade di samping jenis edisi.

  4. Di halaman Instance edisi, dan di bagian Perbarui edisi, pilih edisi tingkat yang lebih tinggi yang baru untuk instance Anda.

  5. Klik Simpan.

gcloud

Gunakan perintah gcloud spanner instances update untuk mengupgrade edisi instance Anda:

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

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • EDITION: tentukan edisi tingkat yang lebih tinggi untuk instance Anda. Untuk mengetahui informasi selengkapnya, lihat Ringkasan edisi Spanner.

Flag opsional:

  • --async: Gunakan tanda ini jika Anda ingin permintaan segera ditampilkan, tanpa menunggu operasi yang sedang berlangsung selesai. Anda dapat memeriksa status permintaan dengan menjalankan gcloud spanner operations describe.

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

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


// 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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(900)

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

Mendowngrade edisi

Anda dapat mendowngrade instance Spanner ke edisi tingkat yang lebih rendah. Anda harus berhenti menggunakan fitur edisi tingkat yang lebih tinggi untuk melakukan downgrade. Instance edisi Enterprise dapat didowngrade ke edisi Standard. Instance edisi Enterprise Plus dapat di-downgrade ke edisi Enterprise atau Standard. Penurunan versi edisi memerlukan waktu sekitar 10 menit untuk diselesaikan tanpa waktu henti.

gcloud

Gunakan perintah gcloud spanner instances update untuk mendowngrade edisi instance Anda:

gcloud spanner instances update INSTANCE_ID --edition=EDITION

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • EDITION: tentukan edisi tingkat bawah baru untuk instance Anda. Untuk mengetahui informasi selengkapnya, lihat Ringkasan edisi Spanner.

Mengubah nama tampilan

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang ingin Anda ganti namanya.

  3. Klik Edit instance.

  4. Masukkan nama instance baru. Nama ini harus unik dalam Google Cloud project.

  5. Klik Simpan.

gcloud

Gunakan perintah gcloud spanner instances update:

gcloud spanner instances update INSTANCE_ID --description=INSTANCE_NAME

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • INSTANCE_NAME: nama yang akan ditampilkan untuk instance di konsol Google Cloud . Nama instance harus unik dalam project Google Cloud Anda.

Mengubah kapasitas komputasi

Anda harus menyediakan kapasitas komputasi yang cukup untuk menjaga pemanfaatan CPU dan pemanfaatan penyimpanan di bawah nilai maksimum yang direkomendasikan. Untuk mengetahui informasi selengkapnya, lihat kuota dan batas untuk Spanner.

Ada beberapa kasus saat Anda tidak dapat mengurangi kapasitas komputasi instance yang ada:

  • Menghapus kapasitas komputasi mengharuskan instance Anda menyimpan lebih dari 10 TiB data per 1.000 unit pemrosesan (1 node).
  • Berdasarkan pola penggunaan historis Anda, Spanner telah membuat sejumlah besar pemisahan untuk data instance Anda, dan dalam beberapa kasus yang jarang terjadi, Spanner tidak dapat mengelola pemisahan setelah menghapus kapasitas komputasi.

Dalam kasus terakhir, Anda dapat mencoba mengurangi kapasitas komputasi dengan jumlah yang semakin kecil hingga Anda menemukan kapasitas minimum yang dibutuhkan Spanner untuk mengelola semua pemisahan instance. Jika instance tidak lagi memerlukan banyak pemisahan karena perubahan pola penggunaan, Spanner mungkin akan menggabungkan beberapa pemisahan dan memungkinkan Anda mencoba mengurangi kapasitas komputasi instance lebih lanjut setelah satu atau dua minggu.

Saat menghapus kapasitas komputasi, pantau penggunaan CPU dan latensi permintaan Anda di Cloud Monitoring untuk memastikan penggunaan CPU tetap di bawah 65% untuk instance regional dan 45% untuk setiap region di instance multi-region. Anda mungkin mengalami peningkatan sementara latensi permintaan saat menghapus kapasitas komputasi.

Jika Anda ingin meningkatkan kapasitas komputasi instance, project Google Cloud Anda harus memiliki kuota yang memadai untuk menambahkan kapasitas komputasi. Waktu yang diperlukan untuk menyelesaikan permintaan peningkatan bergantung pada ukuran permintaan. Biasanya, permintaan selesai dalam beberapa menit. Terkadang, penskalaan mungkin memerlukan waktu hingga satu jam untuk selesai.

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang ingin Anda ubah.

  3. Klik Edit Instance.

  4. Ubah kapasitas komputasi dengan memilih satuan pengukuran (unit pemrosesan atau node), lalu masukkan jumlah. Saat menggunakan unit pemrosesan, masukkan jumlah hingga 1.000 dalam kelipatan 100 (100, 200, 300, dan seterusnya) dan masukkan jumlah yang lebih besar dalam kelipatan 1.000 (1.000, 2.000, 3.000, dan seterusnya). Setiap node sama dengan 1.000 unit pemrosesan.

  5. Klik Simpan.

Jika Anda melihat dialog yang menyatakan bahwa Anda tidak memiliki kuota yang cukup untuk menambahkan kapasitas komputasi di lokasi ini, ikuti petunjuk untuk meminta kuota yang lebih tinggi.

gcloud

Gunakan perintah gcloud spanner instances update. Saat menggunakan perintah ini, tentukan kapasitas komputasi sebagai jumlah node atau unit pemrosesan.

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

atau

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

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • NODE_COUNT: kapasitas komputasi instance, dinyatakan sebagai jumlah node. Setiap node sama dengan 1.000 unit pemrosesan.
  • PROCESSING_UNIT_COUNT: kapasitas komputasi instance, yang dinyatakan sebagai jumlah unit pemrosesan. Masukkan jumlah hingga 1.000 dalam kelipatan 100 (100, 200, 300, dan seterusnya) dan masukkan jumlah yang lebih besar dalam kelipatan 1.000 (1.000, 2.000, 3.000, dan seterusnya).

Flag opsional:

  • --async: Gunakan tanda ini jika Anda ingin permintaan segera ditampilkan, tanpa menunggu operasi yang sedang berlangsung selesai. Anda dapat memeriksa status permintaan dengan menjalankan gcloud spanner operations describe.

Mengaktifkan atau mengubah penskalaan otomatis terkelola pada instance

Batasan berikut berlaku saat Anda menambahkan atau mengubah fitur penskalaan otomatis terkelola pada instance yang ada:

  • Penskala otomatis terkelola hanya tersedia di edisi Enterprise atau edisi Enterprise Plus.
  • Anda tidak dapat mengaktifkan penskala otomatis terkelola pada instance yang sedang Anda pindahkan.
  • Anda tidak dapat memindahkan instance saat penskalaan otomatis terkelola diaktifkan.

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang ingin Anda aktifkan penskalaan otomatis terkelola.

  3. Klik Edit instance.

  4. Di bagian Configure compute capacity, klik Autoscaling.

  5. Untuk Minimum, pilih batas minimum yang akan digunakan saat menurunkan skala. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas minimum.

  6. Untuk Maksimum, pilih batas maksimum yang akan digunakan saat melakukan penskalaan. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas maksimum.

  7. Untuk Target pemakaian CPU prioritas tinggi, pilih persentase CPU prioritas tinggi yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan CPU.

  8. Untuk Target pemanfaatan penyimpanan, pilih persentase penyimpanan yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan penyimpanan.

  9. Opsional: Jika Anda memilih Penskalaan otomatis sebagai mode penskalaan, Anda dapat mengklik dropdown Tampilkan opsi penskalaan otomatis asimetris untuk melakukan penskalaan otomatis replika hanya baca secara terpisah dari replika lainnya.

    1. Pilih replika hanya baca yang ingin Anda lakukan penskalaan otomatis asimetris.

    2. Konfigurasi opsi autoscaler berikut:

      • Minimum menunjukkan batas minimum untuk memperkecil skala, bergantung pada satuan pengukuran yang Anda pilih untuk Kapasitas komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas minimum.
      • Maksimum menunjukkan batas maksimum untuk melakukan penskalaan, bergantung pada satuan pengukuran yang Anda pilih untuk Kapasitas komputasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas maksimum.
      • Target pemakaian CPU prioritas tinggi menunjukkan target persentase CPU prioritas tinggi yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan CPU.
  10. Klik Simpan.

gcloud

Gunakan perintah gcloud spanner instances update untuk menambahkan penskala otomatis terkelola ke instance. Untuk mengetahui informasi dan batasan selengkapnya, lihat Flag Google Cloud CLI dan batasan.

Anda dapat menambahkan autoscaler terkelola dengan perintah berikut:

  gcloud 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 \
    [--asymmetric-autoscaling-option \
       location=ASYMMETRIC_AUTOSCALING_LOCATION,min_nodes=ASYMMETRIC_AUTOSCALING_MIN,\
       max_nodes=ASYMMETRIC_AUTOSCALING_MAX,high_priority_cpu_target=ASYMMETRIC_CPU_TARGET]

atau

  gcloud 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 \
    [--asymmetric-autoscaling-option \
       location=ASYMMETRIC_AUTOSCALING_LOCATION,min_nodes=ASYMMETRIC_AUTOSCALING_MIN,\
       max_nodes=ASYMMETRIC_AUTOSCALING_MAX,high_priority_cpu_target=ASYMMETRIC_CPU_TARGET]

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • MINIMUM_PROCESSING_UNITS, MINIMUM_NODES: jumlah minimum unit pemrosesan atau node yang akan digunakan saat menurunkan skala. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas minimum.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: jumlah maksimum unit pemrosesan atau node yang akan digunakan saat melakukan penskalaan. Untuk mengetahui informasi selengkapnya, lihat Menentukan batas maksimum.
  • CPU_PERCENTAGE: persentase target CPU prioritas tinggi yang akan digunakan, dari 10% hingga 90%. Jika Anda mengoptimalkan biaya dan tidak memerlukan latensi rendah pada semua permintaan, gunakan persentase yang lebih tinggi. Untuk mengetahui informasi selengkapnya, lihat Menentukan target pemanfaatan CPU.
  • STORAGE_PERCENTAGE: target persentase penyimpanan yang akan digunakan, dari 10% hingga 99%. Untuk mengetahui informasi selengkapnya, lihat Menentukan Target Pemanfaatan Penyimpanan.

Flag opsional:

  • --asymmetric-autoscaling-option: Gunakan flag ini untuk mengaktifkan penskalaan otomatis asimetris. Ganti parameter berikut:

    • ASYMMETRIC_AUTOSCALING_LOCATION: jika flag digunakan, maka parameter ini wajib ada. Lokasi region hanya baca yang ingin Anda skalakan secara asimetris.
    • ASYMMETRIC_AUTOSCALING_MIN: parameter opsional. Jumlah minimum node saat menurunkan skala.
    • ASYMMETRIC_AUTOSCALING_MAX: parameter opsional. Jumlah maksimum node saat meningkatkan skala.
    • ASYMMETRIC_CPU_TARGET: parameter opsional. Target persentase CPU prioritas tinggi yang akan digunakan, dari 10 hingga 90%. Jika Anda mengoptimalkan biaya, gunakan persentase yang lebih tinggi.

Setelah menambahkan penskala otomatis terkelola ke instance, Anda juga dapat mengubah setelan penskala otomatis terkelola. Misalnya, jika Anda ingin meningkatkan jumlah maksimum unit pemrosesan menjadi 10000, jalankan perintah berikut:

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

Mengubah instance dari menggunakan penskalaan otomatis terkelola ke penskalaan manual

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang ingin Anda nonaktifkan penskalaan otomatis terkelola.

  3. Di bagian Pilih mode penskalaan, klik Alokasi manual.

  4. Klik Simpan.

gcloud

Gunakan perintah gcloud spanner instances update untuk memperbarui instance.

Gunakan perintah berikut untuk mengubah instance dari menggunakan penskalaan otomatis terkelola ke penskalaan manual:

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

atau

  gcloud spanner instances update INSTANCE_ID \
  --nodes=NODE_COUNT

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • NODE_COUNT: kapasitas komputasi instance, dinyatakan sebagai jumlah node. Setiap node sama dengan 1.000 unit pemrosesan.
  • PROCESSING_UNIT_COUNT: kapasitas komputasi instance, yang dinyatakan sebagai jumlah unit pemrosesan. Masukkan jumlah hingga 1.000 dalam kelipatan 100 (100, 200, 300, dan seterusnya) dan masukkan jumlah yang lebih besar dalam kelipatan 1.000 (1.000, 2.000, 3.000, dan seterusnya).

Memberi label instance

Label membantu mengatur resource Anda.

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Centang kotak untuk instance. Panel info muncul di sisi kanan halaman.

  3. Klik tab Label di Panel info. Kemudian, Anda dapat menambahkan, menghapus atau memperbarui label untuk instance Spanner.

Mengedit jenis jadwal pencadangan default

Jadwal pencadangan default diaktifkan secara otomatis untuk semua instance baru. Anda dapat mengaktifkan atau menonaktifkan jadwal pencadangan default di instance saat membuat instance atau dengan mengedit instance nanti. Untuk mengetahui informasi selengkapnya, lihat Jadwal pencadangan default.

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang jadwal pencadangan defaultnya ingin Anda edit.

  3. Klik Edit instance.

  4. Di bagian Pencadangan, kotak centang Aktifkan jadwal pencadangan default menentukan apakah jadwal pencadangan default diaktifkan atau tidak. Jika diaktifkan, semua database baru di instance ini akan memiliki jadwal pencadangan default yang dibuat.

  5. Klik Simpan.

gcloud

Gunakan perintah gcloud spanner instances update untuk mengedit jenis jadwal pencadangan default.

Anda dapat mengedit jenis jadwal pencadangan default dengan menjalankan perintah berikut:

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

Ganti kode berikut:

  • INSTANCE_ID: ID permanen untuk instance.
  • DEFAULT_BACKUP_SCHEDULE_TYPE: jenis jadwal pencadangan default yang digunakan dalam instance. Harus salah satu dari nilai berikut:

    • AUTOMATIC: jadwal pencadangan default dibuat secara otomatis saat database baru dibuat di instance. Jadwal pencadangan default membuat cadangan penuh setiap 24 jam. Cadangan penuh ini dipertahankan selama 7 hari. Anda dapat mengedit atau menghapus jadwal pencadangan default setelah dibuat.
    • NONE: jadwal pencadangan default tidak dibuat secara otomatis saat database baru dibuat di instance.

C#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

/**
 * 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.

Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Memindahkan instance

Untuk mengetahui petunjuk cara memindahkan instance dari konfigurasi instance apa pun ke konfigurasi instance lainnya, termasuk antara konfigurasi regional dan multi-regional, lihat Memindahkan instance.

Menghapus instance

Anda dapat menghapus instance dengan Google Cloud konsol atau Google Cloud CLI.

Jika Anda ingin menghapus instance yang memiliki satu atau beberapa database dengan perlindungan penghapusan diaktifkan, Anda harus menonaktifkan perlindungan penghapusan di semua database dalam instance tersebut terlebih dahulu sebelum dapat menghapus instance.

Konsol

  1. Buka halaman Spanner Instances di konsol Google Cloud .

    Buka halaman Instances

  2. Klik nama instance yang ingin Anda hapus.

  3. Klik Hapus instance.

  4. Ikuti petunjuk untuk mengonfirmasi bahwa Anda ingin menghapus instance.

  5. Klik Hapus.

gcloud

Gunakan perintah gcloud spanner instances delete, ganti INSTANCE_ID dengan ID instance:

gcloud spanner instances delete INSTANCE_ID

Menghentikan atau memulai ulang instance

Spanner adalah layanan database terkelola sepenuhnya yang mengawasi tugas dan resource pokoknya sendiri, termasuk memantau dan memulai ulang proses jika diperlukan tanpa periode nonaktif. Karena tidak perlu menghentikan atau memulai ulang instance tertentu secara manual, Spanner tidak menawarkan cara untuk melakukannya.

Langkah berikutnya