인스턴스 만들기 및 관리

이 페이지에서는 Spanner 인스턴스의 생성, 나열, 수정 및 삭제 방법을 설명합니다.

인스턴스 만들기

Google Cloud 콘솔, Google Cloud CLI 또는 클라이언트 라이브러리를 사용하여 인스턴스를 만들 수 있습니다. 또한 선택적읽기 전용 복제본 값을 추가하여 커스텀 인스턴스 구성으로 인스턴스를 만들 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기

  2. Google Cloud 콘솔에 표시할 인스턴스 이름을 입력합니다. 인스턴스 이름은 Google Cloud 프로젝트 내에서 고유해야 합니다.

  3. 인스턴스를 영구적으로 식별하는 인스턴스 ID를 입력합니다. 인스턴스 ID도 Google Cloud 프로젝트 내에서 고유해야 합니다. 인스턴스 ID는 나중에 변경할 수 없습니다.

  4. 구성 선택에서 리전 또는 멀티 리전을 클릭합니다. 또는 두 리전 간 사양을 비교하려면 리전 구성 비교를 클릭합니다.

  5. 드롭다운에서 구성을 선택합니다.

  6. 선택사항: 읽기를 확장하고 지연 시간이 짧은 비활성 읽기를 지원하도록 읽기 전용 복제본을 추가합니다. Google Cloud 콘솔을 사용하여 인스턴스 구성에 읽기 전용 복제본을 만들고 추가하면 커스텀 인스턴스 구성이 자동으로 생성됩니다. 읽기 전용 복제본을 추가하려면 다음을 수행합니다.

    1. 읽기 전용 복제본 구성을 확장합니다.

    2. 읽기 전용 복제본 추가를 클릭합니다.

    3. 리전과 번호를 선택합니다.

  7. 컴퓨팅 용량 구성 섹션의 단위 선택에서 다음 중 하나를 클릭합니다.

    • 작은 인스턴스의 경우 처리 단위
    • 큰 인스턴스의 경우 노드. 노드 하나는 처리 단위 1,000개입니다.

    자세한 내용은 컴퓨팅 용량, 노드, 처리 단위를 참조하세요.

  8. 확장 모드 선택에서 다음 중 하나를 클릭합니다.

    • 고정된 컴퓨팅 리소스 및 비용을 위해 컴퓨팅 용량을 수동으로 설정하려면 수동 할당

      • 수량은 이 인스턴스에 사용할 처리 단위 또는 노드 수를 나타냅니다.
    • Spanner가 컴퓨팅 용량을 자동으로 추가 및 삭제하도록 허용하려면 자동 확장(미리보기). 관리형 자동 확장 처리에 대한 자세한 내용은 Spanner의 관리형 자동 확장 처리를 참조하세요. 다음 관리형 자동 확장 처리 옵션을 구성합니다.

      • 최소컴퓨팅 용량에 대해 선택하는 측정 단위에 따라 축소할 최소 한도를 나타냅니다. 자세한 내용은 최소 한도 확인을 참조하세요.
      • 최대컴퓨팅 용량에 대해 선택하는 측정 단위에 따라 수직 확장할 최대 한도를 나타냅니다. 자세한 내용은 최대 한도 확인을 참조하세요.
      • 높은 우선순위 CPU 사용률 목표는 사용할 높은 우선순위 CPU의 목표 백분율을 나타냅니다. 자세한 내용은 CPU 사용률 목표 확인을 참조하세요.
      • 스토리지 사용률 목표는 사용할 스토리지의 목표 백분율을 나타냅니다. 자세한 내용은 스토리지 사용률 목표 확인을 참조하세요.
  9. 만들기를 클릭하여 인스턴스를 만듭니다.

gcloud

gcloud spanner instances create 명령어를 사용하여 인스턴스를 만듭니다. 컴퓨팅 용량을 인스턴스에 사용할 노드 또는 처리 단위 수로 지정합니다.

gcloud spanner instances create INSTANCE-ID \
--config=INSTANCE-CONFIG \
--description=INSTANCE-DESCRIPTION \
--nodes=NODE-COUNT

또는

