インスタンスの作成と管理

このページでは、Cloud Spanner インスタンスを作成、一覧表示、編集、削除する方法について説明します。

インスタンスの作成

インスタンスを作成するには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

Console

  1. Cloud Console で [インスタンスの作成] ページに移動します。

    インスタンスの作成

  2. 次の値を入力します。

    • Cloud Console に表示するインスタンス名。インスタンス名は、Google Cloud プロジェクト内で一意である必要があります。
    • インスタンス ID。インスタンスを永続的に識別します。インスタンス ID は Google Cloud プロジェクト内で一意にする必要があります。インスタンス ID は後で変更できません。
    • 構成。インスタンスの地理的位置を定義し、データのレプリケート方法に影響を与えます。インスタンス構成の詳細をご覧ください。
    • インスタンスのコンピューティング容量の量。コンピューティング容量によって、インスタンス内のデータベースで利用可能なサービス リソースとストレージ リソースの量が決まります。コンピューティング容量を指定するには、測定単位(処理単位またはノード)を選択し、数量を入力します。処理単位を使用する場合は、1000 までの数量については 100 の倍数(100、200、300 など)を、それよりも多い数量については 1,000 の倍数(1000、2000、3000 など)を入力します。各ノードの処理単位は 1,000 です。詳しくは、処理単位とノードをご覧ください。
  3. [作成] をクリックしてインスタンスを作成します。

gcloud

gcloud spanner instances create コマンドを使用します。このコマンドを使用するときは、コンピューティング容量をノードまたは処理単位として指定します。

gcloud spanner instances create [INSTANCE-ID] --config=[INSTANCE-CONFIG] \
    --description="[INSTANCE-NAME]" --nodes=[NODE-COUNT]

または

gcloud spanner instances create [INSTANCE-ID] --config=[INSTANCE-CONFIG] \
    --description="[INSTANCE-NAME]" --processing-units=[PROCESSING-UNIT-COUNT]

次の値を指定します。

  • [INSTANCE-ID]: Google Cloud プロジェクト内で一意の永続的な識別子。インスタンス ID は後で変更できません。
  • [INSTANCE-CONFIG]: インスタンス構成。インスタンスの地理的位置を定義し、データのレプリケート方法に影響を与えます。インスタンス構成の詳細をご覧ください。
  • [INSTANCE-NAME]: Cloud Console に表示されるインスタンスの名前。インスタンス名は、Google Cloud プロジェクト内で一意である必要があります。
  • [NODE-COUNT]: ノード数で表されるインスタンスのコンピューティング容量。各ノードの処理単位は 1,000 です。
  • [PROCESSING-UNIT-COUNT]: 処理単位数で表されるインスタンスのコンピューティング容量。1000 までの数量については 100 の倍数(100、200、300 など)を、それより多い数量については 1000 の倍数(1000、2000、3000 など)を入力します。

次に例を示します。

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

次のようなメッセージが表示されます。

Creating instance...done.

C++

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud 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) {
  namespace spanner = ::google::cloud::spanner;
  spanner::Instance in(project_id, instance_id);

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

Go

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud 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: %v", 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: %v", 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
}

Java

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud Spanner クライアント ライブラリをご覧ください。

import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.spanner.Instance;
import com.google.cloud.spanner.InstanceAdminClient;
import com.google.cloud.spanner.InstanceConfigId;
import com.google.cloud.spanner.InstanceId;
import com.google.cloud.spanner.InstanceInfo;
import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;
import com.google.spanner.admin.instance.v1.CreateInstanceMetadata;
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) {
    Spanner spanner = SpannerOptions.newBuilder().setProjectId(projectId).build().getService();
    InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient();

    // Set Instance configuration.
    String configId = "regional-us-central1";
    int nodeCount = 2;
    String displayName = "Descriptive name";

    // Create an InstanceInfo object that will be used to create the instance.
    InstanceInfo instanceInfo =
        InstanceInfo.newBuilder(InstanceId.of(projectId, instanceId))
            .setInstanceConfigId(InstanceConfigId.of(projectId, configId))
            .setNodeCount(nodeCount)
            .setDisplayName(displayName)
            .build();
    OperationFuture<Instance, CreateInstanceMetadata> operation =
        instanceAdminClient.createInstance(instanceInfo);
    try {
      // Wait for the createInstance operation to finish.
      Instance instance = operation.get();
      System.out.printf("Instance %s was successfully created%n", instance.getId());
    } catch (ExecutionException e) {
      System.out.printf(
          "Error: Creating instance %s failed with error message %s%n",
          instanceInfo.getId(), e.getMessage());
    } catch (InterruptedException e) {
      System.out.println("Error: Waiting for createInstance operation to finish was interrupted");
    } finally {
      spanner.close();
    }
  }
}

Node.js

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud Spanner クライアント ライブラリをご覧ください。

// Imports the Google Cloud client library
const {Spanner} = 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 instance = spanner.instance(instanceId);

