仮想ディスクのインポート


必要なソフトウェアと構成を備えた仮想ディスク(ゴールデン ディスクまたはゴールデン イメージと呼ばれることもあります)がオンプレミス環境にある場合、その仮想ディスクを Compute Engine にインポートし、そのイメージを使用して仮想マシンを作成することによって、時間を節約できます。インポート ツールは、VMDK や VHD などのほとんどの仮想ディスク ファイル形式をサポートしています。

Compute Engine からディスクをエクスポートした場合、ディスクからイメージを作成できます。

複数の仮想マシン(VM)を移行するための自動システムを作成する方法については、Compute Engine への VM の移行をご覧ください。

始める前に

サポートされているオペレーティング システム

起動可能なディスクと起動できないディスクの両方がインポートできます。 仮想ディスクを Compute Engine で起動できるようにするには、サポートされているオペレーティング システムのいずれかを実行している必要があります。

BYOL と BYOS のサポート

所有しているソフトウェア ライセンスまたはサブスクリプションを使用する場合は、それらのライセンスで仮想ディスクをインポートできます。BYOL または BYOS をサポートするオペレーティング システムについては、オペレーティング システムの詳細をご覧ください。

既存のライセンスを含むイメージをインポートするには、--byol フラグを指定して gcloud compute instances import コマンドを実行します。

制限事項

この機能の一般的な制限事項は次のとおりです。

この機能には、Linux に対する次の制限があります。

  • Linux の仮想ディスクは、ブートローダーとして grub を使用する必要があります。

  • Linux 仮想ディスクは、カスタム イメージと同じ要件を満たしている必要があります。これには、Virtio-SCSI ストレージ コントローラ デバイスのサポートも含まれます。

この機能には、Windows に対する次の制限があります。

  • Windows の仮想ディスクにインストールする場合は、Carbon Black の Cb Protection などのアプリケーション許可リスト ソフトウェアによってインポート プロセスが失敗する可能性があります。インポートする前に、このようなソフトウェアをアンインストールすることが必要になる場合があります。

  • Windows ベースの VM では、Microsoft KM-TEST Loopback Adapter がメタデータ サーバーへのネットワーク アクセスを阻止します。インポートする前にこれを無効にするか削除する必要があります。

権限

イメージをシームレスにインポートするには、必要な IAM ロールをアカウント、Cloud Build サービス アカウント、Compute Engine サービス アカウントに付与する必要があります。詳細については、必要な IAM ロールを付与するをご覧ください。

互換性の確認

VM のディスクをインポートする前に、VM 内に事前チェックツールをダウンロードして実行します。事前チェックツールは、インポート プロセスが失敗するか、Compute Engine でディスクが正常に動作しなくなる原因となる可能性がある互換性に関する問題を検出します。

仮想ディスクのインポート

仮想ディスクは、Google Cloud コンソールGoogle Cloud CLICloud Build API のいずれかを使用してインポートできます。

起動可能な仮想ディスクをインポートする

起動可能なディスクの場合、インポート ツールがオペレーティング システムを自動的に検出し、必要なドライバとパッケージを特定するため、オペレーティング システムを指定する必要はありません。ただし、検出されたオペレーティング システムをオーバーライドする必要がある場合は、--os フラグまたは -os パラメータを指定します。サポートされている値の一覧については、--os フラグをご覧ください。

コンソール

  1. Google Cloud コンソールで、仮想ディスク ファイルを Cloud Storage にアップロードします。
  2. [イメージの作成] ページに移動します。

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

  3. イメージの名前を指定します。

  4. [ソース] で、[仮想ディスク(VMDK、VHD)] を選択します。

  5. Cloud Storage ファイルのストレージの場所を参照するか、手動で入力します。

  6. インポートされたディスクで使用できるオペレーティング システムを選択します。次のように変更することもできます。

    • ゲスト パッケージをインストールすることを選択できます。ゲスト環境をインストールすることをおすすめします。ゲスト環境について詳しくは、ゲスト環境をご覧ください。

    • Windows または Red Hat Enterprise Linux(RHEL)オペレーティング システムの場合、ライセンス オプションも選択できます。Compute Engine にライセンスの提供を許可することも、BYOL も可能です。Windows での BYOL について詳しくは、お客様所有ライセンスをご覧ください。

  7. (オプション)イメージの追加プロパティを指定します。たとえば、このイメージをイメージ ファミリーの一部として管理できます。

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

gcloud

