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