公開イメージからインスタンスを作成する


インスタンスには、ブートローダー、ブート ファイル システム、OS イメージが含まれています。このドキュメントでは、公開 OS イメージからインスタンスを作成する方法について説明します。Arm インスタンスを作成する場合は、Arm 互換の OS イメージを選択します。

一部のイメージShielded VM 機能をサポートしています。これは、UEFI 準拠のファームウェア、セキュアブート、vTPM で保護されたメジャード ブートなどのセキュリティ機能を備えています。Shielded VM では、vTPM と整合性モニタリングがデフォルトで有効になっています。

始める前に

  • Google Cloud CLI または Compute Engine API を使用してイメージからインスタンスを作成する場合、1 秒あたりのインスタンスには 20 個の上限が存在します。1 秒間にこれ以上のインスタンスを作成する必要がある場合は、イメージ リソースの 割り当て上限の引き上げをリクエストします。
  • イメージの既存のライセンスを使用する場合は、お客様所有ライセンスの使用をご覧ください。

  • まだ設定していない場合は、認証を設定します。認証とは、 Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

パブリック イメージからインスタンスを作成するために必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1) roles/compute.instanceAdmin.v1)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

この事前定義ロールには、パブリック イメージからインスタンスを作成するために必要な compute.instances.create 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

Compute Engine で利用可能な公開イメージのリストを表示する

公開イメージを使用してインスタンスを作成する前に、Compute Engine で使用可能な公開イメージのリストを確認します。

各公開イメージで使用できる機能の詳細については、オペレーティング システム別の機能サポートをご覧ください。

コンソール

  1. Google Cloud コンソールで、[イメージ] ページに移動します。

    [イメージ] に移動

gcloud

  1. 次のコマンドを実行します。

    gcloud compute images list
  2. イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。

  3. 省略可: イメージが Shielded VM 機能をサポートしているかどうかを確認するには、次のコマンドを実行します。

    gcloud compute images describe IMAGE_NAME \
        --project=IMAGE_PROJECT
    

    以下を置き換えます。

    • IMAGE_NAME: Shielded VM 機能のサポートを確認するイメージの名前
    • IMAGE_PROJECT: イメージを含むプロジェクト

    イメージが Shielded VM 機能をサポートしている場合、出力に type: UEFI_COMPATIBLE という行が含まれています。

C#

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている C# の設定手順に沿って操作します。詳細については、Compute Engine C# API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


using Google.Cloud.Compute.V1;
using System;
using System.Threading.Tasks;

public class ListImagesAsyncSample
{
    public async Task ListImagesAsync(
        // TODO(developer): Set your own default values for these parameters or pass different values when calling this method.
        string projectId = "your-project-id")
    {
        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        ImagesClient client = await ImagesClient.CreateAsync();

        // Make the request to list all non-deprecated images in a project.
        ListImagesRequest request = new ListImagesRequest
        {
            Project = projectId,
            // Listing only non-deprecated images to reduce the size of the reply.
            Filter = "deprecated.state != DEPRECATED",
            // MaxResults indicates the maximum number of items that will be returned per page.
            MaxResults = 100
        };

        // Although the MaxResults parameter is specified in the request, the sequence returned
        // by the ListAsync() method hides the pagination mechanic. The library makes multiple
        // requests to the API for you, so you can simply iterate over all the images.
        await foreach (var image in client.ListAsync(request))
        {
            // The result is an Image collection.
            Console.WriteLine($"Image: {image.Name}");
        }
    }
}

Go

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Go の設定手順に沿って操作します。詳細については、Compute Engine Go API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/api/iterator"
	"google.golang.org/protobuf/proto"
)

// printImagesList prints a list of all non-deprecated image names available in given project.
func printImagesList(w io.Writer, projectID string) error {
	// projectID := "your_project_id"
	ctx := context.Background()
	imagesClient, err := compute.NewImagesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewImagesRESTClient: %w", err)
	}
	defer imagesClient.Close()

	// Listing only non-deprecated images to reduce the size of the reply.
	req := &computepb.ListImagesRequest{
		Project:    projectID,
		MaxResults: proto.Uint32(3),
		Filter:     proto.String("deprecated.state != DEPRECATED"),
	}

	// Although the `MaxResults` parameter is specified in the request, the iterator returned
	// by the `list()` method hides the pagination mechanic. The library makes multiple
	// requests to the API for you, so you can simply iterate over all the images.
	it := imagesClient.List(ctx, req)
	for {
		image, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "- %s\n", image.GetName())
	}
	return nil
}

Java

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Java の設定手順に沿って操作します。詳細については、Compute Engine Java API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


import com.google.cloud.compute.v1.Image;
import com.google.cloud.compute.v1.ImagesClient;
import com.google.cloud.compute.v1.ImagesClient.ListPage;
import com.google.cloud.compute.v1.ListImagesRequest;
import java.io.IOException;
  // Prints a list of all non-deprecated image names available in given project.
  public static void listImages(String project) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `instancesClient.close()` method on the client to
    // safely clean up any remaining background resources.
    try (ImagesClient imagesClient = ImagesClient.create()) {

      // Listing only non-deprecated images to reduce the size of the reply.
      ListImagesRequest imagesRequest = ListImagesRequest.newBuilder()
          .setProject(project)
          .setMaxResults(100)
          .setFilter("deprecated.state != DEPRECATED")
          .build();

      // Although the `setMaxResults` parameter is specified in the request, the iterable returned
      // by the `list()` method hides the pagination mechanic. The library makes multiple
      // requests to the API for you, so you can simply iterate over all the images.
      int imageCount = 0;
      for (Image image : imagesClient.list(imagesRequest).iterateAll()) {
        imageCount++;
        System.out.println(image.getName());
      }
      System.out.printf("Image count in %s is: %s", project, imageCount);
    }
  }

Node.js

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Node.js の設定手順に沿って操作します。詳細については、Compute Engine Node.js API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';

const compute = require('@google-cloud/compute');