gcloud spanner instances create INSTANCE-ID \
--config=INSTANCE-CONFIG \
--description=INSTANCE-DESCRIPTION \
--processing-units=PROCESSING-UNIT-COUNT

다음을 바꿉니다.

  • INSTANCE-ID: Google Cloud 프로젝트 내에서 고유한 영구 식별자입니다. 인스턴스 ID는 나중에 변경할 수 없습니다.
  • INSTANCE-CONFIG: 인스턴스의 지리적 위치를 정의하고 데이터 복제 방식에 영향을 주는 인스턴스 구성의 영구 식별자입니다. 커스텀 인스턴스 구성의 경우 custom-로 시작합니다. 자세한 내용은 인스턴스 구성을 참조하세요.
  • INSTANCE-DESCRIPTION: Google Cloud 콘솔에 표시되는 인스턴스 이름입니다. 인스턴스 이름은 Google Cloud 프로젝트 내에서 고유해야 합니다.
  • NODE-COUNT: 인스턴스의 컴퓨팅 용량으로서 노드 수로 표현됩니다. 노드 1개는 처리 단위 1,000개와 같습니다.

  • PROCESSING-UNIT-COUNT: 인스턴스의 컴퓨팅 용량으로서 처리 단위 수로 표현됩니다. 최대 1,000개까지는 100의 배수(100, 200, 300 등)로 수량을 입력하고 더 큰 수량은 1,000의 배수(1000, 2000, 3000 등)로 입력합니다. 참고: 나중에 관리형 자동 확장 처리를 사용해서 사용 설정하려는 인스턴스를 만들 경우에는 이 매개변수를 사용하지 마세요.

관리형 자동 확장 추가(미리보기)

또한 gcloud beta spanner instances create 명령어로 관리형 자동 확장을 사용하도록 새 인스턴스를 구성할 수 있습니다. 자세한 내용은 Spanner의 관리형 자동 확장 처리를 참조하세요.

다음 명령어를 사용하여 관리형 자동 확장 처리로 인스턴스를 만듭니다.

  gcloud beta spanner instances create INSTANCE-ID \
    --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

또는

  gcloud beta spanner instances create INSTANCE-ID \
    --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

다음을 바꿉니다.

  • INSTANCE-ID: Google Cloud 프로젝트 내에서 고유한 영구 식별자입니다. 인스턴스 ID는 나중에 변경할 수 없습니다.
  • INSTANCE-CONFIG: 인스턴스의 지리적 위치를 정의하고 데이터 복제 방식에 영향을 주는 인스턴스 구성의 영구 식별자입니다. 커스텀 인스턴스 구성의 경우 custom-로 시작합니다. 자세한 내용은 인스턴스 구성을 참조하세요.
  • INSTANCE-DESCRIPTION: Google Cloud 콘솔에 표시되는 인스턴스 이름입니다. 인스턴스 이름은 Google Cloud 프로젝트 내에서 고유해야 합니다.
  • MINIMUM_PROCESSING_UNITS, MINIMUM_NODES: 축소 시 처리 단위 또는 노드의 최소 개수입니다. 자세한 내용은 최소 한도 확인을 참조하세요.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: 확장 시 처리 단위 또는 노드의 최대 개수입니다. 자세한 내용은 최대 한도 확인을 참조하세요.
  • CPU_PERCENTAGE: 사용할 높은 우선순위 CPU의 목표 백분율입니다(10~90%). 비용을 최적화하는 경우 높은 백분율을 사용합니다. 자세한 내용은 CPU 사용률 목표 확인을 참조하세요.
  • STORAGE_PERCENTAGE: 사용할 스토리지의 목표 백분율입니다(10~99%). 자세한 내용은 스토리지 사용률 목표 확인을 참조하세요.

커스텀 구성 사용 예시

기본 리전 인스턴스 구성 us-central1에서 test-instance 인스턴스를 만들려면 다음을 실행합니다.

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

커스텀 멀티 리전 인스턴스 구성 custom-eur6에서 custom-eur6-instance 인스턴스를 만들려면 먼저 커스텀 인스턴스 구성 만들기를 수행합니다.

그런 후 다음을 실행합니다.

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

위의 명령어 중 하나를 실행하면 다음 예시와 유사한 메시지가 표시됩니다.

Creating instance...done.

