カスタム イメージの作成、削除、利用非推奨


ソースディスク、イメージ、スナップショット、Cloud Storage に保存されているイメージからカスタム イメージを作成できます。これらのイメージを使用して、新しい仮想マシン(VM)インスタンスを作成できます。これは、永続ブートディスクまたは特定のイメージを作成して特定の状態に変更し、その状態を保存してインスタンスを作成する場合に理想的です。

あるいは、仮想ディスク インポート ツールを使用して、既存のシステムから Compute Engine にブートディスク イメージをインポートし、それらのイメージをカスタム イメージリストに追加することもできます。

始める前に

カスタム イメージの作成

ここでは、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

⋮
storageLocations:
- us-central1

この機能のリリース前の既存のイメージはすべて、元のロケーションに残ります。唯一の変更点は、すべてのイメージについてイメージのロケーションを表示できることです。移動する既存のイメージがある場合、目的のロケーションに再作成する必要があります。

イメージに対するインスタンスの準備

実行中の VM インスタンスに接続されている状態のディスクからでもイメージを作成できます。ただし、イメージをキャプチャしやすい状態にインスタンスを調整することで、イメージの信頼性が向上します。次のいずれかの手順でブートディスクをイメージ用に準備します。

  • インスタンスを停止してシャットダウンできるようにし、永続ディスクへのデータの書き込みを停止します。

  • イメージを作成する前にインスタンスを停止できない場合は、ディスクへの書き込み量を最小限に抑え、ファイル システムを同期してください。

    1. 永続ディスクにデータを書き込むアプリやオペレーティング システムのプロセスを一時停止します。
    2. 必要に応じて、アプリでディスクへのフラッシュを実行します。たとえば、MySQL では FLUSH ステートメントを使用します。他のアプリにも同様のプロセスがある場合があります。
    3. アプリの永続ディスクへの書き込みを停止します。
    4. sudo sync を実行します。

インスタンスの準備が完了したら、イメージを作成します

イメージを作成する

次のソースからディスク イメージを作成できます。

  • 永続ディスク。ディスクがインスタンスに接続されていても構いません
  • 永続ディスクのスナップショット
  • プロジェクトの別のイメージ
  • 別のプロジェクトで共有されているイメージ
  • Cloud Storage 内の圧縮された RAW イメージ

ディスク イメージは 10 分ごとに作成できます。ディスク イメージを作成するためのリクエストを大量に発行する場合、60 分で最大 6 件のリクエストを発行できます。詳細については、スナップショットの頻度の制限をご覧ください。

Console

  1. Google Cloud Console で、[イメージの作成] ページに移動します。
    [イメージの作成] ページに移動
  2. イメージの [名前] を指定します。
  3. イメージ作成元の [ソース] を指定します。永続ディスク、スナップショット、別のイメージまたは Cloud Storage 内の disk.raw ファイルが指定できます
  4. イメージを保存するロケーションを指定します。[ソースディスクのロケーションに基づく(デフォルト)] プルダウン リストからイメージの保存ロケーションを選択します。たとえば、イメージを us マルチリージョンに保存するには us を指定し、us-central1 リージョンに保存するには us-central1 を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
  5. イメージのプロパティを指定します。たとえば、イメージのイメージ ファミリー名を指定して、このイメージをイメージ ファミリーの一部として管理できます。
  6. [作成] をクリックして、イメージを作成します。

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 コマンドを使用して、イメージのロケーションを表示します。image-name を確認するイメージの名前に置き換えます。

gcloud compute images describe 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 はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
  • [FORCE_CREATE]: 実行中のインスタンスからイメージを作成するためのオプションのパラメータ。実行中のインスタンスからイメージを作成することを確実に意図している場合にのみ、TRUE を指定します。このパラメータを指定しない場合、デフォルト値は 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-snapshot: イメージ作成元のスナップショット。
  • source-project-id: スナップショットが配置されているプロジェクトを指定するオプションの変数。そのプロジェクト内のスナップショット リソースにアクセスするには権限が必要です。
  • location: イメージのマルチリージョンかリージョンの保存場所を選択できる、オプションのパラメータ。たとえば、イメージを us マルチリージョンに保存するには us を指定し、us-central1 リージョンに保存するには us-central1 を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。

イメージの追加に関する詳細については、イメージ参照をご覧ください。

イメージの使用を中止する

Compute Engine では、イメージに使用中止ステータスを設定することで、所有するカスタム イメージの使用を中止できます。使用中止ステータスごとに異なるレスポンスがサーバーから生成され、移行ユーザーがサポートされないイメージの使用を管理可能な方法で中止するのに役立ちます。コンソール、gcloud コマンド、Compute Engine API メソッドのいずれかを使用して、イメージの使用を中止します。

非推奨の状態

