ソースディスク、イメージ、スナップショット、Cloud Storage に保存されているイメージからカスタム イメージを作成し、そのイメージを使用して仮想マシン(VM)インスタンスを作成できます。カスタム イメージは、永続ブートディスクまたは特定のイメージを作成して特定の状態に変更し、その状態を保存して VM を作成する場合に理想的です。
あるいは、仮想ディスク インポート ツールを使用して、既存のシステムから Compute Engine にブートディスク イメージをインポートし、それらのイメージをカスタム イメージリストに追加することもできます。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- Images ドキュメントを確認します。
カスタム イメージの作成
このセクションでは、Linux VM でカスタム イメージを作成する方法について説明します。Windows イメージの作成については、Windows イメージを作成するをご覧ください。
イメージの保存ロケーションの選択
カスタム イメージを作成する場合、デュアルリージョンのロケーションを除く、イメージの Cloud Storage のロケーションを指定できます。イメージの保存ロケーションを指定すると、リージョン全体の冗長性を確保することで、データの局所性に関する規制およびコンプライアンスの要件と、高可用性のニーズを満たすことができます。Cloud Storage に保存されるイメージを作成、変更、削除するには、roles/compute.storageAdmin
が必要です。
保存ロケーション機能はオプションです。ロケーションを選択しない場合、Compute Engine はイメージソースに最も近いマルチリージョンにイメージを保存します。たとえば、us-central1
にあるソースディスクからイメージを作成する場合、カスタム イメージのロケーションを指定しないと、Compute Engine はイメージを us
マルチリージョンに保存します。
VM を作成しようとするリージョンでイメージを使用できない場合、Compute Engine は、VM の初回作成時に、そのリージョンのイメージをキャッシュに保存します。
イメージが保存されているロケーションを確認するには、gcloud compute
から images describe
コマンドを使用します。
gcloud compute images describe IMAGE_NAME \ --project=PROJECT_ID
次のように置き換えます。
IMAGE_NAME: イメージの名前。
PROJECT_ID: イメージが属するプロジェクト ID。
この機能のリリース前に存在するイメージはすべて元の場所に残ります。唯一の変更点は、すべてのイメージについてイメージのロケーションを確認できる点です。移動する既存のイメージがある場合、目的のロケーションに再作成する必要があります。
イメージに対する VM の準備
実行中の VM にアタッチされている状態のディスクからでもイメージを作成できます。ただし、イメージをキャプチャしやすい状態に VM を調整することで、イメージの信頼性が向上します。このセクションでは、ブートディスクをイメージ用に準備する方法について説明します。
永続ディスクへのデータの書き込みを最小限に抑える
ディスクの書き込みを減らすには、次のいずれかのプロセスを使用します。
VM を停止してシャットダウンできるようにし、永続ディスクへのデータの書き込みを停止します。
イメージを作成する前に VM を停止できない場合は、ディスクへの書き込み量を最小限に抑え、ファイル システムを同期してください。永続ディスクへの書き込みを最小限に抑えるには、次の手順を行います。
- 永続ディスクにデータを書き込むアプリやオペレーティング システムのプロセスを一時停止します。
- 必要に応じて、アプリでディスクへのフラッシュを実行します。たとえば、MySQL では
FLUSH
ステートメントを使用します。他のアプリにも同様のプロセスがある場合があります。 - アプリの永続ディスクへの書き込みを停止します。
sudo sync
を実行します。
ディスクの自動削除オプションを無効にする
デフォルトでは、ブートディスクでは自動削除オプションが有効になっています。ディスクからイメージを作成する前に、自動削除を無効にして、VM の削除時にディスクが自動削除されないようにします。
Google Cloud コンソール、Google Cloud CLI、または Compute Engine API を使用して、ディスクの自動削除を無効にできます。
Console
Google Cloud Console で、[VM インスタンス] ページに移動します。
イメージ作成のソースとして使用している VM をクリックします。[VM インスタンスの詳細] ページが表示されます。
[編集] をクリックします。
[削除ルール] の [ブートディスク] セクションで、[ディスクを維持] オプションが選択されていることを確認します。
[保存] をクリックします。
gcloud
Google Cloud CLI で gcloud compute instances set-disk-auto-delete
コマンドを使用して、ディスクの自動削除オプションを無効にします。
gcloud compute instances set-disk-auto-delete VM_NAME \ --no-auto-delete \ --disk=SOURCE_DISK
次のように置き換えます。
VM_NAME
: VM インスタンスの名前。SOURCE_DISK
: イメージ作成元のディスクの名前。
API
ディスクの自動削除オプションを設定するには、instances.setDiskAutoDelete
メソッドに POST
リクエストを行います。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setDiskAutoDelete?autoDelete=false&deviceName=SOURCE_DISK
次のように置き換えます。
PROJECT_ID
: ソース VM が属するプロジェクト ID。ZONE
: ソース VM を配置するゾーン。VM_NAME
: ソース VM の名前。SOURCE_DISK
: イメージ作成元のディスクのデバイス名。
VM の準備が完了したら、イメージを作成します。
イメージの作成
次のソースからディスク イメージを作成できます。
- 永続ディスク(ディスクが VM にアタッチされている場合も含む)
- 永続ディスクのスナップショット
- プロジェクトの別のイメージ
- 別のプロジェクトで共有されているイメージ
- Cloud Storage 内の圧縮された RAW イメージ
ディスク イメージは 10 分ごとに作成できます。ディスク イメージを作成するためのリクエストを大量に発行する場合、60 分で最大 6 件のリクエストを発行できます。詳細については、スナップショットの頻度の制限をご覧ください。
Console
Google Cloud Console で、[イメージの作成] ページに移動します。
イメージの [名前] を指定します。
イメージ作成元の [ソース] を指定します。永続ディスク、スナップショット、別のイメージまたは Cloud Storage 内の disk.raw ファイルが指定できます
実行中の VM にアタッチされたディスクからイメージを作成する場合、[インスタンスを実行し続ける] をオンにして、VM の実行中にイメージを作成することを確認します。イメージを作成する前に VM を準備できます。
[ソースディスクのロケーションに基づく(デフォルト)] プルダウン リストで、イメージを保存するロケーションを指定します。たとえば、イメージを
us
マルチリージョンに保存するにはus
を指定し、us-central1
リージョンに保存するにはus-central1
を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。省略可: イメージのプロパティを指定します。
- ファミリー: この新しいイメージが属するイメージ ファミリー。
- 説明: カスタム イメージの説明。
- ラベル: リソースをグループ化するラベル。
暗号鍵を指定します。Google が管理する鍵、Cloud Key Management Service(Cloud KMS)鍵、顧客指定の暗号鍵(CSEK)のいずれかを選択できます。暗号鍵が指定されていない場合、イメージは Google が管理する鍵を使用して暗号化されます。
[作成] をクリックしてイメージを作成します。
gcloud
Google Cloud CLI で gcloud compute images create
コマンドを使用し、カスタム イメージを作成します。
ソースディスクからイメージを作成:
--force
フラグは、実行中のインスタンスからイメージを作成するためのフラグです。このフラグは省略可能です。デフォルトでは、実行中のインスタンスからイメージを作成することはできません。このフラグは、インスタンスの実行中にイメージを作成することを確実に意図している場合にのみ指定してください。
gcloud 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 はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
ソースイメージからイメージを作成する:
gcloud 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 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 compute images describe
コマンドを使用して、イメージのロケーションを表示します。
gcloud compute images describe IMAGE_NAME
IMAGE_NAME
は、確認するイメージの名前に置き換えます。
API
images().insert
メソッドに対して POST
リクエストを実行します。リクエストの本文内の URL で、イメージの作成元となるソース オブジェクトをポイントします。独自のプロジェクト ID とイメージ名を使用して、リソースへの URL を指定します。
永続ディスクからイメージを作成:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceDisk": "/zones/ZONE/disks/SOURCE_DISK", ("storageLocations": "LOCATION",) ("forceCreate": "TRUE") }
次のように置き換えます。
PROJECT_ID
: イメージが属するプロジェクト ID。IMAGE_NAME
: 作成する新しいイメージの名前。ZONE
: ソースディスクが配置されているゾーン。SOURCE_DISK
: イメージ作成元のディスク。LOCATION
: 省略可。イメージの保存場所。たとえば、イメージをus
マルチリージョンに保存するにはus
を指定し、us-central1
リージョンに保存するにはus-central1
を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
オプションの forceCreate
パラメータを使用すると、実行中の VM からイメージを作成できます。実行中の VM からイメージを作成することを確実に意図している場合にのみ、TRUE
を指定します。forceCreate
のデフォルトの設定は FALSE
です。
別のイメージからイメージを作成:
POST https://compute.googleapis.com/compute/v1/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://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceSnapshot": "(/SOURCE_PROJECT_ID)/global/snapshots/SOURCE_SNAPSHOT", ("storageLocations": "LOCATION") }
次のように置き換えます。
PROJECT_ID
: イメージが属するプロジェクト。IMAGE_NAME
: 作成する新しいイメージの名前。SOURCE_PROJECT_ID
: 省略可。スナップショットが配置されているプロジェクト。プロジェクト内のスナップショット リソースにアクセスするための権限が必要です。SOURCE_SNAPSHOT
: イメージ作成元のスナップショット。LOCATION
: 省略可。イメージの保存場所。たとえば、イメージをus
マルチリージョンに保存するにはus
を指定し、us-central1
リージョンに保存するにはus-central1
を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
イメージの追加に関する詳細については、イメージ参照をご覧ください。
イメージの共有
カスタム イメージの作成後、プロジェクト間で共有できます。別のプロジェクトのユーザーにカスタム イメージの使用を許可した場合、ユーザーがリクエストでイメージ プロジェクトを指定してこれらのイメージにアクセスできます。
カスタム イメージ上でゲスト オペレーティング システムの機能を有効にする
ゲスト オペレーティング システム(OS)機能を使用して、カスタム イメージに以下のネットワーキング、セキュリティ、ストレージ、OS オペレーティング システムの各オプションを構成します。これらの構成を持つカスタム イメージは、ブートディスクとして使用されます。
gcloud
既存のカスタム イメージから新しいカスタム イメージを作成するには、--guest-os-features
フラグを付けて gcloud compute images
create
コマンドを使用します。
gcloud compute images create IMAGE_NAME \ --source-image=SOURCE_IMAGE \ [--source-image-project=IMAGE_PROJECT] \ --guest-os-features="FEATURES,..." \ [--storage-location=LOCATION]
次のように置き換えます。
IMAGE_NAME
: 新しいイメージの名前SOURCE_IMAGE
: 新しいイメージの基になるイメージIMAGE_PROJECT
: 省略可。ソースイメージを含むプロジェクトこのパラメータは、別のプロジェクトからイメージをコピーする場合に使用します。
FEATURES
: イメージから作成する VM の機能を有効にするゲスト OS タグ複数の値を追加する場合は、値をカンマで区切ります。次のいずれかの値に設定します。
VIRTIO_SCSI_MULTIQUEUE
。NVMe の代わりにローカル SSD デバイス上で使用します。SCSI をサポートするイメージの詳細については、インターフェースの選択をご覧ください。Linux イメージの場合は、カーネル バージョン 3.17 以降のイメージでローカル SSD デバイスのマルチキュー SCSI を有効にできます。Windows イメージの場合は、Compute Engine Windows ドライバ バージョン 1.2 を使用するイメージ上のローカル SSD デバイスでマルチキュー SCSI を有効にできます。
WINDOWS
。Windows Server カスタム ブート イメージに Windows イメージのタグを付けます。MULTI_IP_SUBNET
。/32
以外のネットマスクのインターフェースを構成します。複数のネットワーク インターフェースとその仕組みの詳細については、複数のネットワーク インターフェースの概要と例をご覧ください。UEFI_COMPATIBLE
。UEFI ファームウェアと以下の Shielded VM 機能を使用して起動します。- セキュアブート: デフォルトでは無効
- Virtual Trusted Platform Module(vTPM): デフォルトでは有効
- 整合性モニタリング: デフォルトでは有効
GVNIC
。50 Gbps~100 Gbps の速度のネットワーク帯域幅をサポートします。詳細については、Google Virtual NIC の使用をご覧ください。SEV_CAPABLE
。AMD Secure Encrypted Virtualization(SEV)CPU プラットフォーム上で Confidential VMs を作成する場合に使用します。詳細については、新しい Confidential VMs インスタンスを作成するをご覧ください。SUSPEND_RESUME_COMPATIBLE
。VM での一時停止と再開をサポートします。詳細については、OS の互換性をご覧ください。
LOCATION
: 省略可。イメージを保存するリージョンまたはマルチリージョン。たとえば、イメージを
us
マルチリージョンに保存するにはus
を指定し、us-central1
リージョンに保存するにはus-central1
を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
API
既存のカスタム イメージから新しいカスタム イメージを作成するには、guestOsFeatures
フラグを付けて images().insert
メソッドを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceImage": "(projects/IMAGE_PROJECT)/global/images/SOURCE_IMAGE", ("storageLocations": "LOCATION",) "guestOsFeatures": [ { "type": "FEATURES" } ] }
次のように置き換えます。
PROJECT_ID
: 新しいイメージを作成するプロジェクトの IDIMAGE_NAME
: 新しいイメージの名前IMAGE_PROJECT
: 省略可。ソースイメージを含むプロジェクトこのパラメータは、別のプロジェクトからイメージをコピーする場合に使用します。
SOURCE_IMAGE
: 新しいイメージの基になるイメージLOCATION
: 省略可。イメージを保存するリージョンまたはマルチリージョンたとえば、イメージを
us
マルチリージョンに保存するにはus
を指定し、us-central1
リージョンに保存するにはus-central1
を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。FEATURES
: イメージから作成する VM の機能を有効にするゲスト OS タグ複数の値を追加する場合は、値をカンマで区切ります。次のいずれかの値に設定します。
VIRTIO_SCSI_MULTIQUEUE
。NVMe の代わりにローカル SSD デバイス上で使用します。SCSI をサポートするイメージの詳細については、インターフェースの選択をご覧ください。Linux イメージの場合は、カーネル バージョン 3.17 以降のイメージでローカル SSD デバイスのマルチキュー SCSI を有効にできます。Windows イメージの場合は、Compute Engine Windows ドライバ バージョン 1.2 を使用するイメージ上のローカル SSD デバイスでマルチキュー SCSI を有効にできます。
WINDOWS
。Windows Server カスタム ブート イメージに Windows イメージのタグを付けます。MULTI_IP_SUBNET
。/32
以外のネットマスクのインターフェースを構成します。複数のネットワーク インターフェースとその仕組みの詳細については、複数のネットワーク インターフェースの概要と例をご覧ください。UEFI_COMPATIBLE
。UEFI ファームウェアと以下の Shielded VM 機能を使用して起動します。- セキュアブート: デフォルトでは無効
- Virtual Trusted Platform Module(vTPM): デフォルトでは有効
- 整合性モニタリング: デフォルトでは有効
GVNIC
。50 Gbps~100 Gbps の速度のネットワーク帯域幅をサポートします。詳細については、Google Virtual NIC の使用をご覧ください。SEV_CAPABLE
。AMD Secure Encrypted Virtualization(SEV)CPU プラットフォーム上で Confidential VMs を作成する場合に使用します。詳細については、新しい Confidential VMs インスタンスを作成するをご覧ください。SUSPEND_RESUME_COMPATIBLE
。VM での一時停止と再開をサポートします。詳細については、OS の互換性をご覧ください。
Arm イメージに関する考慮事項
Google は、Ampere Altra CPU プラットフォーム上で動作する Tau T2A マシンシリーズを提供しています。T2A マシンシリーズで VM を起動し、そのソース VM を使用して Arm イメージを作成できます。カスタム Arm イメージの作成プロセスは、x86 イメージの作成と同じです。
Arm イメージと x86 イメージを区別できるように、Arm イメージでは architecture
フィールドを ARM64
に設定します。このフィールドに指定できる値は次のとおりです。
ARCHITECTURE_UNSPECIFIED
X86_64
ARM64
イメージのユーザーは、このフィールドでフィルタして、x86 イメージまたは Arm ベースのイメージを確認できます。
次のステップ
- 他のプロジェクトと非公開イメージを共有する。
- ディスク、イメージ、VM インスタンスをインポートする方法を学習する。
- Cloud Storage にイメージをエクスポートする方法を学習する。
- カスタム イメージから VM を起動する方法を学習する。
- Jenkins と Packer を使用してカスタムベース イメージを作成する方法を学習する。
- イメージ ファミリー内のイメージのバージョンを設定する方法を学習する。
- カスタム イメージのサポートを終了する方法を学習する。
- カスタム イメージを削除する方法を学習する。