C++

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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#

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


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

public class CreateInstanceSample
{
    public Instance CreateInstance(string projectId, string instanceId)
    {
        // Create the InstanceAdminClient instance.
        InstanceAdminClient instanceAdminClient = InstanceAdminClient.Create();

        // 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" },
            }
        };
        ProjectName projectName = ProjectName.FromProject(projectId);

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

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

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

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

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

        return completedResponse.Result;
    }
}

Go

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import (
	"context"
	"fmt"
	"io"

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

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

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

Java

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


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)
            .setNodeCount(nodeCount)
            .setConfig(
                InstanceConfigName.of(projectId, "regional-us-central1").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");
    }
  }
}

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

Node.js

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


// Imports the Google Cloud client library
const {Spanner} = 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
      },
    },
  });

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

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

PHP

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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())),
            },
        ),
    )

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

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

Ruby

Spanner용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Spanner 클라이언트 라이브러리를 참조하세요.

Spanner에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

# project_id  = "Your Google Cloud project ID"
# instance_id = "Your Spanner instance 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: "regional-us-central1"

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

인스턴스 나열

Spanner 인스턴스 목록을 표시할 수 있습니다.

콘솔

Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

인스턴스 페이지로 이동

Google Cloud 콘솔에는 Spanner 인스턴스 목록과 함께 각 인스턴스의 ID, 표시 이름, 구성, 처리 장치와 노드 모두에 표현된 컴퓨팅 용량이 표시됩니다.

gcloud

gcloud spanner instances list 명령어를 사용합니다.

gcloud spanner instances list

그러면 gcloud CLI에서 Spanner 인스턴스 목록과 함께 각 인스턴스의 ID, 표시 이름, 구성, 컴퓨팅 용량을 출력합니다.

인스턴스 수정

다음 섹션에서는 인스턴스의 디스플레이 이름 및 컴퓨팅 용량을 변경하는 방법을 설명합니다. 인스턴스 ID나 인스턴스 구성은 변경할 수 없습니다.

표시 이름 변경

콘솔

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 이름을 바꿀 인스턴스 이름을 클릭합니다.

  3. 인스턴스 수정을 클릭합니다.

  4. 새 인스턴스 이름을 입력합니다. 이 이름은 Google Cloud 프로젝트 내에서 고유해야 합니다.

  5. 저장을 클릭합니다.

gcloud

gcloud spanner instances update 명령어를 사용합니다.

gcloud spanner instances update INSTANCE-ID --description=INSTANCE-NAME

다음을 바꿉니다.

  • INSTANCE-ID: 인스턴스의 영구 식별자입니다.
  • INSTANCE-NAME: Google Cloud 콘솔에 표시되는 인스턴스 이름입니다. 인스턴스 이름은 Google Cloud 프로젝트 내에서 고유해야 합니다.

컴퓨팅 용량 변경

CPU 사용률스토리지 사용률을 권장 최댓값 아래로 유지할 수 있도록 컴퓨팅 용량을 충분하게 프로비저닝해야 합니다. 자세한 내용은 Spanner의 할당량 및 한도를 참조하세요.

다음과 같이 기존 인스턴스의 컴퓨팅 용량을 줄일 수 없는 몇 가지 경우가 있습니다.

  • 컴퓨팅 용량을 삭제하려면 인스턴스에서 처리 단위 1,000개(노드 1개)당 데이터를 4TB 넘게 저장해야 하는 경우
  • 과거 사용량 패턴에 따라 Spanner에서 다수의 인스턴스 데이터 분할을 만들었으며 드물게는 컴퓨팅 용량 삭제 후에 Spanner에서 분할을 관리할 수 없게 되는 경우

후자의 경우 Spanner에서 모든 인스턴스 분할을 관리하는 데 필요한 최소 용량을 확보할 때까지 컴퓨팅 용량을 점진적으로 조금씩 줄여봅니다. 사용량 패턴 변경으로 인해 인스턴스에 더 이상 많은 분할이 필요하지 않은 경우 Spanner에서 일부 분할을 병합하여 1~2주 후에 인스턴스의 컴퓨팅 용량을 더 줄일 수 있습니다.

