マシンイメージを作成すると、そのマシンイメージから仮想マシン(VM)インスタンスを作成できます。マシンイメージを使用する場合の詳細については、マシンイメージを使用するときをご覧ください。
マシンイメージには、インスタンスを作成する場合に必要となるほとんどの情報とデータが含まれています。
マシンイメージは変更できませんが、マシンイメージからインスタンスを作成するときに、マシンイメージのほぼすべてのプロパティをオーバーライドできます。
Google Cloud Console、gcloud
コマンドライン ツール、Compute Engine API のいずれかを使用して、マシンイメージからインスタンスを作成できます。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
マシンイメージから VM を作成する(オーバーライドなし)
プロパティを変更せずに完全なマシンイメージから VM を作成する場合は、この方法を使用します。
Console
Google Cloud Console で、[VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[マシンイメージからの新しい VM インスタンス] をクリックします。
マシンイメージを選択して [続行] をクリックします。
インスタンスの名前を指定します。
[作成] をクリックします。
gcloud
gcloud beta compute instances create
コマンドを使用して、マシンイメージからインスタンスを作成します。
gcloud beta compute instances create VM_NAME \ --zone ZONE \ --source-machine-image SOURCE_MACHINE_IMAGE_NAME
次のように置き換えます。
VM_NAME
: 作成する VM の名前。ZONE
: VM のゾーン。SOURCE_MACHINE_IMAGE_NAME
: VM の作成元にするマシンイメージ。
例
たとえば、次の gcloud
コマンドを使用すると、us-east1-b
ゾーンに my-machine-image
マシンイメージから my-instance
VM を作成できます。
gcloud beta compute instances create my-instance \ --zone us-east1-b \ --source-machine-image my-machine-image
VM が作成されると、次のような出力が表示されます。
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 e2-standard-2 192.0.2.1 203.224.0.113 RUNNING
API
API で、instances.insert
メソッドに対して POST
リクエストを作成します。リクエストの本文に次のパラメータを指定します。
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL" }
次のように置き換えます。
PROJECT_ID
: 実際のプロジェクト ID。ZONE
: VM のゾーン。VM_NAME
: 作成する VM の名前。SOURCE_MACHINE_IMAGE_URL
: VM の作成に使用するマシンイメージの完全な URL または部分的な URL。たとえば、my-machine-image
というマシンイメージがmyProject
というプロジェクトにあるとします。有効な URL は次のとおりです。https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
projects/myProject/global/machineImages/my-machine-image
global/machineImages/my-machine-image
別のプロジェクトのマシンイメージから VM を作成する
別のプロジェクトのマシンイメージから VM を作成する場合は、マシンイメージにアクセスできることを確認し、新しい VM のサービス アカウント プロパティをオーバーライドする必要があります。次のセクションでは、gcloud
コマンドライン ツールを使用して、別のプロジェクトのマシンイメージから VM を作成する方法を説明します。
別のプロジェクトに保存されているマシンイメージへのアクセスを許可します。
権限をソース プロジェクトとマシンイメージのいずれかに付与できます。
gcloud
コマンドライン ツールを使用してマシンイメージで権限を付与するには、次のコマンドを実行します。gcloud beta compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \ --project=MACHINE_IMAGE_PROJECT \ --member='ACCOUNT_EMAIL' \ --role='roles/compute.admin'
次のように置き換えます。
MACHINE_IMAGE_PROJECT
: ソース マシンイメージを含むプロジェクトのプロジェクト ID。MACHINE_IMAGE_NAME
: 権限バインディングを追加するマシンイメージの名前。ACCOUNT_EMAIL
: VM を作成しているserviceAccount
またはuser
のメールアドレス。メールアドレスは必要な接頭辞を含む形式にしてください。接頭辞は次のいずれかでなければなりません。user:
: メールアドレスがユーザー アカウントに関連付けられている場合に指定します。例:user:user@example.com
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'
gcloud beta compute instances create
コマンドを使用して、マシンイメージから VM を作成します。gcloud beta compute instances create VM_NAME \ --project=VM_PROJECT_ID \ --zone ZONE \ --source-machine-image projects/MACHINE_PROJECT_ID/global/machineImages/MACHINE_IMAGE_NAME \ --service-account SERVICE_ACCOUNT_EMAIL
次のように置き換えます。
VM_PROJECT_ID
: VM を作成するプロジェクトのプロジェクト ID。VM_NAME
: 作成する VM の名前。ZONE
: VM のゾーン。MACHINE_PROJECT_ID
: マシンイメージのあるプロジェクトのプロジェクト ID。MACHINE_IMAGE_NAME
: VM の作成元にするマシンイメージ。SERVICE_ACCOUNT_EMAIL
: VM を作成しているserviceAccount
のメールアドレス。例
たとえば、
us-east1-b
ゾーンに、vm-project
というプロジェクトのmy-machine-image
という名前のマシンイメージからmy-instance
という名前の VM を作成するには、次のようにします。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
VM が作成されると、次のような出力が表示されます。
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 e2-standard-2 192.0.2.1 203.224.0.113 RUNNING
マシンイメージから VM を作成する(プロパティのオーバーライドあり)
マシンイメージに基づいて VM を作成して、いくつかの変更を行う場合は、オーバーライドを行います。オーバーライドを使用するには、インスタンスを作成するときに、既存のマシンイメージのプロパティをオーバーライドする属性を渡します。
マシンイメージのほとんどの VM プロパティはオーバーライドできます。オーバーライド機能を使用する場合は、次の点にご注意ください。
マシンイメージの生成に使用したソース VM と新しい VM が同じプロジェクトで、同じリージョンにある場合:
- ソース インスタンスと新しい VM のプロパティはほとんど同じです。異なるプロパティとしては、自動的に割り当てられるエフェメラル IP アドレスなどがあります。
- 新しい VM を作成しても、ソース VM インスタンスがまだ存在している場合は、新しい VM にソース インスタンスと同じ名前とゾーンを使用することはできません。
マシンイメージの生成に使用したソース VM と新しい VM が同じプロジェクトでも、リージョンが異なる場合:
- 新しい VM のすべてのゾーンリソースとリージョン リソースをオーバーライドする必要があります。たとえば、VM インスタンスを作成するとき使用するマシンイメージのソース インスタンスが別のリージョンに属している場合は、サブネットワークやリージョン ファイアウォール ルールなどのリージョン リソースをオーバーライドする必要があります。ただし、ロードバランサやサービス アカウントなどのグローバル リソースは、変更しないのであれば、オーバーライドする必要はありません。
Console
Google Cloud Console で、[VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[マシンイメージからの新しい VM インスタンス] をクリックします。
マシンイメージを選択して [続行] をクリックします。
インスタンスの名前を指定します。
変更するプロパティを更新します。
[作成] をクリックします。設定の詳細については、インスタンスの作成をご覧ください。
gcloud
gcloud beta compute instances create
コマンドを使用してインスタンスをマシンイメージから作成して、オーバーライドするプロパティを追加します。
たとえば、次の gcloud
コマンドを使用すると、us-east1-b
ゾーンに my-machine-image
マシンイメージから my-instance
VM を作成できます。この例では、マシンタイプの変更とメンテナンス ポリシーの停止でオーバーライドを行います。
gcloud beta compute instances create my-instance \ --zone us-east1-b \ --source-machine-image my-machine-image \ --machine-type e2-standard-2 \ --maintenance-policy TERMINATE
API
VM の作成時にマシンイメージのプロパティをオーバーライドするには、instances.insert()
API を使用し、オーバーライドするフィールドをリクエスト本文で指定します。
API で、instances.insert
メソッドに対して POST
リクエストを作成します。リクエストの本文に、sourceMachineImage
パラメータと必要なオーバーライドを追加します。インスタンスの作成時に通常設定するプロパティを追加できます。たとえば、マシンタイプを変更する場合は、API 呼び出しに machineType
パラメータが追加されます。
POST https://compute.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 のゾーン。VM_NAME
: 作成する VM の名前。NEW_MACHINE_TYPE
: VM に使用するマシンタイプ。SOURCE_MACHINE_IMAGE_URL
: インスタンスの作成に使用するマシンイメージの完全な URL または部分的な URL。たとえば、my-machine-image
というマシンイメージがmyProject
というプロジェクトにあるとします。有効な URL は次のとおりです。https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
projects/myProject/global/machineImages/my-machine-image
global/machineImages/my-machine-image
オーバーライド動作
API のオーバーライド動作は、RFC 7396 で記述されている JSON マージパッチ ルールに従います。要約すると、次のルールが適用されます。
- プリミティブ フィールドをオーバーライドすると、マシンイメージ内の対応するプリミティブ フィールドはリクエスト内のプリミティブ フィールド値に置き換えられます。プリミティブ フィールドには、
machineType
やname
などのパラメータが含まれます。 - 繰り返しフィールドをオーバーライドすると、そのプロパティのすべての繰り返し値が、リクエストで指定された対応する値に置き換えられます。繰り返しフィールドは一般的に、型が
list
のプロパティです。たとえば、disks
とnetworkInterfaces
は繰り返しフィールドです。 nested object
をオーバーライドすると、マシンイメージ内のオブジェクトは、リクエスト内の対応するオブジェクト仕様とマージされます。ネストされたオブジェクトが繰り返しフィールド内にある場合、そのフィールドは繰り返しフィールドのルールに従って扱われます。ラベルはこのルールの例外であり、ラベルの型がobject
であっても繰り返しフィールドとして扱われます。
次のステップ
- マシンイメージの詳細を確認する
- VM インスタンスの作成の詳細を確認する