async function listImages() {
  const imagesClient = new compute.ImagesClient();

  // Listing only non-deprecated images to reduce the size of the reply.
  const images = imagesClient.listAsync({
    project: projectId,
    maxResults: 3,
    filter: 'deprecated.state != DEPRECATED',
  });

  // Although the `maxResults` parameter is specified in the request, the iterable returned
  // by the `listAsync()` method hides the pagination mechanic. The library makes multiple
  // requests to the API for you, so you can simply iterate over all the images.
  for await (const image of images) {
    console.log(` - ${image.name}`);
  }
}

listImages();

PHP

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている PHP の設定手順に沿って操作します。詳細については、Compute Engine PHP API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

use Google\Cloud\Compute\V1\Client\ImagesClient;
use Google\Cloud\Compute\V1\ListImagesRequest;

/**
 * Prints a list of all non-deprecated image names available in given project.
 *
 * @param string $projectId Project ID or project number of the Cloud project you want to list images from.
 *
 * @throws \Google\ApiCore\ApiException if the remote call fails.
 */
function list_all_images(string $projectId)
{
    $imagesClient = new ImagesClient();
    // Listing only non-deprecated images to reduce the size of the reply.
    $optionalArgs = ['maxResults' => 100, 'filter' => 'deprecated.state != DEPRECATED'];

    /**
     * Although the maxResults parameter is specified in the request, the iterateAllElements() method
     * hides the pagination mechanic. The library makes multiple requests to the API for you,
     * so you can simply iterate over all the images.
     */
    $request = (new ListImagesRequest())
        ->setProject($projectId)
        ->setMaxResults($optionalArgs['maxResults'])
        ->setFilter($optionalArgs['filter']);
    $pagedResponse = $imagesClient->list($request);
    print('=================== Flat list of images ===================' . PHP_EOL);
    foreach ($pagedResponse->iterateAllElements() as $element) {
        printf(' - %s' . PHP_EOL, $element->getName());
    }
}

Python

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Python の設定手順に沿って操作します。詳細については、Compute Engine Python API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

import google.cloud.compute_v1 as compute_v1

def print_images_list(project: str) -> str:
    """
    Prints a list of all non-deprecated image names available in given project.

    Args:
        project: project ID or project number of the Cloud project you want to list images from.

    Returns:
        The output as a string.
    """
    images_client = compute_v1.ImagesClient()
    # Listing only non-deprecated images to reduce the size of the reply.
    images_list_request = compute_v1.ListImagesRequest(
        project=project, max_results=100, filter="deprecated.state != DEPRECATED"
    )
    output = []

    # Although the `max_results` parameter is specified in the request, the iterable returned
    # by the `list()` method hides the pagination mechanic. The library makes multiple
    # requests to the API for you, so you can simply iterate over all the images.
    for img in images_client.list(request=images_list_request):
        print(f" -  {img.name}")
        output.append(f" -  {img.name}")
    return "\n".join(output)

Ruby

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Ruby の設定手順に沿って操作します。詳細については、Compute Engine Ruby API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


require "google/cloud/compute/v1"

# Prints a list of all non-deprecated image names available in given project.
#
# @param [String] project project ID or project number of the Cloud project you want to list images from.
def print_images_list project:
  client = ::Google::Cloud::Compute::V1::Images::Rest::Client.new

  # Make the request to list all non-deprecated images in a project.
  request = {
    project: project,
    # max_results indicates the maximum number of items that will be returned per page.
    max_results: 100,
    # Listing only non-deprecated images to reduce the size of the reply.
    filter: "deprecated.state != DEPRECATED"
  }

  # Although the `max_results` parameter is specified in the request, the iterable returned
  # by the `list` method hides the pagination mechanic. The library makes multiple
  # requests to the API for you, so you can simply iterate over all the images.
  client.list(request).each do |image|
    puts " - #{image.name}"
  end
end

REST

  1. 次のコマンドを実行します。

    GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/global/images/
    
  2. イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。

  3. 省略可: イメージが Shielded VM 機能をサポートしているかどうかを確認するには、次のコマンドを実行します。

    GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/global/images/IMAGE_NAME
    

    次のように置き換えます。

    • IMAGE_PROJECT: イメージを含むプロジェクト
    • IMAGE_NAME: Shielded VM 機能のサポートを確認するイメージの名前

    イメージが Shielded VM 機能をサポートしている場合、出力に type: UEFI_COMPATIBLE という行が含まれています。

公開イメージから VM インスタンスを作成する

公開 OS イメージは、Google、オープンソース コミュニティ、サードパーティ ベンダーによって提供され、維持されています。デフォルトでは、すべての Google Cloud プロジェクトで公開 OS イメージから VM を作成できます。ただし、 Google Cloud プロジェクトに信頼できるイメージのリストが定義されている場合は、そのリストのイメージのみを使用して VM を作成できます。

ローカル SSDShielded VM イメージを作成する場合、整合性モニタリングまたは仮想トラステッド プラットフォーム モジュール(vTPM)でデータを保護することはできません。

