マシンイメージからのインスタンスの作成

マシンイメージを作成したら、このマシンイメージを使用して新しい VM インスタンスを作成できます。マシンイメージを使用する場合の詳細については、マシンイメージを使用するときをご覧ください。

マシンイメージには、インスタンスを作成する場合に必要となるほとんどの情報とデータが含まれています。

マシンイメージは変更ができません。しかし、マシンイメージからインスタンスを作成するときに、マシンイメージのほぼすべてのプロパティをオーバーライドできます。

Google Cloud Consolegcloud コマンドライン ツールCompute Engine API のいずれかを使用して、マシンイメージからインスタンスを作成できます。

始める前に

インスタンスをマシンイメージから作成する(オーバーライドなし)

作成するインスタンスが完全にマシンイメージに基づいていて、プロパティの変更がない場合は、この方式を使用します。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [マシンイメージからの新しい VM インスタンス] をクリックします。
  4. マシンイメージを選択して [続行] をクリックします。
  5. インスタンスの名前を指定します。
  6. [作成] をクリックします。

gcloud

gcloud beta compute instances create コマンドを使用して、マシンイメージからインスタンスを作成します。

gcloud beta compute instances create VM_NAME \
    --zone ZONE \
    --source-machine-image SOURCE_MACHINE_IMAGE_NAME

以下を置き換えます。

  • VM_NAME: 新しいインスタンスの名前。
  • ZONE: 新しいインスタンスに使用するゾーン
  • SOURCE_MACHINE_IMAGE_NAME: インスタンスを作成するために使用するマシンイメージ。

たとえば、次の gcloud コマンドを使用して my-instance というインスタンスを us-east1-b ゾーンに、my-machine-image というマシンイメージから作成できます。

gcloud beta compute instances create my-instance \
    --zone us-east1-b \
    --source-machine-image my-machine-image

新しいインスタンスが作成されると、次のような出力が表示されます。