// Creates a new instance
try {
  console.log(`Creating instance ${instance.formattedName_}.`);
  const [, operation] = await instance.create({
    config: 'regional-us-central1',
    nodes: 1,
    displayName: 'This is a display name.',
    labels: {
      ['cloud_spanner_samples']: 'true',
      created: Math.round(Date.now() / 1000).toString(), // current time
    },
  });

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

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

PHP

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud Spanner クライアント ライブラリをご覧ください。

use Google\Cloud\Spanner\SpannerClient;

/**
 * Creates an instance.
 * Example:
 * ```
 * create_instance($instanceId);
 * ```
 *
 * @param string $instanceId The Spanner instance ID.
 */
function create_instance($instanceId)
{
    $spanner = new SpannerClient();
    $instanceConfig = $spanner->instanceConfiguration(
        'regional-us-central1'
    );
    $operation = $spanner->createInstance(
        $instanceConfig,
        $instanceId,
        [
            'displayName' => 'This is a display name.',
            'nodeCount' => 1,
            'labels' => [
                'cloud_spanner_samples' => true,
            ]
        ]
    );

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

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

Python

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud Spanner クライアント ライブラリをご覧ください。

def create_instance(instance_id):
    """Creates an instance."""
    spanner_client = spanner.Client()

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

    instance = spanner_client.instance(
        instance_id,
        configuration_name=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()))
        }
    )

    operation = instance.create()

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

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

Ruby

Cloud Spanner 用のクライアント ライブラリをインストールして使用する方法については、Cloud Spanner クライアント ライブラリをご覧ください。

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

require "google/cloud/spanner"

spanner  = Google::Cloud::Spanner.new project: project_id
instance = spanner.instance instance_id

job = spanner.create_instance instance_id,
                              name:   instance_id,
                              config: "regional-us-central1",
                              nodes:  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

インスタンスの一覧取得

Console

Cloud Console の [Spanner インスタンス] ページに移動します。

インスタンス ページに移動

Cloud Console には、Cloud Spanner インスタンスの一覧が、各インスタンスの ID、表示名、構成、コンピューティング容量とともに、処理単位とノードの両方で表示されます。

gcloud

gcloud spanner instances list コマンドを使用します。

gcloud spanner instances list

gcloud ツールによって、各インスタンスの ID、表示名、構成、コンピューティング容量とともに Cloud Spanner インスタンスの一覧が出力されます。

インスタンスの編集

以降のセクションでは、インスタンスの表示名とコンピューティング容量を変更する方法について説明します。インスタンス ID やインスタンス構成は変更できません。

表示名の変更

Console

  1. Cloud Console の [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]: Cloud Console に表示されるインスタンスの名前。インスタンス名は、Google Cloud プロジェクト内で一意である必要があります。

コンピューティング容量の変更

CPU 使用率ストレージ使用率が推奨最大値を超えないように、十分なコンピューティング容量をプロビジョニングする必要があります。詳細については、Cloud Spanner の割り当てと上限をご覧ください。

既存のインスタンスのコンピューティング容量を削減できない場合があります。

  • コンピューティング容量を削除するには、1,000 処理単位(1 ノード)あたり 2 TB を超えるデータを格納する必要があります。
  • 過去の使用パターンに基づいて、Cloud Spanner はインスタンスのデータのスプリットを多数作成しました。コンピューティング容量を削除した後はスプリットを管理できません。

コンピューティング容量を削除するときは、Cloud Monitoring で CPU 使用率とリクエスト レイテンシをモニタリングし、リージョンのインスタンスで CPU 使用率が 65% を下回り、マルチリージョンのインスタンスの各リージョンで 45% を下回らないようにしてください。コンピューティング容量の削除中に、リクエストのレイテンシが一時的に増加する場合があります。

インスタンスのコンピューティング容量を増やすには、コンピューティング容量を追加するだけの十分な割り当てが Google Cloud プロジェクトに必要です。

Console

  1. Cloud Console の [Spanner インスタンス] ページに移動します。

    インスタンス ページに移動

  2. 変更するインスタンスの名前をクリックします。

  3. [インスタンスの編集] をクリックします。

  4. コンピューティング容量を変更するには、測定単位(処理単位またはノード)を選択し、数量を入力します。処理単位を使用する場合は、1,000 までの数量については 100 の倍数(100、200、300 など)を、それより多い数量については 1,000 の倍数(1000、2000、3000 など)を入力します。各ノードの処理単位は 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,000 です。
  • [PROCESSING-UNIT-COUNT]: 処理単位数で表されるインスタンスのコンピューティング容量。1,000 までの数量については 100 の倍数(100、200、300 など)を、それより多い数量については 1000 の倍数(1000、2000、3000 など)を入力します。

インスタンスにラベルを付ける

ラベルはリソースを整理するのに役立ちます。

Console

  1. Cloud Console の [Spanner インスタンス] ページに移動します。

    インスタンス ページに移動

  2. インスタンスのチェックボックスをオンにします。ページの右側に情報パネルが表示されます。

  3. [情報パネル] で [ラベル] タブをクリックします。これで、Cloud Spanner インスタンスのラベルを追加、削除、または更新できるようになります。

インスタンスの削除

Console

  1. Cloud Console の [Spanner インスタンス] ページに移動します。

    インスタンス ページに移動

  2. 削除するインスタンスの名前をクリックします。

  3. [インスタンスの削除] をクリックします。

  4. 指示に従って、インスタンスを削除することを確認します。

  5. [削除] をクリックします。

gcloud

gcloud spanner instances delete コマンドを使用します。[INSTANCE-ID] の部分はインスタンス ID で置き換えてください。

gcloud spanner instances delete [INSTANCE-ID]

次のステップ