コンソール

  1. Google Cloud コンソールで、[インスタンスを作成] ページに移動します。

    [インスタンスの作成] に移動

    プロンプトが表示されたら、プロジェクトを選択して [続行] をクリックします。[インスタンスの作成] ページが表示され、[マシン構成] ペインが表示されます。

  2. [マシンの構成] ペインで、次の操作を行います。

    1. [名前] フィールドに、VM の名前を指定します。詳細については、リソースの命名規則をご覧ください。
    2. 省略可: [ゾーン] フィールドで、この VM のゾーンを選択します。

      デフォルトでは [すべて] が選択されています。このデフォルト選択を変更しない場合、マシンタイプと可用性に基づいてゾーンが自動的に選択されます。

    3. VM のマシン ファミリーを選択します。 Google Cloud コンソールに、選択したマシンファミリーで使用可能なマシンシリーズが表示されます。使用できるマシン ファミリー オプションは次のとおりです。

      • 汎用
      • コンピューティング最適化
      • メモリ最適化
      • ストレージ最適化
      • GPU

    4. [シリーズ] 列で、VM のマシンシリーズを選択します。

      前の手順でマシン ファミリーとして [GPU] を選択した場合は、必要な GPU タイプを選択します。選択した GPU タイプにマシンシリーズが自動的に選択されます。

    5. [マシンタイプ] セクションで、VM のマシンタイプを選択します。

  3. ナビゲーション メニューで [OS とストレージ] をクリックします。表示された [オペレーティング システムとストレージ] ペインで、次の操作を行い、ブートディスクを構成します。

    1. [変更] をクリックします。[ブートディスク] ペインが表示され、[公開イメージ] タブが表示されます。
    2. [オペレーティング システム] リストで、OS のタイプを選択します。
    3. [バージョン] リストで、OS のバージョンを選択します。
    4. [ブートディスクの種類] リストで、ブートディスクの種類を選択します。
    5. [サイズ(GB)] フィールドに、ブートディスクのサイズを指定します。
    6. 省略可: 詳細な構成オプションについては、[ 詳細設定を表示] セクションを開きます。
    7. ブートディスクのオプションを確認して [オペレーティング システムとストレージ] ペインに戻るには、[選択] をクリックします。
  4. ナビゲーション メニューで [ネットワーキング] をクリックします。表示された [ネットワーキング] ペインで、次の操作を行います。

    1. [ファイアウォール] セクションに移動します。
    2. VM への HTTP または HTTPS トラフィックを許可するには、[HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] をオンにします。

      Compute Engine は、ネットワーク タグを VM に追加し、tcp:80(HTTP)または tcp:443(HTTPS)で受信するすべてのトラフィックを許可する上り(内向き)ファイアウォール ルールを作成します。このネットワーク タグによってファイアウォール ルールが VM に関連付けられます。詳細については、Cloud Next Generation Firewall のドキュメントでファイアウォール ルールの概要をご覧ください。

  5. 省略可: Shielded VM 機能をサポートする OS イメージを選択した場合は、Shielded VM の設定を変更できます。

    これを行うには、ナビゲーション メニューで [セキュリティ] をクリックします。表示された [セキュリティ] ペインで、次の項目を構成します。

  6. 省略可: その他の構成オプションを指定します。詳細については、インスタンス作成時の構成オプションをご覧ください。

  7. VM を作成して起動するには、[作成] をクリックします。

gcloud

  1. 公開イメージを選択します。イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。
  2. gcloud compute instances create コマンドを使用して、イメージ ファミリーまたは特定のバージョンの OS イメージから VM を作成します。

    オプションの --shielded-secure-boot フラグを指定すると、Compute Engine は 3 つの Shielded VM 機能をすべて有効にした VM を作成します。

    Compute Engine が VM を起動した後、Shielded VM のオプションを変更するには、VM を停止する必要があります。

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        [--image=IMAGE | --image-family=IMAGE_FAMILY] \
        --image-project=IMAGE_PROJECT
        IMAGE_FLAG \
        --machine-type=MACHINE_TYPE

    次のように置き換えます。

    • VM_NAME: 新しい VM の名前
    • ZONE: インスタンスの作成先とするゾーン。
    • IMAGE_PROJECT: イメージを含むプロジェクト
    • IMAGE_FLAG: 次のいずれかを指定します。

      • --image IMAGE_NAME フラグを使用して、公開イメージの特定のバージョンを指定します。

        例: --image debian-12-bookworm-v20241112

      • --image-family IMAGE_FAMILY_NAME フラグを使用してイメージ ファミリーを指定します。

        これにより、イメージ ファミリーの最新の非推奨ではない OS イメージから VM が作成されます。たとえば、--image-family debian-12 を指定すると、Compute Engine は Debian 12 イメージ ファミリーの最新バージョンの OS イメージを使用します。

    • MACHINE_TYPE: 新しい VM のマシンタイプ。事前定義のマシンタイプまたはカスタムのマシンタイプにできます。

      ゾーンで使用できるマシンタイプのリストを取得するには、--zones フラグを指定して gcloud compute machine-types list コマンドを使用します。

  3. Compute Engine によって VM が作成されたことを確認します。

    gcloud compute instances describe VM_NAME
    

    VM_NAME は VM の名前で置き換えます。

Terraform

VM を作成するには、google_compute_instance リソースを使用します。


# Create a VM instance from a public image
# in the `default` VPC network and subnet