컴퓨팅 용량을 삭제할 때 CPU 사용률을 모니터링하고 Cloud Monitoring에서 지연 시간을 요청하여 CPU 사용률이 리전 인스턴스의 경우 65% 미만, 멀티 리전 인스턴스의 각 리전에서 45% 미만으로 유지되도록 합니다. 컴퓨팅 용량을 삭제하는 동안 요청 지연 시간이 일시적으로 늘어날 수 있습니다.

인스턴스의 컴퓨팅 용량을 늘리려면 Google Cloud 프로젝트에 컴퓨팅 용량을 추가할 수 있을 만큼 충분한 할당량이 있어야 합니다.

콘솔

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 변경하려는 인스턴스의 이름을 클릭합니다.

  3. 인스턴스 수정을 클릭합니다.

  4. 측정 단위(처리 단위 또는 노드)를 선택한 후 수량을 입력하여 컴퓨팅 용량을 변경합니다. 처리 단위를 사용하는 경우 최대 1,000개까지는 100의 배수(100, 200, 300 등)로 수량을 입력하고 더 큰 수량은 1,000의 배수(1000, 2000, 3000 등)로 입력합니다. 노드 1개는 처리 단위 1,000개와 같습니다.

  5. 저장을 클릭합니다.

할당량이 부족하여 이 위치에 컴퓨팅 용량을 추가할 수 없다는 대화상자가 표시되면 안내에 따라 할당량 상향을 요청하세요.

gcloud

gcloud spanner instances update 명령어를 사용합니다. 이 명령어를 사용할 때 컴퓨팅 용량을 숫자, 노드 또는 처리 단위로 지정합니다.

gcloud spanner instances update INSTANCE-ID --nodes=NODE-COUNT

또는

gcloud spanner instances update INSTANCE-ID
--processing-units=PROCESSING-UNIT-COUNT

다음을 바꿉니다.

  • INSTANCE-ID: 인스턴스의 영구 식별자입니다.
  • NODE-COUNT: 인스턴스의 컴퓨팅 용량으로서 노드 수로 표현됩니다. 노드 1개는 처리 단위 1,000개와 같습니다.
  • PROCESSING-UNIT-COUNT: 인스턴스의 컴퓨팅 용량으로서 처리 단위 수로 표현됩니다. 최대 1,000개까지는 100의 배수(100, 200, 300 등)로 수량을 입력하고 더 큰 수량은 1,000의 배수(1000, 2000, 3000 등)로 입력합니다.

인스턴스에서 관리형 자동 확장 처리 사용 설정 또는 수정

기존 인스턴스에서 관리형 자동 확장 기능을 추가하거나 변경할 때는 다음과 같은 제한사항이 적용됩니다.

  • 이동 중인 인스턴스에서는 관리형 자동 확장 처리를 사용 설정할 수 없습니다.
  • 관리형 자동 확장 처리가 사용 설정된 상태에서는 인스턴스를 이동할 수 없습니다.

콘솔

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 관리형 자동 확장 처리를 사용 설정하려는 인스턴스의 이름을 클릭합니다.

  3. 인스턴스 수정을 클릭합니다.

  4. 컴퓨팅 용량 구성에서 자동 확장을 클릭합니다.

  5. 최소에 대해 축소 시 사용할 최소 한도를 선택합니다. 자세한 내용은 최소 한도 확인을 참조하세요.

  6. 최대에 대해 확장 시 사용할 최대 한도를 선택합니다. 자세한 내용은 최대 한도 확인을 참조하세요.

  7. 높은 우선순위 CPU 사용률 목표에 대해 사용할 높은 우선순위 CPU 백분율을 선택합니다. 자세한 내용은 CPU 사용률 목표 확인을 참조하세요.

  8. 스토리지 사용률 목표에 대해 사용할 스토리지의 백분율을 선택합니다. 자세한 내용은 스토리지 사용률 목표 확인을 참조하세요.

  9. 저장을 클릭합니다.

gcloud

gcloud beta spanner instances update 명령어를 사용해서 인스턴스에 관리형 자동 확장 처리를 추가합니다. 자세한 내용 및 제한사항은 Google Cloud CLI 플래그 및 제한상을 참조하세요.

