ソースディスク、イメージ、スナップショット、Cloud Storage に保存されているイメージからカスタム イメージを作成できます。作成したイメージは、新しい VM インスタンスの作成に使用できます。これは、永続ブートディスクまたは特定のイメージを作成して特定の状態に変更し、その状態を保存して新しいインスタンスを作成する場合に理想的です。
あるいは、仮想ディスク インポート ツールを使用して、既存のシステムから Compute Engine にブートディスク イメージをインポートし、それらのイメージをカスタム イメージリストに追加することもできます。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行います。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- イメージのページを参照してください。
カスタム イメージの作成
ここでは、Linux インスタンスでカスタム イメージを作成する方法を説明します。Windows イメージの作成手順については、Windows イメージを作成するを参照してください。
イメージを他のプロジェクトと共有するには、ID とアクセスの管理(IAM)権限を使用する必要があります。
イメージの保存ロケーションの選択
カスタム イメージを作成する場合、デュアルリージョンのロケーションを除く、イメージの Cloud Storage のロケーションを指定できます。イメージの保存ロケーションを指定すると、リージョン全体の冗長性を確保することで、データの局所性に関する規制およびコンプライアンスの要件と、高可用性のニーズを満たすことができます。
保存ロケーション機能はオプションです。ロケーションを選択しない場合、Compute Engine はイメージソースに最も近いマルチリージョンにイメージを保存します。
現在画像が保存されている場所を表示するには、gcloud beta compute
から images describe
コマンドを使用します。
gcloud beta compute images describe [IMAGE_NAME] --project [PROJECT]
⋮
storageLocations:
- us-central1
この機能を起動する前の既存のイメージはすべて、元のロケーションに残ります。唯一の変更点は、すべてのイメージについてイメージのロケーションを表示できることです。移動する既存のイメージがある場合、目的のロケーションに再作成する必要があります。
イメージに対するインスタンスの準備
実行中の VM インスタンスに接続されている状態のディスクからでもイメージを作成できます。ただし、イメージをキャプチャしやすい状態にインスタンスを調整することで、イメージの信頼性が向上します。次のいずれかの手順でブートディスクをイメージ用に準備します。
インスタンスを停止してシャットダウンできるようにし、永続ディスクへのデータの書き込みを停止します。
イメージを作成する前にインスタンスを停止できない場合は、ディスクへの書き込み量を最小限に抑え、ファイル システムを同期してください。
- 永続ディスクにデータを書き込むアプリケーションまたはオペレーティング システム プロセスを一時停止します。
- 必要に応じて、アプリケーションでディスクへのフラッシュを実行します。たとえば、MySQL では
FLUSH
ステートメントを使用します。他のアプリケーションにも同様のプロセスがある場合があります。 - アプリケーションの永続ディスクへの書き込みを停止します。
sudo sync
を実行します。
インスタンスの準備が完了したら、イメージを作成します。
イメージを作成する
次のソースからディスク イメージを作成できます。
- 永続ディスク。ディスクがインスタンスに接続されていても構いません
- 永続ディスクのスナップショット
- プロジェクトの別のイメージ
- 別のプロジェクトで共有されているイメージ
Google Cloud Storage 内の圧縮された RAW イメージ
Console
- Google Cloud Platform Console で、[イメージの作成] ページに移動します。
[イメージの作成] ページに移動 - イメージの [名前] を指定します。
- イメージ作成元の [ソース] を指定します。永続ディスク、スナップショット、別のイメージまたは Google Cloud Storage 内の disk.raw ファイルが指定できます
- イメージを保存する [ロケーション] を指定します。[ソースディスクのロケーションに基づく(デフォルト)] プルダウン メニューからイメージの保存ロケーションを選択します。たとえば、
us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。 - イメージのプロパティを指定します。たとえば、イメージのイメージ ファミリー名を指定して、このイメージをイメージ ファミリーの一部として管理できます。
- [作成] をクリックしてイメージを作成します。
gcloud
gcloud compute beta images create
コマンドを使用して、カスタム イメージを作成します。beta
タグはオプションの --storage-location
フラグに必要です。
別のイメージからイメージを作成します。
gcloud beta compute images create [IMAGE_NAME] \
--source-disk [SOURCE_DISK] \
--source-disk-zone [ZONE] \
--family [IMAGE_FAMILY] \
--storage-location [LOCATION] \
--force
次のように、実際の値に置き換えてください。
[IMAGE_NAME]
は、新しいイメージの名前です。[SOURCE_DISK]
は、新しいイメージの作成元となるディスクです。[ZONE]
は、ディスクが配置されているゾーンです。[IMAGE_FAMILY]
は、このイメージが属するイメージ ファミリーを指定するオプションのフラグです。[LOCATION]
は、イメージを保存するリージョンまたはマルチリージョンを指定できるオプションのフラグです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。[--force]
は、実行中のインスタンスからイメージを作成するためのオプションのフラグです。デフォルトでは、実行中のインスタンスからイメージを作成することはできません。このフラグは、インスタンスの実行中にイメージを作成することを確実に意図している場合にのみ指定してください。
別のイメージからイメージを作成します。
gcloud beta compute images create [IMAGE_NAME] \
--source-image [SOURCE_IMAGE] \
--source-image-project [IMAGE_PROJECT] \
--family [IMAGE_FAMILY] \
--storage-location [LOCATION]
次のように、実際の値に置き換えてください。
[IMAGE_NAME]
は、新しいイメージの名前です。[SOURCE_IMAGE]
は、新しいイメージの作成元となるイメージです。[IMAGE_PROJECT]
は、ソースイメージを配置するプロジェクトを指定するオプションのパラメータです。このパラメータは、別のプロジェクトからイメージをコピーする場合に使用します。[IMAGE_FAMILY]
は、この新しいイメージが属するイメージ ファミリーを指定するオプションのフラグです。[LOCATION]
は、イメージを保存するリージョンまたはマルチリージョンを指定できるオプションのフラグです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
スナップショットからイメージを作成します。
gcloud beta compute images create [IMAGE_NAME] \
--source-snapshot [SOURCE_SNAPSHOT] \
--storage-location [LOCATION]
次のように、実際の値に置き換えてください。
[IMAGE_NAME]
は、新しいイメージの名前です。[SOURCE_SNAPSHOT]
は、新しいイメージの作成元となるスナップショットです。[LOCATION]
は、イメージを保存するリージョンまたはマルチリージョンを指定できるオプションのフラグです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
イメージのロケーションの表示
gcloud beta compute images describe
コマンドを使用して、イメージのロケーションを表示します。beta
タグは、イメージの保存ロケーションを確認するのに必要です。
gcloud beta compute images describe [IMAGE_NAME]
[IMAGE_NAME]
は、説明するイメージの名前です。
API
images().insert
メソッドに対して POST
リクエストを実行します。リクエストの本文内の URL で、イメージの作成元となるソース オブジェクトをポイントします。独自のプロジェクト ID とイメージ名を使用して、リソースへの URL を指定します。このメソッドの beta
版を使用して、storageLocations
パラメータを指定します。
永続ディスクからイメージを作成します。
POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/global/images
{
"name": "[IMAGE_NAME]",
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",
"storageLocations": "[LOCATION]",
"forceCreate": "[FORCE_CREATE]"
}
次のように、実際の値に置き換えてください。
[PROJECT_ID]
は、イメージが属するプロジェクトです。[IMAGE_NAME]
は、作成する新しいイメージの名前です。[ZONE]
は、ソースディスクが配置されているゾーンです。[SOURCE_DISK]
は、イメージの作成元のディスクです。[LOCATION]
は、イメージの保存ロケーションを選択できるオプションのパラメータです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。[FORCE_CREATE]
は、実行中のインスタンスからイメージを作成するためのオプションのパラメータです。実行中のインスタンスからイメージを作成することを確実に意図している場合にのみ、TRUE
を指定します。このパラメータを指定しない場合、デフォルト値はFALSE
です。
別のイメージからイメージを作成します。
POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/global/images
{
"name": "[IMAGE_NAME]",
"sourceImage": "/global/images/[SOURCE_IMAGE]",
"storageLocations": "[LOCATION]"
}
次のように、実際の値に置き換えてください。
[PROJECT_ID]
は、イメージが属するプロジェクトです。[IMAGE_NAME]
は、作成する新しいイメージの名前です。[SOURCE_IMAGE]
は、イメージの作成元となるイメージです。[LOCATION]
は、イメージの保存ロケーションを選択できるオプションのパラメータです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
スナップショットからイメージを作成します。
POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/global/images
{
"name": "[IMAGE_NAME]",
"sourceSnapshot": "/[SOURCE_PROJECT_ID]/global/snapshots/[SOURCE_SNAPSHOT]",
"storageLocations": "[LOCATION]"
}
次のように、実際の値に置き換えてください。
[PROJECT_ID]
は、イメージが属するプロジェクトです。[IMAGE_NAME]
は、作成する新しいイメージの名前です。[SOURCE_SNAPSHOT]
は、イメージの作成元となるスナップショットです。[SOURCE_PROJECT_ID]
は、スナップショットが配置されているプロジェクトを指定するオプションの変数です。そのプロジェクト内のスナップショット リソースにアクセスするには権限が必要です。[LOCATION]
は、イメージの保存ロケーションを選択できるオプションのパラメータです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
イメージを追加する方法の詳細については、イメージ参照をご覧ください。
イメージの使用を中止する
Google Compute Engine では、イメージに使用中止ステータスを設定することで、所有するカスタム イメージの使用を中止できます。使用中止ステータスごとに異なるレスポンスがサーバーから生成され、移行ユーザーがサポートされないイメージの使用を管理可能な方法で中止するのに役立ちます。コンソール、gcloud
コマンド、Compute Engine API メソッドのいずれかを使用して、イメージの使用を中止します。
Console
- Google Cloud Platform Console で、[イメージの作成] ページに移動します。
[イメージの作成] ページに移動 - 使用を中止するイメージの左側にあるチェックボックスをオンにします。
- ページ上部の [廃止] をクリックします。イメージの使用は中止されます。
gcloud
gcloud compute images deprecate
コマンドを使用して、イメージの使用中止ステータスを設定します。
gcloud compute images deprecate [IMAGE_NAME] \
--state [STATE] \
--replacement [REPLACEMENT]
[IMAGE_NAME]
には使用を中止するイメージの名前を指定します。
サポート終了状態は、次のいずれかになります。
DEPRECATED
- このイメージは使用中止されたとみなされます。ユーザーがこのイメージを使用しようとすると、リクエストは成功しますが、Google Compute Engine によって警告も返されます。このイメージへの新しいリンクは依然として許可されます。イメージ ファミリーは、このイメージがファミリー内で最新のイメージであっても、このイメージをポイントしなくなります。OBSOLETE
- このイメージは廃止され、新しいユーザーはこれを使用できません。Google Compute Engine は、ユーザーがリクエストでこのイメージを使用しようとした場合にエラーを返します。このイメージへの既存のリンクは依然として許可されます。DELETED
- このイメージは削除され、ユーザーは使用できません。Google Compute Engine は、ユーザーがこのイメージを使用しようとした場合にエラーを返します。
API
images().deprecate
メソッドに POST
リクエストを行います。使用を中止するイメージの名前を指定します。
POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/[RESOURCE_ID]/deprecate
{
"deprecated": "[IMAGE_NAME]",
"replacement": "[REPLACEMENT]"
}
次のように、実際の値に置き換えてください。
[PROJECT_ID]
は、イメージが属するプロジェクトです。[IMAGE_NAME]
は、使用を中止するイメージです。[REPLACEMENT]
は、使用を中止するイメージを置き換えるイメージです。
イメージを削除する
削除できるカスタム イメージは、プロジェクトへのアクセス権を持つ他のユーザーまたは自分が追加したカスタム イメージのみです。コンソール、gcloud
コマンド、Compute Engine API メソッドのいずれかを使用して、イメージを削除します。
Console
- Google Cloud Platform Console で、[イメージの作成] ページに移動します。
[イメージの作成] ページに移動 - 削除するイメージの左側にあるチェックボックスをオンにします。
- ページの上部にある [削除] をクリックします。イメージは削除されます。
gcloud
gcloud compute images delete
コマンドを使用して、イメージを削除します。
gcloud compute images delete [IMAGE_NAME]
[IMAGE_NAME]
には削除するイメージの名前を指定します。
API
images().delete
メソッドに POST
リクエストを行います。削除するイメージの名前を指定します。
POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/[RESOURCE_ID]
次のように、実際の値に置き換えてください。
[PROJECT_ID]
は、イメージが属するプロジェクトです。[RESOURCE_ID]
は、削除するイメージの名前です。
イメージ ファミリー内のイメージのバージョンを設定する
イメージ ファミリーを使用して、イメージのバージョン管理を簡略化します。イメージをイメージ ファミリーに追加し、最新のイメージ バージョンとして設定します。イメージ ファミリーを以前のイメージ バージョンにロールバックする必要があると判断した場合は、ファミリー内の最新のイメージの使用を中止します。
オプションで、コンソール、gcloud beta compute images create
コマンドおよび --storageLocation
フラグ、beta
images().insert
API メソッドのいずれかを使用して、イメージの保存ロケーションを指定できます。
たとえば、image-v1
という名前のイメージをイメージ ファミリーの一部として作成します。
Console
- Google Cloud Platform Console で、[イメージの作成] ページに移動します。
[イメージの作成] ページに移動 - イメージの [名前] を指定します。
- イメージ作成元の [ソース] を指定します。永続ディスク、スナップショット、別のイメージまたは Google Cloud Storage 内の disk.raw ファイルが指定できます
イメージを保存する [ロケーション] を指定します。[ソースディスクのロケーションに基づく(デフォルト)] プルダウン メニューからイメージの保存ロケーションを選択します。たとえば、
us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。イメージのプロパティを指定します。たとえば、イメージのイメージ ファミリー名
my-image-family
を指定して、このイメージをイメージ ファミリーの一部として管理できます。実行中のイメージに接続されたディスクからイメージを作成する場合、[Force creation from running instance] をオンにして、インスタンスの実行中にイメージを作成することを確認します。
[作成] をクリックしてイメージを作成します。
gcloud
gcloud compute images create image-v1 \
--source-disk disk-1 \
--source-disk-zone us-central1-f \
--family my-image-family \
イメージ ファミリーは image-v1
をポイントします。2 つ目のイメージをファミリーに追加します。
gcloud compute images create image-v2 \
--source-disk disk-2 \
--source-disk-zone us-central1-f \
--family my-image-family \
API
images().insert
メソッドに POST
リクエストを行います。リクエストの本文にイメージ ファミリーを指定します。
POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images
{
"name": "image-v2",
"sourceDisk": "/zones/us-central1-f/disks/disk-2",
"family":"my-image-family",
}
image-v2
はイメージ ファミリーに追加した最新のイメージであるため、イメージ ファミリーではこのイメージがポイントされます。
gcloud
gcloud compute images describe-from-family
コマンドを実行して、ファミリーでどのイメージがポイントされるかを確認できます。
例:
gcloud beta compute images describe-from-family my-image-family
family: my-image-family
id: '8904691942610171306'
kind: compute#image
name: image-v2
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/images/image-v2
sourceDisk: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v2
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY
API
images().getFromFamily
メソッドに GET
リクエストを行います。リクエストの本文にイメージ ファミリーを指定します。
GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/family
{
"resourceId":"my-image-family",
}
イメージ ファミリーをロールバックして image-v2
をポイントしなくなるようにする必要があると判断した場合は、image-v2
をサポート終了にすると、ファミリーは再び image-v1
をポイントします。
gcloud compute images deprecate image-v2 \
--state DEPRECATED \
--replacement image-v1
イメージ ファミリーがもう一度 image-v1
をポイントしていることを確認してください。
gcloud beta compute images describe-from-family my-image-family
family: my-image-family
id: '2741732787056801255'
kind: compute#image
name: image-v1
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/images/image-v1
sourceDisk: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v1
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY
カスタム イメージ上でゲスト オペレーティング システムの機能を有効にする
カスタム イメージを作成する際に、guestOsFeatures
パラメータを設定できます。このパラメータを使用すると、ブートディスクのためにイメージを使用する VM インスタンスの 1 つ以上の機能を有効にすることができます。次の機能が利用可能です。
MULTI_IP_SUBNET
-/32
以外のネットマスクでインターフェースを構成します。SECURE_BOOT
- UEFI セキュアブートを有効にします。これにより、署名のないソフトウェアの起動や、VM インスタンスでの署名のないドライバの読み込みが制限されます。このパラメータを設定すると、VM インスタンスの作成中にセキュアブート機能を有効にできます。UEFI_COMPATIBLE
- イメージが、UEFI、ファームウェア、セキュアブート、vTPM、整合性モニタリングなどの Shielded VM 機能をサポートしていることを示します。VIRTIO_SCSI_MULTIQUEUE
- ローカル SSD デバイス用のマルチキュー SCSI 機能を有効にします。このオプションは、NVMe の代替手段です。- Linux イメージの場合、カーネル バージョン 3.17 以上のイメージで
VIRTIO_SCSI_MULTIQUEUE
を有効にできます。 - Windows イメージの場合、ドライバ バージョン 1.2.0.1621 以上のイメージで
VIRTIO_SCSI_MULTIQUEUE
を有効にできます。
- Linux イメージの場合、カーネル バージョン 3.17 以上のイメージで
WINDOWS
- Windows Server イメージの場合に必要です。Windows Server 用の新しい公開イメージには、それが Windows イメージであることを示すWINDOWS
パラメータが含まれています。
gcloud
コマンドライン ツールまたは API を使用して、カスタム イメージにおけるゲスト オペレーティング システムの機能を有効にします。
gcloud
gcloud compute images create
コマンドを使用して、既存のカスタム イメージの 1 つからカスタム イメージを作成します。また、--guest-os-features
フラグも含めます。gcloud compute beta images create
コマンドを使用して、オプションの --storage-location
フラグを含めます。
gcloud beta compute images create [IMAGE_NAME] \
--source-image [SOURCE_IMAGE] \
--source-image-project [IMAGE_PROJECT] \
--guest-os-features="[FEATURE_ID],..." \
--storage-location [LOCATION]
次のように、実際の値に置き換えてください。
[IMAGE_NAME]
は、作成する新しいイメージの名前です。[SOURCE_IMAGE]
は、新しいイメージの作成元となるイメージです。[IMAGE_PROJECT]
は、ソースイメージを配置するプロジェクトを指定するオプションのパラメータです。このパラメータは、別のプロジェクトからイメージをコピーする場合に使用します。[FEATURE_ID]
は、ゲスト OS で利用可能な機能の ID です。カンマ区切りリストとして複数の機能を指定できます。[LOCATION]
は、イメージを保存するリージョンまたはマルチリージョンを指定できるオプションのフラグです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
API
images().insert
メソッドに対して POST
リクエストを実行します。リクエストの本文内の URL で、イメージの作成元となるソース オブジェクトをポイントします。プロジェクトとゾーンを自分のプロジェクト ID と永続ディスクのゾーンに置き換えます。storageLocations
パラメータを確認するには、このリクエストに beta
API メソッドを使用します。
永続ディスクからイメージを作成します。
POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/global/images
{
"name": "[IMAGE_NAME]",
"sourceImage": "projects/[IMAGE_PROJECT]/global/images/[SOURCE_IMAGE]",
"storageLocations": "[LOCATION]",
"guestOsFeatures": [
{
"type": "[FEATURE_ID]"
}
]
}
次のように、実際の値に置き換えてください。
[IMAGE_NAME]
は、作成する新しいイメージの名前です。[SOURCE_IMAGE]
は、新しいイメージの作成元となるイメージです。[IMAGE_PROJECT]
は、ソースイメージがどのプロジェクトに配置されているかを指定するパラメータです。[LOCATION]
は、イメージの保存ロケーションを選択できるオプションのパラメータです。たとえば、us
を指定してイメージをus
マルチリージョンに保存するか、us-central1
を指定してus-central1
リージョンに保存します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。[FEATURE_ID]
は、ゲスト OS で利用可能な機能の ID です。カンマ区切りリストとして複数の機能を指定できます。
イメージを追加する方法の詳細については、イメージ参照をご覧ください。
次のステップ
- 他のプロジェクトと非公開イメージを共有する。
- ディスク、イメージ、VM インスタンスをインポートする方法を学習する。
- イメージを Google Cloud Storage にエクスポートする方法を学習する。
- カスタム イメージからインスタンスを起動する方法を学習する。
- Jenkins と Packer を使用してカスタムベース イメージを作成する方法を学習する。