Created [https://www.googleapis.com/compute/beta/projects/project-12345/zones/us-east1-b/instances/my-instance].
NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
my-instance        us-east1-b  n1-standard-1               192.0.2.1   203.224.0.113  RUNNING

API

API で、instances.insert メソッドに対して POST リクエストを作成します。リクエストの本文に次のパラメータを指定します。

POST https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

以下を置き換えます。

  • PROJECT_ID: 実際の プロジェクト ID
  • ZONE は、新しいインスタンスに使用するゾーンです。
  • VM_NAME: 作成するインスタンスの名前。
  • SOURCE_MACHINE_IMAGE_URL: インスタンスを作成するために使用するマシンイメージの完全 URL または部分 URL。たとえば、my-machine-image というマシンイメージが myProject というプロジェクトにあるとします。有効な URL は次のとおりです。

    • https://www.googleapis.com/compute/v1/projects/myProject/global/global/machineImages/my-machine-image
    • projects/myProject/global/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

別のプロジェクトのマシンイメージを使用してインスタンスを作成する

インスタンスを作成するために使用するマシンイメージが別のプロジェクトにある場合は、マシンイメージへアクセスできることを確認して、新しいインスタンスでサービス アカウント プロパティをオーバーライドする必要があります。以下のセクションでは、gcloud コマンドライン ツールを使用して、別のプロジェクトにあるマシンイメージからインスタンスを作成する方法について説明します。

  1. 別のプロジェクトに保存されているマシンイメージへのアクセスを許可します。

    権限をソース プロジェクトとマシンイメージのいずれかに付与できます。gcloud コマンドライン ツールを使用してマシンイメージで権限を付与するには、次のコマンドを実行します。

    gcloud beta compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \
        --project=MACHINE_IMAGE_PROJECT \
        --member='email' \
        --role='roles/compute.admin'
    

    以下を置き換えます。

    • MACHINE_IMAGE_PROJECT: ソース マシンイメージを含むプロジェクトのプロジェクト ID。
    • MACHINE_IMAGE_NAME: 権限バインディングを追加するマシンイメージの名前。
    • EMAIL: VM を作成している serviceAccount または user のメールアドレス。メールアドレスは必要な接頭辞を含む形式にしてください。接頭辞は次のいずれかでなければなりません。

      • user:: メールアドレスがユーザー アカウントに関連付けられている場合に指定します。
      • serviceAccount:: メールアドレスがサービス アカウントに関連付けられている場合に指定します。例: serviceAccount:123456789000-compute@developer.gserviceaccount.com

    たとえば、my-machine-image というマシンイメージへの compute.admin バインディングを、サービス アカウントのメールアドレス 123456789000-compute@developer.gserviceaccount.com に追加します。

    gcloud beta compute machine-images add-iam-policy-binding my-machine-image \
        --project=machine-image-project \
        --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \
        --role='roles/compute.admin'
    
  2. gcloud beta compute instances create コマンドを使用して、マシンイメージからインスタンスを作成します。

    gcloud beta compute instances create VM_NAME \
        --project=VM_PROJECT \
        --zone ZONE \
        --source-machine-image projects/PROJECT_ID/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account service-account-email
    

    以下を置き換えます。

    • VM_PROJECT: 新しい VM を作成するプロジェクトのプロジェクト ID。
    • VM_NAME: 新しい VM の名前。
    • ZONE: 新しい VM に使用するゾーン
    • PROJECT_ID: マシンイメージが置かれているプロジェクトのプロジェクト ID。
    • MACHINE_IMAGE_NAME: VM の作成に使用するマシンイメージ。
    • SERVICE_ACCOUNT: VM プロジェクトに関連付けられたサービス アカウントのメールアドレス。

      たとえば、us-east1-b ゾーンで、vm-project というプロジェクトにある my-machine-image というマシンイメージから、my-instance というインスタンスを作成します。

      service-account タグは、VM プロジェクトのサービス アカウントを指定します。このタグを指定しないと、ソース サービス アカウントは両方のプロジェクトで共有できず、オペレーションは失敗します。

      gcloud beta compute instances create my-instance \
       --project=vm-project \
       --zone us-east1-b \
       --source-machine-image projects/project-67890/global/machineImages/my-machine-image \
       --service-account 123456789000-compute@developer.gserviceaccount.com
      

      新しいインスタンスが作成されると、次のような出力が表示されます。

      Created [https://www.googleapis.com/compute/beta/projects/project-12345/zones/us-east1-b/instances/my-instance].
      NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
      my-instance        us-east1-b  n1-standard-1               192.0.2.1   203.224.0.113  RUNNING
      

マシンイメージからインスタンスを作成する(プロパティのオーバーライドあり)

作成するインスタンスが主にマシンイメージに基づいていて、変更がいくつかある場合は、オーバーライド動作を使用できます。オーバーライド動作を使用するには、インスタンスを作成するときに既存のマシンイメージプロパティをオーバーライドする属性を渡します。

マシンイメージからほとんどのインスタンス プロパティはオーバーライドできます。オーバーライド機能を使用するときは、次の点にご注意ください。

  • マシンイメージを生成するために使用したソース VM と新しい VM インスタンスが同じプロジェクトと同じリージョンに属している場合、次のことが適用されます。

    • ソース インスタンスと新しいインスタンスのプロパティはほとんどが同じです。異なるプロパティとしては、自動的に割り当てられる一時的 IP アドレスなどがあります。
    • 新しいインスタンスを作成するときソース VM インスタンスがまだ存在する場合、新しいインスタンスはソース インスタンスと同じ名前とゾーンを使用できません。
  • マシンイメージを生成するために使用するソース VM と新しい VM インスタンスが同じプロジェクトに属しているけれども異なるリージョンに属している場合、次のことが適用されます。

    • 新しいインスタンスのすべてのゾーンリソースとリージョン リソースをオーバーライドする必要があります。たとえば、VM インスタンスを作成するとき使用するマシンイメージのソース インスタンスが別のリージョンに属している場合は、サブネットワークやリージョン ファイアウォール ルールなどのリージョン リソースをオーバーライドする必要があります。ただし、ロードバランサやサービス アカウントなどのグローバル リソースは、変更しないのであれば、オーバーライドする必要はありません。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [マシンイメージからの新しい VM インスタンス] をクリックします。
  4. マシンイメージを選択して [続行] をクリックします。
  5. インスタンスの名前を指定します。
  6. 変更するプロパティを更新します。
  7. [作成] をクリックします。追加の設定の詳細については、インスタンスの作成をご覧ください。

gcloud

gcloud beta compute instances create コマンドを使用してインスタンスをマシンイメージから作成して、オーバーライドするプロパティを追加します。

たとえば、次の gcloud コマンドを使用して、us-east1-b ゾーンで my-instance というインスタンスを、my-machine-image というマシンイメージから作成できます。この例では、オーバーライドを適用してマシンタイプを変更し、メンテナンス ポリシーを終了します。

gcloud beta compute instances create my-instance \
    --zone us-east1-b \
    --source-machine-image my-machine-image \
    --machine-type n1-standard-2 \
    --maintenance-policy TERMINATE

API

マシンイメージのプロパティをインスタンスの作成中にオーバーライドするには、instances.insert() API を使用してオーバーライドするフィールドをリクエスト本文で指定します。

API で、instances.insert メソッドに対して POST リクエストを作成します。リクエストの本文に、sourceMachineImage パラメータと必要なオーバーライドを追加します。インスタンスの作成時に通常設定するプロパティを追加できます。たとえば、マシンタイプを変更する場合は、API 呼び出しに machineType パラメータが追加されます。

POST https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

以下を置き換えます。

  • PROJECT_ID: 実際の プロジェクト ID
  • ZONE: 新しいインスタンスに使用するゾーン
  • VM_NAME: 作成するインスタンスの名前。
  • NEW_MACHINE_TYPE: 新しいインスタンスに使用する マシンタイプ
  • SOURCE_MACHINE_IMAGE_URL: インスタンスを作成するために使用するマシンイメージの完全 URL または部分 URL。たとえば、my-machine-image というマシンイメージが myProject というプロジェクトにあるとします。有効な URL は次のとおりです。

    • https://www.googleapis.com/compute/v1/projects/myProject/global/global/machineImages/my-machine-image
    • projects/myProject/global/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

オーバーライド動作

API でオーバーライド動作が従う JSON マージ パッチ ルールは、RFC 7396 で説明されています。要約すると、次のルールが適用されます。

  • プリミティブ フィールドをオーバーライドすると、テンプレート内の対応するプリミティブ フィールドはリクエスト内のプリミティブ フィールド値に置き換えられます。プリミティブ フィールドには、machineTypename などのパラメータが含まれます。
  • 繰り返しフィールドをオーバーライドすると、そのプロパティのすべての繰り返し値が、リクエストで指定された対応する値に置き換えられます。繰り返しフィールドは一般的に、型が list のプロパティです。たとえば、disksnetworkInterfaces は繰り返しフィールドです。
  • nested object をオーバーライドすると、インスタンス テンプレート内のオブジェクトは、リクエスト内の対応するオブジェクト仕様とマージされます。ネストされたオブジェクトが繰り返しフィールド内にある場合、そのフィールドは繰り返しフィールドのルールに従って扱われます。ラベルはこのルールの例外であり、ラベルの型が object であっても繰り返しフィールドとして扱われます。

次のステップ