カスタム イメージを作成する


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

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

始める前に

カスタム イメージの作成

このセクションでは、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 を停止できない場合は、ディスクへの書き込み量を最小限に抑え、ファイル システムを同期してください。永続ディスクへの書き込みを最小限に抑えるには、次の手順を行います。

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

ディスクの自動削除オプションを無効にする

デフォルトでは、ブートディスクでは自動削除オプションが有効になっています。ディスクからイメージを作成する前に、自動削除を無効にして、VM の削除時にディスクが自動削除されないようにします。

Google Cloud コンソール、Google Cloud CLI、または Compute Engine API を使用して、ディスクの自動削除を無効にできます。

Console

  1. Google Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. イメージ作成のソースとして使用している VM をクリックします。[VM インスタンスの詳細] ページが表示されます。

  3. [編集] をクリックします。

  4. [削除ルール] の [ブートディスク] セクションで、[ディスクを維持] オプションが選択されていることを確認します。

  5. [保存] をクリックします。

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

  1. Google Cloud Console で、[イメージの作成] ページに移動します。

    [イメージの作成] に移動

  2. イメージの [名前] を指定します。

  3. イメージ作成元の [ソース] を指定します。永続ディスク、スナップショット、別のイメージまたは Cloud Storage 内の disk.raw ファイルが指定できます

  4. 実行中の VM にアタッチされたディスクからイメージを作成する場合、[インスタンスを実行し続ける] をオンにして、VM の実行中にイメージを作成することを確認します。イメージを作成する前に VM を準備できます。

  5. [ソースディスクのロケーションに基づく(デフォルト)] プルダウン リストで、イメージを保存するロケーションを指定します。たとえば、イメージを us マルチリージョンに保存するには us を指定し、us-central1 リージョンに保存するには us-central1 を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。

  6. 省略可: イメージのプロパティを指定します。

    • ファミリー: この新しいイメージが属するイメージ ファミリー
    • 説明: カスタム イメージの説明。
    • ラベル: リソースをグループ化するラベル
  7. 暗号鍵を指定します。Google が管理する鍵、Cloud Key Management Service(Cloud KMS)鍵、顧客指定の暗号鍵(CSEK)のいずれかを選択できます。暗号鍵が指定されていない場合、イメージは Google が管理する鍵を使用して暗号化されます。

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

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 タグ

    複数の値を追加する場合は、値をカンマで区切ります。次のいずれかの値に設定します。

  • 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: イメージから作成する 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 ベースのイメージを確認できます。

次のステップ