次の非推奨の状態がサポートされています。

  • ACTIVE: イメージがアクティブで、通常のイメージとして使用できます。イメージ ファミリーは、任意のファミリー内の最新のアクティブ イメージを指します。
  • DEPRECATED: イメージは非推奨に指定されていますが、引き続き使用できます。非推奨のイメージを使用すると、リクエストは成功しますが、警告が表示されます。このイメージへの新しいリンクが許可されます。イメージ ファミリーは、このイメージがファミリー内で最新のイメージであっても、このイメージをポイントしなくなります。
  • OBSOLETE: イメージは廃止イメージに指定され、今後使用できません。リクエストでこのイメージを使用しようとすると、エラー メッセージが返されます。このイメージへの既存のリンクは依然として許可されます。
  • DELETED: この画像は削除されています。削除されたイメージを使用しようとすると、エラー メッセージが返されます。

非推奨状態を ACTIVE に変更すると、非推奨状態を元に戻す(イメージを再びアクティブにする)ことができます。

Console

  1. Google Cloud Console で、[イメージ] ページに移動します。
    [イメージ] ページに移動
  2. 使用を中止するイメージの左側にあるチェックボックスをオンにします。
  3. ページ上部の [廃止] をクリックします。イメージの使用は中止されます。

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: 非推奨にするイメージを置き換えるイメージ。

イメージを削除する

削除できるカスタム イメージは、プロジェクトへのアクセス権を持つ他のユーザーまたは自分が追加したカスタム イメージのみです。コンソール、gcloud コマンド、Compute Engine API メソッドのいずれかを使用して、イメージを削除します。

Console

  1. Google Cloud Console で、[イメージ] ページに移動します。
    [イメージ] ページに移動
  2. 削除するイメージの左側にあるチェックボックスをオンにします。
  3. ページの上部にある [削除] をクリックします。イメージは削除されます。

gcloud

gcloud compute images delete コマンドを使用して、イメージを削除します。image-name を削除するイメージの名前に置き換えます。

gcloud compute images delete image-name

API

images().delete メソッドに POST リクエストを送信します。削除するイメージの名前を指定します。

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/resource-id

以下を置き換えます。

  • project-id: イメージが属するプロジェクト。
  • resource-id: 削除するイメージの名前。

イメージ ファミリー内のイメージのバージョンを設定する

イメージ ファミリーを使用して、イメージのバージョン管理を簡略化します。イメージをイメージ ファミリーに追加し、最新のイメージ バージョンとして設定します。イメージ ファミリーを以前のイメージ バージョンにロールバックする必要があると判断した場合は、ファミリー内の最新のイメージの使用を中止します。

イメージ ファミリーを操作する際のベスト プラクティスについては、イメージ ファミリーのベスト プラクティスをご覧ください。

コンソール、gcloud compute images create コマンドと --storageLocation フラグ、または images().insert API メソッドを使用して、イメージの保存ロケーションを指定することもできます。

たとえば、イメージ ファミリーの一部として image-v1 という名前のイメージを作成します。

Console

  1. Google Cloud Console で、[イメージの作成] ページに移動します。
    [イメージの作成] ページに移動
  2. イメージの [名前] を指定します。
  3. イメージ作成元の [ソース] を指定します。永続ディスク、スナップショット、別のイメージまたは Google Cloud Storage 内の disk.raw ファイルが指定できます
  4. イメージを保存する [ロケーション] を指定します。[ソースディスクのロケーションに基づく(デフォルト)] プルダウン メニューからイメージの保存ロケーションを選択します。たとえば、イメージを us マルチリージョンに保存するには us を指定し、us-central1 リージョンに保存するには us-central1 を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。

  5. イメージのプロパティを指定します。たとえば、イメージのイメージ ファミリー名 my-image-family を指定して、このイメージをイメージ ファミリーの一部として管理できます。

  6. 実行中のイメージに接続されたディスクからイメージを作成する場合、[Force creation from running instance] をオンにして、インスタンスの実行中にイメージを作成することを確認します。

  7. [作成] をクリックして、イメージを作成します。

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_SUBNETUEFI_COMPATIBLEVIRTIO_SCSI_MULTIQUEUEWINDOWS のうち 1 つ以上に設定します。
  • 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: 新しいイメージの名前。
  • SOURCE_IMAGE: 新しいイメージの基になるイメージ。
  • IMAGE_PROJECT: (省略可)ソースイメージを含むプロジェクト。別のプロジェクトからイメージをコピーする場合は、このパラメータを使用します。
  • LOCATION: (省略可)イメージを保存するリージョンまたはマルチリージョン。たとえば、イメージを us マルチリージョンに保存するには us を指定し、us-central1 リージョンに保存するには us-central1 を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
  • FEATURES: イメージに対して有効にするゲスト OS 機能の ID(カンマ区切り)。MULTI_IP_SUBNETUEFI_COMPATIBLEVIRTIO_SCSI_MULTIQUEUEWINDOWS のうち 1 つ以上に設定します。

次のステップ