gcloud compute images import コマンドを使用して、起動可能な Compute Engine イメージを作成します。Compute Engine ではほとんどのブートディスク イメージを起動できますが、import コマンドを使用すると、必要なドライバと最新のゲスト環境パッケージが必ずディスクに収められます。これらは、インスタンスを起動して SSH や RDP で接続する際に必要になります。

仮想ディスク ファイルは、Cloud Storage バケットまたはローカル ワークステーションからインポートできます。

ワークステーションから仮想ディスク ファイルをインポートする場合、インポート ツールによってファイルが Cloud Storage バケットに自動的にアップロードされます。

インポート プロセスを開始する前に、仮想ディスク ファイルを手動で Cloud Storage にアップロードすることもできますが、インポート プロセスで使用されるのと同じプロジェクト内の Cloud Storage バケットにファイルをアップロードする必要があります。

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE

次のように置き換えます。

  • IMAGE_NAME: 対象イメージの名前。
  • SOURCE_FILE: 仮想ディスク ファイル。このファイルは、ローカル ファイルまたは Cloud Storage に保存されているファイルでもかまいません。仮想ディスクがローカル ファイルの場合は、絶対パスまたは相対パスを使用できます。仮想ディスク ファイルがすでに Cloud Storage に保存されている場合は、インポート プロセスに使用されるプロジェクトの Cloud Storage バケットにそのファイルが存在する必要があります。また、gs://BUCKET_NAME/OBJECT_NAME の形式でファイルのフルパスを指定する必要があります。

既存のライセンスを使用してイメージをインポートする場合は、--byol フラグを指定します。

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE --byol

既存のライセンスを含むイメージを Google Cloud にインポートする方法については、お客様所有ライセンスの使用をご覧ください。

ローカル ファイルを指定すると、仮想ディスクのサイズやネットワーク接続の速度によって、アップロード オペレーションに長時間かかることがあります。インポート オペレーションは、ディスクのサイズによって数十分かかることがあります。

次の例では、gs://your_gcs_bucket に保存されている my_server.vmdk という名前の仮想ディスクをインポートします。

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_server.vmdk

オプション パラメータ

デフォルトでは、インポートされたすべてのブートディスク イメージにゲスト環境パッケージが追加されます。これらのパッケージが不要な場合は、インポート コマンドに --no-guest-environment フラグを追加してください。

API

  1. 仮想ディスクを Cloud Storage に追加します。

  2. API で、Cloud Build API に対する POST リクエストを作成します。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    次のように置き換えます。

    • PROJECT_ID: イメージのインポート先のプロジェクトのプロジェクト ID。
    • IMAGE_NAME: インポートするイメージの名前。
    • SOURCE_FILE: Cloud Storage 内のイメージの URI(たとえば、gs://my-bucket/my-image.vmdk)。

    提供できる追加の args 値については、VM イメージのインポートに関する GitHub ページのオプションのフラグに関するセクションをご覧ください。

    レスポンスの例

    次のレスポンスのサンプルは、返される出力に似ています。

    {
     "name": "operations/build/myproject-12345/operation-1578608233418",
     "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
       "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
       "status": "QUEUED",
       "createTime": "2019-09-20T15:55:29.353258929Z",
       "steps": [
        {
         "name": "gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env": [
          "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
         ],
         "args": [
          "-timeout=7000s",
          "-image_name=my-image",
          "-client_id=api",
          "-data-disk",
          "-source_file=gs://my-bucket/my-image.vmdk"
         ]
        }
       ],
       "timeout": "7200s",
       "projectId": "myproject-12345",
       "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com",
       "options": {
        "logging": "LEGACY"
       },
       "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456"
      }
    }
    

    ビルドをモニタリングする方法はいくつかあります。

    • 返される build-id を使用して、projects.builds.get リクエストを実行します。
    • 指定された logUrl でホストされているログを確認します。

ライセンスをインポートして仮想ディスクに追加する

イメージのインポート時にライセンスを追加するには、次の gcloud compute images import コマンドを使用します。

gcloud compute images import IMAGE_NAME \
  --source-file=SOURCE_FILE
  --os=OS

次のように置き換えます。

  • IMAGE_NAME: 作成するイメージの名前。
  • SOURCE_FILE: インポートする仮想ディスクのローカル ファイルまたは Cloud Storage URI。
  • OS: インポートするディスク イメージの OS。OS のライセンスは、このフラグの値から推定されます。インポート時にライセンス情報を提供するための明示的なフラグはありません。サポートされている値の一覧については、--os フラグをご覧ください。