resource "google_compute_instance" "default" {
  name         = "my-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-minimal-2210-kinetic-amd64-v20230126"
    }
  }

  network_interface {
    network = "default"
    access_config {}
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform コードを生成するには、 Google Cloud コンソールの同等のコード コンポーネントを使用します。
  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [インスタンスを作成] をクリックします。
  3. 必要なパラメータを指定します。
  4. ページの上部または下部で [同等のコード] をクリックし、[Terraform] タブをクリックして Terraform コードを表示します。

C#

C#

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている C# の設定手順に沿って操作します。詳細については、Compute Engine C# API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


using Google.Cloud.Compute.V1;
using System.Threading.Tasks;

public class CreateInstanceAsyncSample
{
    public async Task CreateInstanceAsync(
        // TODO(developer): Set your own default values for these parameters or pass different values when calling this method.
        string projectId = "your-project-id",
        string zone = "us-central1-a",
        string machineName = "test-machine",
        string machineType = "n1-standard-1",
        string diskImage = "projects/debian-cloud/global/images/family/debian-12",
        long diskSizeGb = 10,
        string networkName = "default")
    {
        Instance instance = new Instance
        {
            Name = machineName,
            // See https://cloud.google.com/compute/docs/machine-types for more information on machine types.
            MachineType = $"zones/{zone}/machineTypes/{machineType}",
            // Instance creation requires at least one persistent disk.
            Disks =
            {
                new AttachedDisk
                {
                    AutoDelete = true,
                    Boot = true,
                    Type = ComputeEnumConstants.AttachedDisk.Type.Persistent,
                    InitializeParams = new AttachedDiskInitializeParams 
                    {
                        // See https://cloud.google.com/compute/docs/images for more information on available images.
                        SourceImage = diskImage,
                        DiskSizeGb = diskSizeGb
                    }
                }
            },
            NetworkInterfaces = { new NetworkInterface { Name = networkName } }
        };

        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        InstancesClient client = await InstancesClient.CreateAsync();

        // Insert the instance in the specified project and zone.
        var instanceCreation = await client.InsertAsync(projectId, zone, instance);

        // Wait for the operation to complete using client-side polling.
        // The server-side operation is not affected by polling,
        // and might finish successfully even if polling times out.
        await instanceCreation.PollUntilCompletedAsync();
    }
}

Go

Go

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Go の設定手順に沿って操作します。詳細については、Compute Engine Go API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createInstance sends an instance creation request to the Compute Engine API and waits for it to complete.
func createInstance(w io.Writer, projectID, zone, instanceName, machineType, sourceImage, networkName string) error {
	// projectID := "your_project_id"
	// zone := "europe-central2-b"
	// instanceName := "your_instance_name"
	// machineType := "n1-standard-1"
	// sourceImage := "projects/debian-cloud/global/images/family/debian-12"
	// networkName := "global/networks/default"

	ctx := context.Background()
	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	req := &computepb.InsertInstanceRequest{
		Project: projectID,
		Zone:    zone,
		InstanceResource: &computepb.Instance{
			Name: proto.String(instanceName),
			Disks: []*computepb.AttachedDisk{
				{
					InitializeParams: &computepb.AttachedDiskInitializeParams{
						DiskSizeGb:  proto.Int64(10),
						SourceImage: proto.String(sourceImage),
					},
					AutoDelete: proto.Bool(true),
					Boot:       proto.Bool(true),
					Type:       proto.String(computepb.AttachedDisk_PERSISTENT.String()),
				},
			},
			MachineType: proto.String(fmt.Sprintf("zones/%s/machineTypes/%s", zone, machineType)),
			NetworkInterfaces: []*computepb.NetworkInterface{
				{
					Name: proto.String(networkName),
				},
			},
		},
	}

	op, err := instancesClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create instance: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Instance created\n")

	return nil
}

Java

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Java の設定手順に沿って操作します。詳細については、Compute Engine Java API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.compute.v1.AttachedDisk;
import com.google.cloud.compute.v1.AttachedDisk.Type;
import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
import com.google.cloud.compute.v1.InsertInstanceRequest;
import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.NetworkInterface;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateInstance {

  public static void main(String[] args)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "your-project-id";
    String zone = "zone-name";
    String instanceName = "instance-name";
    createInstance(project, zone, instanceName);
  }


  // Create a new instance with the provided "instanceName" value in the specified project and zone.
  public static void createInstance(String project, String zone, String instanceName)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    // Below are sample values that can be replaced.
    // machineType: machine type of the VM being created.
    // *   This value uses the format zones/{zone}/machineTypes/{type_name}.
    // *   For a list of machine types, see https://cloud.google.com/compute/docs/machine-types
    // sourceImage: path to the operating system image to mount.
    // *   For details about images you can mount, see https://cloud.google.com/compute/docs/images
    // diskSizeGb: storage size of the boot disk to attach to the instance.
    // networkName: network interface to associate with the instance.
    String machineType = String.format("zones/%s/machineTypes/n1-standard-1", zone);
    String sourceImage = String
        .format("projects/debian-cloud/global/images/family/%s", "debian-11");
    long diskSizeGb = 10L;
    String networkName = "default";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `instancesClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (InstancesClient instancesClient = InstancesClient.create()) {
      // Instance creation requires at least one persistent disk and one network interface.
      AttachedDisk disk =
          AttachedDisk.newBuilder()
              .setBoot(true)
              .setAutoDelete(true)
              .setType(Type.PERSISTENT.toString())
              .setDeviceName("disk-1")
              .setInitializeParams(
                  AttachedDiskInitializeParams.newBuilder()
                      .setSourceImage(sourceImage)
                      .setDiskSizeGb(diskSizeGb)
                      .build())
              .build();

      // Use the network interface provided in the networkName argument.
      NetworkInterface networkInterface = NetworkInterface.newBuilder()
          .setName(networkName)
          .build();

      // Bind `instanceName`, `machineType`, `disk`, and `networkInterface` to an instance.
      Instance instanceResource =
          Instance.newBuilder()
              .setName(instanceName)
              .setMachineType(machineType)
              .addDisks(disk)
              .addNetworkInterfaces(networkInterface)
              .build();

      System.out.printf("Creating instance: %s at %s %n", instanceName, zone);

      // Insert the instance in the specified project and zone.
      InsertInstanceRequest insertInstanceRequest = InsertInstanceRequest.newBuilder()
          .setProject(project)
          .setZone(zone)
          .setInstanceResource(instanceResource)
          .build();

      OperationFuture<Operation, Operation> operation = instancesClient.insertAsync(
          insertInstanceRequest);

      // Wait for the operation to complete.
      Operation response = operation.get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Instance creation failed ! ! " + response);
        return;
      }
      System.out.println("Operation Status: " + response.getStatus());
    }
  }
}

Node.js

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Node.js の設定手順に沿って操作します。詳細については、Compute Engine Node.js API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const zone = 'europe-central2-b'
// const instanceName = 'YOUR_INSTANCE_NAME'
// const machineType = 'n1-standard-1';
// const sourceImage = 'projects/debian-cloud/global/images/family/debian-11';
// const networkName = 'global/networks/default';

const compute = require('@google-cloud/compute');

// Create a new instance with the values provided above in the specified project and zone.
async function createInstance() {
  const instancesClient = new compute.InstancesClient();

  console.log(`Creating the ${instanceName} instance in ${zone}...`);

  const [response] = await instancesClient.insert({
    instanceResource: {
      name: instanceName,
      disks: [
        {
          // Describe the size and source image of the boot disk to attach to the instance.
          initializeParams: {
            diskSizeGb: '10',
            sourceImage,
          },
          autoDelete: true,
          boot: true,
          type: 'PERSISTENT',
        },
      ],
      machineType: `zones/${zone}/machineTypes/${machineType}`,
      networkInterfaces: [
        {
          // Use the network interface provided in the networkName argument.
          name: networkName,
        },
      ],
    },
    project: projectId,
    zone,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.ZoneOperationsClient();

  // Wait for the create operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await operationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log('Instance created.');
}

createInstance();

PHP

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている PHP の設定手順に沿って操作します。詳細については、Compute Engine PHP API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

use Google\Cloud\Compute\V1\AttachedDisk;
use Google\Cloud\Compute\V1\AttachedDiskInitializeParams;
use Google\Cloud\Compute\V1\Client\InstancesClient;
use Google\Cloud\Compute\V1\Enums\AttachedDisk\Type;
use Google\Cloud\Compute\V1\InsertInstanceRequest;

/**
 * To correctly handle string enums in Cloud Compute library
 * use constants defined in the Enums subfolder.
 */
use Google\Cloud\Compute\V1\Instance;
use Google\Cloud\Compute\V1\NetworkInterface;

/**
 * Creates an instance in the specified project and zone.
 *
 * @param string $projectId Project ID of the Cloud project to create the instance in.
 * @param string $zone Zone to create the instance in (like "us-central1-a").
 * @param string $instanceName Unique name for this Compute Engine instance.
 * @param string $machineType Machine type of the instance being created.
 * @param string $sourceImage Boot disk image name or family.
 * @param string $networkName Network interface to associate with the instance.
 *
 * @throws \Google\ApiCore\ApiException if the remote call fails.
 * @throws \Google\ApiCore\ValidationException if local error occurs before remote call.
 */
function create_instance(
    string $projectId,
    string $zone,
    string $instanceName,
    string $machineType = 'n1-standard-1',
    string $sourceImage = 'projects/debian-cloud/global/images/family/debian-11',
    string $networkName = 'global/networks/default'
) {
    // Set the machine type using the specified zone.
    $machineTypeFullName = sprintf('zones/%s/machineTypes/%s', $zone, $machineType);

    // Describe the source image of the boot disk to attach to the instance.
    $diskInitializeParams = (new AttachedDiskInitializeParams())
        ->setSourceImage($sourceImage);
    $disk = (new AttachedDisk())
        ->setBoot(true)
        ->setAutoDelete(true)
        ->setType(Type::PERSISTENT)
        ->setInitializeParams($diskInitializeParams);

    // Use the network interface provided in the $networkName argument.
    $network = (new NetworkInterface())
        ->setName($networkName);

    // Create the Instance object.
    $instance = (new Instance())
        ->setName($instanceName)
        ->setDisks([$disk])
        ->setMachineType($machineTypeFullName)
        ->setNetworkInterfaces([$network]);

    // Insert the new Compute Engine instance using InstancesClient.
    $instancesClient = new InstancesClient();
    $request = (new InsertInstanceRequest())
        ->setInstanceResource($instance)
        ->setProject($projectId)
        ->setZone($zone);
    $operation = $instancesClient->insert($request);

    // Wait for the operation to complete.
    $operation->pollUntilComplete();
    if ($operation->operationSucceeded()) {
        printf('Created instance %s' . PHP_EOL, $instanceName);
    } else {
        $error = $operation->getError();
        printf('Instance creation failed: %s' . PHP_EOL, $error?->getMessage());
    }
}

Python

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Python の設定手順に沿って操作します。詳細については、Compute Engine Python API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from __future__ import annotations

import re
import sys
from typing import Any
import warnings

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def get_image_from_family(project: str, family: str) -> compute_v1.Image:
    """
    Retrieve the newest image that is part of a given family in a project.

    Args:
        project: project ID or project number of the Cloud project you want to get image from.
        family: name of the image family you want to get image from.

    Returns:
        An Image object.
    """
    image_client = compute_v1.ImagesClient()
    # List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details
    newest_image = image_client.get_from_family(project=project, family=family)
    return newest_image


def disk_from_image(
    disk_type: str,
    disk_size_gb: int,
    boot: bool,
    source_image: str,
    auto_delete: bool = True,
) -> compute_v1.AttachedDisk:
    """
    Create an AttachedDisk object to be used in VM instance creation. Uses an image as the
    source for the new disk.

    Args:
         disk_type: the type of disk you want to create. This value uses the following format:
            "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
            For example: "zones/us-west3-b/diskTypes/pd-ssd"
        disk_size_gb: size of the new disk in gigabytes
        boot: boolean flag indicating whether this disk should be used as a boot disk of an instance
        source_image: source image to use when creating this disk. You must have read access to this disk. This can be one
            of the publicly available images or an image from one of your projects.
            This value uses the following format: "projects/{project_name}/global/images/{image_name}"
        auto_delete: boolean flag indicating whether this disk should be deleted with the VM that uses it

    Returns:
        AttachedDisk object configured to be created using the specified image.
    """
    boot_disk = compute_v1.AttachedDisk()
    initialize_params = compute_v1.AttachedDiskInitializeParams()
    initialize_params.source_image = source_image
    initialize_params.disk_size_gb = disk_size_gb
    initialize_params.disk_type = disk_type
    boot_disk.initialize_params = initialize_params
    # Remember to set auto_delete to True if you want the disk to be deleted when you delete
    # your VM instance.
    boot_disk.auto_delete = auto_delete
    boot_disk.boot = boot
    return boot_disk


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def create_instance(
    project_id: str,
    zone: str,
    instance_name: str,
    disks: list[compute_v1.AttachedDisk],
    machine_type: str = "n1-standard-1",
    network_link: str = "global/networks/default",
    subnetwork_link: str = None,
    internal_ip: str = None,
    external_access: bool = False,
    external_ipv4: str = None,
    accelerators: list[compute_v1.AcceleratorConfig] = None,
    preemptible: bool = False,
    spot: bool = False,
    instance_termination_action: str = "STOP",
    custom_hostname: str = None,
    delete_protection: bool = False,
) -> compute_v1.Instance:
    """
    Send an instance creation request to the Compute Engine API and wait for it to complete.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone to create the instance in. For example: "us-west3-b"
        instance_name: name of the new virtual machine (VM) instance.
        disks: a list of compute_v1.AttachedDisk objects describing the disks
            you want to attach to your new instance.
        machine_type: machine type of the VM being created. This value uses the
            following format: "zones/{zone}/machineTypes/{type_name}".
            For example: "zones/europe-west3-c/machineTypes/f1-micro"
        network_link: name of the network you want the new instance to use.
            For example: "global/networks/default" represents the network
            named "default", which is created automatically for each project.
        subnetwork_link: name of the subnetwork you want the new instance to use.
            This value uses the following format:
            "regions/{region}/subnetworks/{subnetwork_name}"
        internal_ip: internal IP address you want to assign to the new instance.
            By default, a free address from the pool of available internal IP addresses of
            used subnet will be used.
        external_access: boolean flag indicating if the instance should have an external IPv4
            address assigned.
        external_ipv4: external IPv4 address to be assigned to this instance. If you specify
            an external IP address, it must live in the same region as the zone of the instance.
            This setting requires `external_access` to be set to True to work.
        accelerators: a list of AcceleratorConfig objects describing the accelerators that will
            be attached to the new instance.
        preemptible: boolean value indicating if the new instance should be preemptible
            or not. Preemptible VMs have been deprecated and you should now use Spot VMs.
        spot: boolean value indicating if the new instance should be a Spot VM or not.
        instance_termination_action: What action should be taken once a Spot VM is terminated.
            Possible values: "STOP", "DELETE"
        custom_hostname: Custom hostname of the new VM instance.
            Custom hostnames must conform to RFC 1035 requirements for valid hostnames.
        delete_protection: boolean value indicating if the new virtual machine should be
            protected against deletion or not.
    Returns:
        Instance object.
    """
    instance_client = compute_v1.InstancesClient()

    # Use the network interface provided in the network_link argument.
    network_interface = compute_v1.NetworkInterface()
    network_interface.network = network_link
    if subnetwork_link:
        network_interface.subnetwork = subnetwork_link

    if internal_ip:
        network_interface.network_i_p = internal_ip

    if external_access:
        access = compute_v1.AccessConfig()
        access.type_ = compute_v1.AccessConfig.Type.ONE_TO_ONE_NAT.name
        access.name = "External NAT"
        access.network_tier = access.NetworkTier.PREMIUM.name
        if external_ipv4:
            access.nat_i_p = external_ipv4
        network_interface.access_configs = [access]

    # Collect information into the Instance object.
    instance = compute_v1.Instance()
    instance.network_interfaces = [network_interface]
    instance.name = instance_name
    instance.disks = disks
    if re.match(r"^zones/[a-z\d\-]+/machineTypes/[a-z\d\-]+$", machine_type):
        instance.machine_type = machine_type
    else:
        instance.machine_type = f"zones/{zone}/machineTypes/{machine_type}"

    instance.scheduling = compute_v1.Scheduling()
    if accelerators:
        instance.guest_accelerators = accelerators
        instance.scheduling.on_host_maintenance = (
            compute_v1.Scheduling.OnHostMaintenance.TERMINATE.name
        )

    if preemptible:
        # Set the preemptible setting
        warnings.warn(
            "Preemptible VMs are being replaced by Spot VMs.", DeprecationWarning
        )
        instance.scheduling = compute_v1.Scheduling()
        instance.scheduling.preemptible = True

    if spot:
        # Set the Spot VM setting
        instance.scheduling.provisioning_model = (
            compute_v1.Scheduling.ProvisioningModel.SPOT.name
        )
        instance.scheduling.instance_termination_action = instance_termination_action

    if custom_hostname is not None:
        # Set the custom hostname for the instance
        instance.hostname = custom_hostname

    if delete_protection:
        # Set the delete protection bit
        instance.deletion_protection = True

    # Prepare the request to insert an instance.
    request = compute_v1.InsertInstanceRequest()
    request.zone = zone
    request.project = project_id
    request.instance_resource = instance

    # Wait for the create operation to complete.
    print(f"Creating the {instance_name} instance in {zone}...")

    operation = instance_client.insert(request=request)

    wait_for_extended_operation(operation, "instance creation")

    print(f"Instance {instance_name} created.")
    return instance_client.get(project=project_id, zone=zone, instance=instance_name)

Ruby

このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Ruby の設定手順に沿って操作します。詳細については、Compute Engine Ruby API リファレンス ドキュメントをご覧ください。

Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


require "google/cloud/compute/v1"

# Sends an instance creation request to the Compute Engine API and waits for it to complete.
#
# @param [String] project project ID or project number of the Cloud project you want to use.
# @param [String] zone name of the zone you want to use. For example: "us-west3-b"
# @param [String] instance_name name of the new virtual machine.
# @param [String] machine_type machine type of the VM being created. For example: "e2-standard-2"
#         See https://cloud.google.com/compute/docs/machine-types for more information
#         on machine types.
# @param [String] source_image path to the operating system image to mount on your boot
#         disk. This can be one of the public images
#         (like "projects/debian-cloud/global/images/family/debian-11")
#         or a private image you have access to.
#         See https://cloud.google.com/compute/docs/images for more information on available images.
# @param [String] network_name name of the network you want the new instance to use.
#         For example: "global/networks/default" represents the `default`
#         network interface, which is created automatically for each project.
def create_instance project:, zone:, instance_name:,
                    machine_type: "n2-standard-2",
                    source_image: "projects/debian-cloud/global/images/family/debian-11",
                    network_name: "global/networks/default"
  # Initialize client that will be used to send requests. This client only needs to be created
  # once, and can be reused for multiple requests.
  client = ::Google::Cloud::Compute::V1::Instances::Rest::Client.new

  # Construct the instance object.
  # It can be either a hash or ::Google::Cloud::Compute::V1::Instance instance.
  instance = {
    name: instance_name,
    machine_type: "zones/#{zone}/machineTypes/#{machine_type}",
    # Instance creation requires at least one persistent disk.
    disks: [{
      auto_delete: true,
      boot: true,
      type: :PERSISTENT,
      initialize_params: {
        source_image: source_image,
        disk_size_gb: 10
      }
    }],
    network_interfaces: [{ name: network_name }]
  }

  # Prepare a request to create the instance in the specified project and zone.
  request = { project: project, zone: zone, instance_resource: instance }

  puts "Creating the #{instance_name} instance in #{zone}..."
  begin
    # Send the insert request.
    operation = client.insert request
    # Wait for the create operation to complete.
    operation = wait_until_done operation: operation

    if operation.error?
      warn "Error during creation:", operation.error
    else
      compute_operation = operation.operation
      warn "Warning during creation:", compute_operation.warnings unless compute_operation.warnings.empty?
      puts "Instance #{instance_name} created."
    end
  rescue ::Google::Cloud::Error => e
    warn "Exception during creation:", e
  end
end

REST

  1. 公開イメージを選択します。イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。
  2. instances.insert メソッドを使用して、イメージ ファミリーまたは特定のバージョンの OS イメージから VM を作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    
    {
       "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
       "name":"VM_NAME",
       
       "disks":[
          {
             "initializeParams":{
                "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
             },
             "boot":true
          }
       ],
       
       
       "networkInterfaces":[
          {
             "network":"global/networks/NETWORK_NAME"
          }
       ],
       
      
       "shieldedInstanceConfig":{
          "enableSecureBoot":"ENABLE_SECURE_BOOT"
       }
    }
    

    次のように置き換えます。

    • PROJECT_ID: VM を作成するプロジェクトの ID
    • ZONE: VM を作成するゾーン
    • MACHINE_TYPE_ZONE: 新しい VM に使用するマシンタイプを含むゾーン
    • MACHINE_TYPE: 新しい VM のマシンタイプ(事前定義またはカスタム
    • VM_NAME: 新しい VM の名前
    • IMAGE_PROJECT: イメージを含むプロジェクト
      たとえば、イメージ ファミリーとして debian-10 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。
    • IMAGE: 次のいずれかを指定します。
      • IMAGE: 公開イメージの特定のバージョン

        例: "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

      • IMAGE_FAMILY: イメージ ファミリー

        これにより、非推奨ではない最新の OS イメージから VM が作成されます。たとえば、"sourceImage": "projects/debian-cloud/global/images/family/debian-10" を指定すると、Compute Engine は Debian 10 イメージ ファミリーの OS イメージの最新バージョンから VM を作成します。

    • NETWORK_NAME: VM に使用する VPC ネットワーク。default を指定して、デフォルト ネットワークを使用できます。
    • ENABLE_SECURE_BOOT: 省略可。Shielded VM 機能をサポートしているイメージを選択した場合は、Compute Engine がデフォルトで仮想トラステッド プラットフォーム モジュール(vTPM)整合性モニタリングを有効にします。Compute Engine は、デフォルトではセキュアブートを有効にしません。

      trueenableSecureBoot を指定すると、Compute Engine は 3 つの Shielded VM 機能をすべて有効にした VM を作成します。Compute Engine が VM を起動した後、Shielded VM のオプションを変更するには、VM を停止する必要があります。

公開イメージからベアメタル インスタンスを作成する

公開 OS イメージは、Google、オープンソース コミュニティ、サードパーティ ベンダーによって提供され、維持されています。デフォルトでは、すべての Google Cloud プロジェクトで、サポートされている公開 OS イメージを使用してベアメタル インスタンスを作成できます。ただし、 Google Cloud プロジェクトに信頼できるイメージのリストが定義されている場合は、そのリストのイメージのみを使用してベアメタル インスタンスを作成できます。

コンソール

  1. Google Cloud コンソールで、[インスタンスを作成] ページに移動します。

    [インスタンスの作成] に移動

    プロンプトが表示されたら、プロジェクトを選択して [続行] をクリックします。[インスタンスの作成] ページが表示され、[マシン構成] ペインが表示されます。

  2. [マシンの構成] ペインで、次の操作を行います。

    1. [名前] フィールドに、インスタンスの名前を指定します。詳細については、リソースの命名規則をご覧ください。
    2. 省略可: [ゾーン] フィールドで、このインスタンスのゾーンを選択します。使用可能なベアメタル サーバーが存在しないゾーンを選択すると、別のゾーンを選択するよう求められます。

      デフォルトでは [すべて] が選択されています。このデフォルト選択を変更しない場合、マシンタイプと可用性に基づいてゾーンが自動的に選択されます。

    3. 次のいずれかの方法で、マシン ファミリーとシリーズを選択します。

      • C3 ベアメタル シリーズの場合は、マシン ファミリーとして [汎用] を選択し、[シリーズ] 列で [C3] を選択します。
      • X4 ベアメタル シリーズの場合は、マシン ファミリーとして [メモリ最適化] を選択し、[シリーズ] 列で [X4] を選択します。
    4. [マシンタイプ] セクションでリストをクリックします。フィルタ メニューで「metal」と入力し、使用可能なマシンタイプのいずれかを選択します。

  3. ナビゲーション メニューで [OS とストレージ] をクリックします。表示された [オペレーティング システムとストレージ] ペインで、次の操作を行い、ブートディスクを構成します。

    1. [変更] をクリックします。[ブートディスク] ペインが表示され、[公開イメージ] タブが表示されます。
    2. [オペレーティング システム] リストで、OS のタイプを選択します。
    3. [バージョン] リストで、OS のバージョンを選択します。
    4. [ブートディスクの種類] リストで、ブートディスクの種類を選択します。
    5. [サイズ(GB)] フィールドに、ブートディスクのサイズを指定します。
    6. 省略可: Hyperdisk Balanced ブートディスクの場合は、[プロビジョニングされた IOPS] フィールドと [プロビジョニングされたスループット] フィールドに値を指定します。
    7. 省略可: 詳細な構成オプションについては、[ 詳細設定を表示] セクションを開きます。
    8. ブートディスクのオプションを確認して [オペレーティング システムとストレージ] ペインに戻るには、[選択] をクリックします。

  4. ナビゲーション メニューで [ネットワーキング] をクリックします。表示された [ネットワーキング] ペインで、次の操作を行います。

    1. [ファイアウォール] セクションに移動します。
    2. インスタンスへの HTTP または HTTPS トラフィックを許可するには、[HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] を選択します。

      Compute Engine によってネットワーク タグがインスタンスに追加されます。また、対応する上り(内向き)ファイアウォール ルールが作成され、tcp:80(HTTP)または tcp:443(HTTPS)で着信するすべてのトラフィックが許可されます。このネットワーク タグでファイアウォール ルールがインスタンスに関連付けられます。詳細については、Cloud Next Generation Firewall のドキュメントでファイアウォール ルールの概要をご覧ください。

    3. [ネットワーク パフォーマンスの構成] セクションで、[ネットワーク インターフェース カード] フィールドが [IDPF] に設定されていることを確認します。

  5. ナビゲーション メニューで [詳細設定] をクリックします。表示された [詳細] ペインで、次の操作を行います。

    1. [VM プロビジョニング モデルの詳細設定] セクションを開きます。[ホスト メンテナンス時] フィールドが Terminate instance に設定されていることを確認します。
  6. 省略可。必要に応じて、他の構成パラメータを指定します。カスタム構成オプションの詳細については、インスタンスを作成して起動するをご覧ください。

  7. ベアメタル インスタンスを作成して起動するには、[作成] をクリックします。

gcloud

  1. ベアメタル インスタンスをサポートする公開イメージを選択します。イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。
  2. gcloud compute instances create コマンドを使用して、イメージ ファミリーまたは特定のバージョンの OS イメージからベアメタル インスタンスを作成します。

    gcloud compute instances create INSTANCE_NAME \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE \
        --network-interface=nic-type=IDPF \
        --maintenance-policy=TERMINATE \
        --create-disk=boot=yes,type=hyperdisk-balanced,image=projects/IMAGE_PROJECT/global/images/IMAGE,provisioned-iops=IOPS,provisioned-throughput=THROUGHPUT,size=SIZE \
        --no-shielded-secure-boot
    

    次のように置き換えます。

    • INSTANCE_NAME: 新しいベアメタル インスタンスの名前
    • ZONE: ベアメタル インスタンスを作成するゾーン
    • MACHINE_TYPE: インスタンスに使用するベアメタル マシンタイプ。マシンタイプの名前の末尾は -metal にする必要があります。

      ゾーンで使用できるマシンタイプのリストを取得するには、--zones フラグを指定して gcloud compute machine-types list コマンドを使用します。

    • IMAGE_PROJECT: イメージを含むイメージ プロジェクト

    • IMAGE: 次のいずれかを指定します。

      • OS イメージの特定のバージョン。例: sles-15-sp4-sap-v20240208-x86-6
      • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/sles-15-sp4-sap を指定すると、Compute Engine は SUSE Linux Enterprise Server 15 SP4 イメージ ファミリーの OS イメージの最新バージョンからベアメタル インスタンスを作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。
    • IOPS: 省略可。ディスクが処理できる 1 秒あたりの I/O オペレーション(IOPS)の最大数。

    • THROUGHPUT: 省略可。ディスクが処理できる最大スループット(MiB/秒)を表す整数。

    • SIZE: 省略可。新しいディスクのサイズ。この値は整数である必要があります。デフォルトの測定単位は GiB です。

  3. Compute Engine によってインスタンスが作成されたことを確認します。

    gcloud compute instances describe INSTANCE_NAME
    

    INSTANCE_NAME は新しいインスタンスの名前で置き換えます。

REST

  1. ベアメタル インスタンスをサポートする公開イメージを選択します。イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。
  2. instances.insert メソッドを使用して、イメージ ファミリーまたは特定のバージョンの OS イメージからベアメタル インスタンスを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
     "machineType": "projects/PROJECT_ID/zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
     "name": "INSTANCE_NAME",
     "disks": [
       {
         "boot": true,
         "initializeParams": {
           "diskSizeGb": "DISK_SIZE",
           "diskType": "hyperdisk-balanced",
           "provisionedIops": "IOPS_LIMIT",
           "provisionedThroughput": "THROUGHPUT_LIMIT",
           "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
         }
       }
     ],
     "networkInterfaces": [
       {
         "nicType": "IDPF"
       }
     ],
     "scheduling": {
       "onHostMaintenance": "TERMINATE"
     }
    }
    

    次のように置き換えます。

    • PROJECT_ID: ベアメタル インスタンスを作成するプロジェクトの ID
    • ZONE: ベアメタル インスタンスを作成するゾーン
    • MACHINE_TYPE_ZONE: 新しいベアメタル インスタンスに使用するマシンタイプを含むゾーン
    • MACHINE_TYPE: インスタンスに使用するマシンタイプ。マシンタイプの名前の末尾は -metal にする必要があります。
    • INSTANCE_NAME: 新しいインスタンスの名前
    • DISK_SIZE: ディスクサイズ(GiB)
    • IOPS_LIMIT: ディスクにプロビジョニングする 1 秒あたりの I/O オペレーションの数。
    • THROUGHPUT_LIMIT: ディスクにプロビジョニングするスループット(MB/秒で測定)を表す整数。
    • IMAGE_PROJECT: イメージを含むイメージ プロジェクト
    • IMAGE: 次のいずれかを指定します。
      • OS イメージの特定のバージョン。例: sles-15-sp4-sap-v20240208-x86-6
      • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/sles-15-sp4-sap を指定すると、Compute Engine は SUSE Linux Enterprise Server 15 SP4 イメージ ファミリーの OS イメージの最新バージョンからベアメタル インスタンスを作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。

次のステップ