다음 명령어를 사용하여 관리형 자동 확장 처리를 추가할 수 있습니다.

  gcloud beta spanner instances update \
    --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

또는

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

다음을 바꿉니다.

  • MINIMUM_PROCESSING_UNITS, MINIMUM_NODES: 축소 시 사용할 처리 단위 또는 노드의 최소 개수입니다. 자세한 내용은 최소 한도 확인을 참조하세요.
  • MAXIMUM_PROCESSING_UNITS, MAXIMUM_NODES: 확장 시 사용할 처리 단위 또는 노드의 최대 개수입니다. 자세한 내용은 최대 한도 확인을 참조하세요.
  • CPU_PERCENTAGE: 사용할 높은 우선순위 CPU의 목표 백분율입니다(10~90%). 비용을 최적화해야 하고 모든 요청에서 낮은 지연 시간이 필요하지 않으면 높은 백분율을 사용합니다. 자세한 내용은 CPU 사용률 목표 확인을 참조하세요.
  • STORAGE_PERCENTAGE: 사용할 스토리지의 목표 백분율입니다(10~99%). 자세한 내용은 스토리지 사용률 목표 확인을 참조하세요.

또한 인스턴스에 관리형 자동 확장 처리를 추가한 후 관리형 자동 확장 처리 설정을 수정할 수 있습니다. 예를 들어 처리 단위의 최대 개수를 10,000으로 늘리려면 다음 명령어를 실행합니다.

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

관리형 자동 확장 처리 사용에서 수동 확장으로 인스턴스 변경

콘솔

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 관리형 자동 확장 처리를 사용 중지하려는 인스턴스 이름을 클릭합니다.

  3. 확장 모드 선택에서 수동 할당을 클릭합니다.

  4. 저장을 클릭합니다.

gcloud

gcloud beta spanner instances update 명령어를 사용해서 인스턴스를 업데이트합니다.

다음 명령어를 사용하여 관리형 자동 확장 처리에서 수동 확장으로 인스턴스를 변경합니다.

  gcloud beta spanner instances update \
  --processing-units=PROCESSING-UNITS-COUNT

또는

  gcloud beta spanner instances update \
  --nodes=NODE-COUNT

PROCESSING-UNIT-COUNT 또는 NODE-COUNT를 인스턴스에 사용하려는 처리 단위 또는 노드 개수로 바꿉니다.

인스턴스 라벨 지정

라벨은 리소스를 정리하는 데 도움이 됩니다.

콘솔

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 인스턴스의 확인란을 선택합니다. 페이지 오른쪽에 정보 패널이 나타납니다.

  3. 정보 패널에서 라벨 탭을 클릭합니다. 그런 다음 Spanner 인스턴스의 라벨을 추가, 삭제 또는 업데이트할 수 있습니다.

인스턴스 이동

리전과 멀티 리전 구성 사이의 이동을 포함하여 인스턴스 구성에서 다른 인스턴스 구성으로 인스턴스를 이동하는 방법은 인스턴스 이동을 참조하세요.

인스턴스 삭제

Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 인스턴스를 삭제할 수 있습니다.

삭제 보호가 사용 설정된 데이터베이스가 하나 이상 있는 인스턴스를 삭제하려면 인스턴스를 삭제하기 전에 먼저 해당 인스턴스의 모든 데이터베이스에서 삭제 보호를 사용 중지해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 삭제하려는 인스턴스의 이름을 클릭합니다.

  3. 인스턴스 삭제를 클릭합니다.

  4. 안내에 따라 인스턴스를 삭제할 것인지 확인합니다.

  5. 삭제를 클릭합니다.

gcloud

gcloud spanner instances delete 명령어를 사용합니다. 여기서 INSTANCE-ID는 인스턴스 ID로 바꿉니다.

gcloud spanner instances delete INSTANCE-ID

인스턴스 중지 또는 다시 시작

Spanner는 완전 관리형 데이터베이스 서비스로, 다운타임 없이 프로세스 모니터링과 재시작을 포함하여 자체적인 기본 태스크 및 리소스를 감독합니다. 특정 인스턴스는 수동으로 중지하거나 다시 시작할 필요가 없으므로 Spanner에서 이러한 기능을 제공하지 않습니다.

다음 단계