ライセンスの表示と追加の詳細については、ライセンスを表示、追加するをご覧ください。

起動できない仮想ディスクをインポートする

コンソール

  1. Google Cloud コンソールで、仮想ディスク ファイルを Cloud Storage にアップロードします。
  2. [イメージの作成] ページに移動します。

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

  3. イメージの名前を指定します。

  4. [ソース] で、[仮想ディスク(VMDK、VHD)] を選択します。

  5. Cloud Storage ファイルのストレージの場所を参照するか、手動で入力します。

  6. オペレーティング システムについて、[オペレーティング システムなし。データのみ。] を選択します。

  7. (オプション)イメージの追加プロパティを指定します。たとえば、このイメージをイメージ ファミリーの一部として管理できます。

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

gcloud

gcloud compute images import コマンドを使用して、非起動の Compute Engine イメージを作成できます。仮想ディスクに起動可能なオペレーティング システムがインストールされていない場合は、--data-disk フラグを指定します。これにより、Compute Engine でイメージを起動するためにドライバとゲスト環境パッケージをインストールする手順がスキップされます。

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE \
    --data-disk

次のように置き換えます。

  • IMAGE_NAME: 対象イメージの名前。
  • SOURCE_FILE: 仮想ディスク ファイル。このファイルは、ローカル ファイルまたは Cloud Storage に保存されているファイルでもかまいません。仮想ディスクがローカル ファイルの場合は、絶対パスまたは相対パスを使用できます。仮想ディスク ファイルがすでに Cloud Storage に保存されている場合は、インポート プロセスに使用されるプロジェクトの Cloud Storage バケットにそのファイルが存在する必要があります。また、gs://BUCKET_NAME/OBJECT_NAME の形式でファイルの完全なパスを指定する必要があります。

例 1: 起動不可能な仮想ディスクを Cloud Storage からインポートする

次の例では、gs://your_gcs_bucket に保存されている my_disk.vmdk という名前の仮想ディスクをインポートします。

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_disk.vmdk
    --data-disk

例 2: タイムアウト値を指定してサイズの大きい VMDK ファイルをインポートする

インポート プロセスのデフォルトのタイムアウト値は 2 時間です。サイズの大きい VMDK ファイルのインポートには、最大で 24 時間かかることがあります。このようなサイズの大きいファイルをインポートするときに --timeout フラグを指定しないと、プロセスは 2 時間後に失敗します。

次の例では、gs://your_gcs_bucket に保存されている my_disk.vmdk という名前の仮想ディスクをインポートします。このインポートのタイムアウト値は 24 時間です。

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_disk.vmdk
    --data-disk --timeout=24h

API

  1. 仮想ディスクを Cloud Storage に追加します。

  2. API で、Cloud Build API に対する POST リクエストを作成します。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "steps":[
        {
          "args":[
            "-image_name=IMAGE_NAME",
            "-source_file=SOURCE_FILE",
            "-timeout=7000s",
            "-client_id=api",
            "-data_disk"
          ],
          "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "timeout":"7200s",
      "tags":[
        "gce-daisy",
        "gce-daisy-image-import"
      ]
    }
    

    次の args 値を置き換えます。

    • PROJECT_ID: イメージのインポート先のプロジェクトのプロジェクト ID。
    • IMAGE_NAME: インポートするイメージの名前。
    • SOURCE_FILE: Cloud Storage 内のイメージの URI(たとえば、gs://my-bucket/my-image.vmdk)。

外部 IP アドレスを許可しないネットワークを使用したディスクのインポート

外部 IP を許可しないネットワークを使用して仮想ディスクをインポートするには、次の手順で操作します。

  1. 仮想ディスクを Cloud Storage に追加します。

  2. イメージのインポート プロセスでは、仮想ディスクのオペレーティング システムにパッケージ マネージャーをインストールする必要があります。これらのパッケージ マネージャーでは、Google Cloud の外部にあるパッケージ リポジトリにリクエストを送信する必要がある場合があります。これらの更新へのアクセスを許可するには、Cloud NAT を構成する必要があります。詳細については、Cloud Router を使用した NAT 構成の作成をご覧ください。

  3. 限定公開の Google アクセスを構成します。詳細については、限定公開の Google アクセスの構成をご覧ください。

  4. Google Cloud CLI か Cloud Build API のいずれかを使用して仮想ディスクをインポートします。

    仮想ディスクをインポートすると、プロジェクトに一時的な VM が作成されます。これらの一時的な VM に外部 IP アドレスが割り当てられないようにするには、追加のフラグまたは引数を指定する必要があります。

    詳細については、次のタブをクリックしてください。

gcloud

仮想ディスクをインポートするには、--no-address フラグを指定して gcloud compute images import コマンドを使用します。

gcloud compute images import IMAGE_NAME \
    --source-file=SOURCE_FILE \
    --zone=ZONE \
    --no-address

次のように置き換えます。

  • IMAGE_NAME: 作成するディスク イメージの名前。
  • SOURCE_FILE: 仮想ディスク ファイル。ローカル ファイルまたは Cloud Storage に保存されているファイルでもかまいません。仮想ディスクがローカル ファイルの場合は、絶対パスまたは相対パスを使用できます。仮想ディスク ファイルがすでに Cloud Storage に保存されている場合は、インポート プロセスに使用されるプロジェクトの Cloud Storage バケットにそのファイルが存在する必要があります。また、gs://BUCKET_NAME/OBJECT_NAME の形式でファイルのフルパスを指定する必要があります。
  • ZONE: イメージを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

API

API で、Cloud Build API に対する POST リクエストを作成し、-no-external-ip 引数を指定します。

 POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
 {
   "steps":[
     {
       "args":[
         "-image_name=IMAGE_NAME",
         "-source_file=SOURCE_FILE",
         "-zone=ZONE",
         "-no_external_ip",
         "-timeout=7000s",
         "-client_id=api"
       ],
       "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
       "env":[
         "BUILD_ID=$BUILD_ID"
       ]
     }
   ],
   "timeout":"7200s",
   "tags":[
     "gce-daisy",
     "gce-daisy-image-import"
   ]
 }
 

次のように置き換えます。

  • PROJECT_ID: イメージのインポート先のプロジェクトのプロジェクト ID。
  • IMAGE_NAME: インポートするイメージの名前。
  • SOURCE_FILE: Cloud Storage 内のイメージの URI。例: gs://my-bucket/my-image.vmdkgcloud compute images import コマンド)
  • ZONE: イメージを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

UEFI ブートローダーによる仮想ディスクのインポート

ほとんどの仮想ディスクでは、追加のフラグを使用しなくても、Compute Engine は UEFI ブートローダーでディスクを検出して正常にインポートできます。

ただし、次のような場合は、インポート中に UEFI ブートを強制的に実行する必要があります。

  • イメージのインポート プロセス中に、インポート中の UEFI ブートローダーを検出できない場合。
  • ディスクがデュアルブート可能で、Hybrid-mbr + UEFI または protection-mbr + UEFI が混在している場合。デュアルブート可能なディスクの場合、インポートはデフォルトで非 UEFI ブートになっている可能性があります。

gcloud

インポートで UEFI ブートを強制的に使用するには、gcloud compute images import コマンドを使います。

gcloud compute images import IMAGE_NAME \
    --source-file=SOURCE_FILE \
    --guest-os-features=UEFI_COMPATIBLE

次のように置き換えます。

  • IMAGE_NAME: インポートするイメージの名前。
  • SOURCE_FILE: Cloud Storage 内のイメージの URI(たとえば、gs://my-bucket/my-image.vmdk)。

次の例では、gs://my-gcs-bucket/ に保存されている my-disk.vmdk という名前の仮想ディスクをインポートし、UEFI ブートの使用を強制します。

gcloud compute images import my-imported-image \
    --source-file gs://my-gcs-bucket/my-disk.vmdk \
    --guest-os-features=UEFI_COMPATIBLE

API

インポートでの UEFI ブートの使用を強制するには、Cloud Build API を使用して -uefi_compatible 引数を指定します。その方法は次のとおりです。

  1. 仮想ディスクを Cloud Storage に追加します。

  2. API で、Cloud Build API に対する POST リクエストを作成します。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-uefi_compatible",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    次のように置き換えます。

    • PROJECT_ID: イメージのインポート先のプロジェクトのプロジェクト ID。
    • IMAGE_NAME: インポートするイメージの名前。
    • SOURCE_FILE: Cloud Storage 内のイメージの URI(たとえば、gs://my-bucket/my-image.vmdk)。

共有 VPC を使用した仮想ディスクのインポート

共有 VPC を使用する仮想ディスクをインポートする前に、Cloud Build サービス アカウントに compute.networkUser ロールを追加する必要があります。詳細については、Cloud Build サービス アカウントに必要なロールを付与するをご覧ください。

gcloud

仮想ディスクをインポートするには、gcloud compute images import コマンドを使用します。

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE \
    --project SERVICE_PROJECT_ID \
    --zone ZONE \
    --network NETWORK \
    --subnet SUBNET

次のように置き換えます。

  • IMAGE_NAME: インポートするイメージの名前。
  • SOURCE_FILE: 仮想ディスク ファイル。ローカル ファイルまたは Cloud Storage に保存されているファイルでもかまいません。仮想ディスクがローカル ファイルの場合は、絶対パスまたは相対パスを使用できます。仮想ディスク ファイルがすでに Cloud Storage に保存されている場合は、インポート プロセスに使用されるプロジェクトの Cloud Storage バケットにそのファイルが存在する必要があります。また、gs://BUCKET_NAME/OBJECT_NAME の形式でファイルのフルパスを指定する必要があります。
  • SERVICE_PROJECT_ID: イメージをインポートするプロジェクトの ID。
  • ZONE: イメージをインポートするゾーン。このゾーンはサブネットのリージョンと一致する必要があります。たとえば、SUBNETus-west1 の場合、インポート ゾーンは、us-west1-aus-west1-bus-west1-c のいずれかにする必要があります。
  • NETWORK: 共有 VPC ネットワークへのフルパス。例: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
  • SUBNET: 共有 VPC サブネットワークへのフルパス。例: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

    サンプル コマンド

    gcloud compute images import example-image \
     --source-file gs://source-bucket/source-file.vmdk \
     --project my-image-project \
     --zone us-west1-c \
     --network projects/my-vpc-project/global/networks/my-shared-vpc \
     --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-shared-subnet
    

API

  1. 仮想ディスクを Cloud Storage に追加します。

  2. API で、Cloud Build API に対する POST リクエストを作成します。

    POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-zone=ZONE",
           "-network=NETWORK",
           "-subnet=SUBNET",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    次の args 値を置き換えます。

    • SERVICE_PROJECT_ID: イメージをインポートするプロジェクトの ID。
    • IMAGE_NAME: インポートするイメージの名前。
    • SOURCE_FILE: Cloud Storage 内のイメージの URI(たとえば、gs://my-bucket/my-image.vmdk)。
    • ZONE: イメージをインポートするゾーン。このゾーンはサブネットのリージョンと一致する必要があります。たとえば、SUBNETus-west1 の場合、インポート ゾーンは、us-west1-aus-west1-bus-west1-c のいずれかにする必要があります。
    • NETWORK: 共有 VPC ネットワークへのフルパス。例: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
    • SUBNET: 共有 VPC サブネットワークへのフルパス。例: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

カスタム Compute Engine サービス アカウントを使用した仮想ディスクのインポート

イメージのインポート中に、プロジェクトに一時的な仮想マシン(VM)インスタンスが作成されます。これらの一時的な VM 上のイメージ インポート ツールには認証が必要です。

サービス アカウントは VM に接続されている ID です。サービス アカウントのアクセス トークンは、インスタンス メタデータ サーバーからアクセスでき、VM 上のイメージ インポート ツールの認証に使用できます。

デフォルトでは、インポート プロセスには、プロジェクトのデフォルトの Compute Engine サービス エージェントが使用されます。ただし、プロジェクトでデフォルトの Compute Engine サービス アカウントが無効になっている場合や、カスタム Compute Engine サービス アカウントを使用する場合は、サービス アカウントを作成してインポート プロセスで指定する必要があります。

gcloud

  1. 仮想ディスクを Cloud Storage に追加します。

  2. サービス アカウントを作成して最小限のロールを割り当てます。サービス アカウントの作成に関する詳細については、サービス アカウントの作成と管理をご覧ください。

    少なくとも、指定した Compute Engine サービス アカウントには次のロールが割り当てられている必要があります。

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    詳細については、Compute Engine サービス アカウントに必要なロールを付与するをご覧ください。

  3. gcloud compute images import を使用してイメージをインポートします。

    gcloud compute images import IMAGE_NAME \
      --source-file SOURCE_FILE \
      --compute-service-account SERVICE_ACCOUNT_EMAIL
    

    次のように置き換えます。

    • IMAGE_NAME: 対象イメージの名前。
    • SOURCE_FILE: 仮想ディスク ファイル。このファイルは、ローカル ファイルまたは Cloud Storage に保存されているファイルでもかまいません。仮想ディスクがローカル ファイルの場合は、絶対パスまたは相対パスを使用できます。仮想ディスク ファイルがすでに Cloud Storage に保存されている場合は、インポート プロセスに使用されるプロジェクトの Cloud Storage バケットにそのファイルが存在する必要があります。また、gs://BUCKET_NAME/OBJECT_NAME の形式でファイルのフルパスを指定する必要があります。
    • SERVICE_ACCOUNT_EMAIL: 前のステップで作成した Compute Engine サービス アカウントに関連付けられているメールアドレス。

    次の例では、メールアドレスが image-export-service-account@proj-12345.iam.gserviceaccount.com のサービス アカウントを使用して、gs://your_gcs_bucket に保存された my_server.vmdk という起動可能な仮想ディスクをインポートしています。

    gcloud compute images import my-imported-image \
      --source-file gs://your_gcs_bucket/my_server.vmdk \
      --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
    

API

  1. 仮想ディスクを Cloud Storage に追加します。

  2. サービス アカウントを作成して最小限のロールを割り当てます。サービス アカウントの作成に関する詳細については、サービス アカウントの作成と管理をご覧ください。

    少なくとも、指定した Compute Engine サービス アカウントには次のロールが割り当てられている必要があります。

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    詳細については、Compute Engine サービス アカウントに必要なロールを付与するをご覧ください。

  3. 仮想ディスクを Cloud Storage に追加します。

  4. API で、Cloud Build API に対する POST リクエストを作成します。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
    "steps":[
     {
       "args":[
         "-image_name=IMAGE_NAME",
         "-source_file=SOURCE_FILE",
         "-compute_service_account=SERVICE_ACCOUNT_EMAIL",
         "-timeout=7000s",
         "-client_id=api"
       ],
       "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
       "env":[
         "BUILD_ID=$BUILD_ID"
       ]
     }
    ],
    "timeout":"7200s",
    "tags":[
     "gce-daisy",
     "gce-daisy-image-import"
    ]
    }
    

    次のように置き換えます。

    • PROJECT_ID: イメージのインポート先のプロジェクトのプロジェクト ID。
    • IMAGE_NAME: インポートするイメージの名前。
    • SOURCE_FILE: Cloud Storage 内のイメージの URI(たとえば、gs://my-bucket/my-image.vmdk)。
    • SERVICE_ACCOUNT_EMAIL: 前のステップで作成した Compute Engine サービス アカウントに関連付けられているメールアドレス。

イメージを起動可能にする

起動可能なオペレーティング システムを搭載していながら必要な Compute Engine ドライバやゲスト環境パッケージがない Compute Engine カスタム イメージがある場合、イメージ インポート ツールを使用すると、そのイメージを Compute Engine で起動可能にできます。

インポートする新しいディスクを指定する --source-file フラグを使用する代わりに、--source-image フラグを使用して、起動可能にするカスタム イメージを指定します。

gcloud compute images import IMAGE_NAME \
    --source-image SOURCE_IMAGE_NAME

次のように置き換えます。

  • IMAGE_NAME: 対象イメージの名前。
  • SOURCE_IMAGE_NAME: ソースイメージの名前。

    既存のライセンスを含むイメージを Google Cloud にインポートする方法については、お客様所有ライセンスの使用をご覧ください。

サンプル コマンド

次の例では、my-image という名前の Compute Engine イメージを my-bootable-image という起動可能なイメージに変換します。この例の場合、--os ubuntu-1604 は検出されたオペレーティング システムをオーバーライドしています。

gcloud compute images import my-bootable-image \
    --source-image my-image \
    --os ubuntu-1604

リソースのクリーンアップ

Cloud Storage に保存されているファイルと Compute Engine のイメージには料金が発生します。インポート ツールにより、仮想ディスク ファイルが Cloud Storage にインポートされ、Compute Engine のカスタム イメージが 1 つ作成されます。

イメージが正常にインポートされ、Compute Engine インスタンスとして正常に起動することを確認したら、Cloud Storage から仮想ディスク ファイルを削除できます。このツールにより、ファイルが Cloud Storage にアップロードされると、そのファイルの URI が出力されます。この URI の形式は gs://BUCKET_NAME/tmpimage/IMAGE_NAME です。

--data-disk フラグを使用してイメージをインポートした後、--source-image フラグを指定して import ツールをもう一度実行してそのイメージを起動可能にしても、最初のイメージはまだ残っています。そのイメージが不要な場合は、削除することを検討してください。--image--source-image の両方のフラグに同じイメージ名を指定すると、そのイメージは自動的に上書きされるため、それ以上のクリーンアップは不要です。

次のステップ