仮想アプライアンスをインポートする


仮想アプライアンスは、仮想マシン(VM)インスタンスのディスク イメージとハードウェア構成を含むパッケージです。

広く使用されている仮想アプライアンスの形式は OVF 形式です。仮想アプライアンスを OVF 形式でパッケージ化すると、OVF パッケージが生成されます。OVF パッケージは、.ovf 記述子ファイルや、ディスクなどの他のリソースのコレクションを格納するフォルダです。OVF パッケージを 1 つのファイルにアーカイブしたものを OVA ファイルといいます。

OVF パッケージまたは OVA 単一ファイルのどちらにある場合でも、OVF 形式の VM を Compute Engine にインポートできます。仮想アプライアンスの使用がユースケースに最適かどうかチェックするには、移行パスを選択するを確認します。

仮想アプライアンスをインポートすると、記述子ファイルに保存されている情報に基づいて Compute Engine に VM が作成され、起動します。

Compute Engine では、次のように OVA ファイルまたは OVF ファイルをインポートできます。

始める前に

  • 仮想アプライアンスをインポートするプロジェクトに信頼できるイメージのポリシーが定義されている場合は、パブリッシャーの許可リストに projects/compute-image-importprojects/compute-image-tools を追加します。
  • 別のプロジェクトから仮想アプライアンスをインポートする場合は、プロジェクト間でのインポートをご覧ください。
  • イメージをインポートする前に要件を満たす方法については、VM イメージのインポートとエクスポートの前提条件をご覧ください。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

要件

このセクションでは、仮想アプライアンスを Compute Engine にインポートするための要件について説明します。

ソース VM の要件

OVF ファイルの作成に使用する VM は、次の要件を満たす必要があります。

  • 仮想ディスクは VMDK または VHD 形式である必要があります。
  • 仮想ディスクは暗号化しないでください。

    VM が要件を満たしていることを確認するには、事前チェックツールを実行します。

ソース VM のオペレーティング システムは、次の要件を満たす必要があります。

  • Windows オペレーティング システムの場合、PowerShell バージョン 3 以降がインストールされている必要があります。バージョン 3.0 より前の PowerShell では、インポート処理中に起動スクリプトとシャットダウン スクリプトに問題が発生する可能性があります。
  • すべての Linux ディストリビューションで、ブートディスクが次の要件を満たしている必要があります。

    • ブートディスクに GRUB がインストールされている必要があります。
    • ブートディスクは複数の物理ディスクにまたがることはできません。論理ボリューム マネージャー(LVM)でパーティション分割されたディスクはサポートされていません。ディスクが複数の物理ディスクにまたがっている場合、OVF ファイルから作成された VM が Compute Engine で起動しないことがあります。

OVF ファイルの要件

OVF ファイルは、次の要件を満たしている必要があります。

  • OVF ファイルは、OVF 仕様書に記載されている Level 1 ポータビリティを提供する必要があります。Level 2 ポータビリティの仮想アプライアンスはインポートできますが、ソース ハイパーバイザ固有の詳細など、カスタム拡張はインポート時に無視されます。
  • OVF ファイルに含める仮想マシンは、1 つのみにする必要があります。複数の仮想マシンが存在する場合は、最初の仮想マシンのみがインポートされます。
  • OVF ファイルの最初のディスクは起動可能にする必要があります。

権限

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

インポート ツールでインポートされる構成

OVF 規格では、仮想化プロバイダに依存しない方法で仮想アプライアンスをパッケージ化するためのプロセスが指定されています。OVF 仮想アプライアンス パッケージには、1 つの .ovf 記述子ファイルと、仮想ディスクなどの他のリソースのコレクションが含まれています。

OVF 仮想アプライアンスを Compute Engine にインポートすると、記述子ファイルの次の構成が処理され、インポートされます。

  • OVF パッケージの DiskSection 要素から取得された仮想ディスクの情報。
  • OVF パッケージの ResourceAllocationSection から取得された CPU およびメモリ

    CPU またはメモリの構成が Compute Engine のサポート範囲を超えている場合、インポート プロセスはその値を Compute Engine でサポートされる最大値に設定します。

  • OVF パッケージの BootDeviceSection 要素から取得されたブートディスクの詳細。

  • OVF パッケージの OperatingSystemSection 要素から取得されたゲスト OS の詳細。

    ゲスト OS の情報は、インポートされたインスタンスに正しいドライバとゲスト環境パッケージをインストールするために使用されます。OVF 内のゲスト OS 情報が正しくない場合、インポートは失敗します。ゲスト OS 情報をオーバーライドするには、--os フラグを使用します。

インポートされた VM には、1 つの外部 IP アドレスを持つ単一のネットワーク アダプタが作成されます。OVF ファイルで指定されたネットワーク構成に関係なく、このネットワーク アダプタが使用されます。外部 IP アドレスを持たない VM をインポートするには、外部 IP アドレスを持たない VM のインポートをご覧ください。

仮想アプライアンスをインポートするときに、記述子ファイルの次のセクションは無視されます(インポートされません)。

  • NetworkSection
  • AnnotationSection
  • ProductSection
  • EulaSection
  • StartupSection
  • DeploymentOptionSection
  • InstallSection
  • EnvironmentFilesSection
  • SharedDiskSection
  • ScaleOutSection
  • PlacementGroupSection
  • PlacementSection
  • EncryptionSection

制限事項

この機能は、VPC Service Controls で保護されているプロジェクトではサポートされていません。

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

必要に応じて、記述子ファイルOperatingSystemSection 要素でオペレーティング システムを指定できます。また、gcloud compute instances import コマンドを使用して仮想アプライアンスをインポートする際に --os フラグを指定することもできます。

サポートされているオペレーティング システムについては、オペレーティング システムの詳細をご覧ください。

BYOL と BYOS のサポート

デフォルトでは、Windows サーバーおよび Red Hat Enterprise Linux(RHEL)オペレーティング システムを使用する OVF ファイルがインポートされ、追加料金が発生するプレミアム OS のオンデマンド課金を使用するよう構成されます。

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

--byol フラグを指定して gcloud compute instances import コマンドを使用すると、アプライアンスを BYOL ライセンス アプライアンスとしてインポートできます。OS を手動で指定する場合は、--os フラグを使用して、インポートするゲスト OS の byol サフィックスを含む値を指定します。たとえば、--os=rhel-8-byol は既存のライセンスを持つ RHEL 8 イメージをインポートします。

プロジェクト間でのインポート

  • ソース プロジェクト: OVA または OVF ファイルが保存されているプロジェクト。
  • 宛先プロジェクト: VM またはマシンイメージを作成するプロジェクト。

ソースと宛先プロジェクトが異なる場合、宛先プロジェクト内のサービス アカウントは、ソース プロジェクトの Cloud Storage バケットにアクセスする必要があります。

プロジェクト間でインポートする手順は次のとおりです。

  1. ソース プロジェクトで Cloud Storage バケットを見つけます。
  2. Cloud Storage バケットで、roles/storage.objectViewer を次のサービス アカウントに付与します。

    • 宛先プロジェクトの Cloud Build サービス アカウント: このサービス アカウントの形式は DESTINATION_PROJECT_NUMBER@cloudbuild.gserviceaccount.com です。
    • 宛先プロジェクトの Compute Engine サービス アカウント: このサービス アカウントの形式は DESTINATION_PROJECT_NUMBER-compute@developer.gserviceaccount.com です。

    DESTINATION_PROJECT_NUMBER は、宛先プロジェクトのプロジェクト番号に置き換えます。

    Cloud Storage バケットへのアクセス権を付与する方法については、バケットレベルのポリシーにメンバーを追加するをご覧ください。

  3. 仮想アプライアンスまたはマシンイメージをインポートします。

仮想アプライアンスのインポート

仮想アプライアンスは、Google Cloud CLI または REST を使用してインポートできます。

OVA ファイルのインポート

gcloud

  1. 仮想アプライアンスを Cloud Storage にアップロードします。
  2. Cloud Storage から Compute Engine に OVA ファイルをインポートするには、gcloud compute instances import コマンドを使用します。

    gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVA_FILE
    

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

    • VM_NAME: 作成するインスタンスの名前。
    • PATH_TO_OVA_FILE: Cloud Storage 上の OVA ファイルへのパス。

    たとえば、OVA ファイル Ubuntu.ova をインポートして、my-instance という名前のインスタンスを作成するには、次のコマンドを実行します。

    gcloud compute instances import my-instance \
        --source-uri=gs://my-bucket/Ubuntu.ova
    

    OVF 記述子ファイル内のゲスト OS 情報が正しくない場合や、検出された OS をオーバーライドする場合は、--os フラグを追加してオペレーティング システムを指定できます。サポートされている値の一覧については、gcloud compute instances import コマンドの --os フラグ オプションをご覧ください。

    たとえば、OVA ファイル Ubuntu.ova をインポートして、Ubuntu 16.04 を実行する my-instance という名前のインスタンスを作成するには、次のコマンドを実行します。

    gcloud compute instances import my-instance \
        --os=ubuntu-1604
        --source-uri=gs://my-bucket/Ubuntu.ova
    

REST

  1. 仮想アプライアンスを Cloud Storage にアップロードします。

  2. POST リクエストを Cloud Build API に送信します。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

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

    • PROJECT_ID: OVA ファイルのインポート先にするプロジェクトのプロジェクト ID。
    • VM_NAME: 作成する仮想マシン インスタンスの名前(my-instance など)。
    • SOURCE_URI: Cloud Storage に保管されている OVA ファイルの URI例: gs://my-bucket/my-instance.ova
    • ZONE: VM インスタンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

    さらに args 値を指定できます。「Compute Engine OVF import 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-12-30T19:06:03.968694865Z",
        "steps": [
          {
            "name": "gcr.io/compute-image-tools/gce_ovf_import:release",
            "env": [
              "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
            ],
            "args": [
              "-instance-names=my-instance",
              "-ovf-gcs-path=gs://my-bucket/my-instance.ova",
              "-zone=asia-northeast2",
              "-client-id=api",
              "-timeout": "7056s"
            ]
          }
        ],
        "timeout": "7200s",
        "projectId": "myproject-12345",
        "logsBucket": "gs://12345.cloudbuild-logs.googleusercontent.com",
        "options": {
          "logging": "LEGACY"
        },
        "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

    ビルドをモニタリングするには、次のいずれかの方法を使用します。

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

OVF ファイルのインポート

gcloud

  1. 仮想アプライアンスを Cloud Storage にアップロードします。
  2. Cloud Storage から Compute Engine に OVF ファイルをインポートするには、gcloud compute instances import コマンドを使用します。

    ディレクトリに存在する OVF ファイルが 1 つだけの場合は、記述子ファイルのパスまたは OVF ファイルを含むディレクトリのパスを指定します。

    • 記述子ファイルのパスを使用して OVF ファイルをインポートするには、次のコマンドを実行します。

      gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVF_FILE
      
    • ディレクトリ パスを使用して OVF ファイルをインポートするには、次のコマンドを実行します。

      gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVF_DIRECTORY
      

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

    • VM_NAME: 作成するインスタンスの名前。
    • PATH_TO_OVF_FILE: Cloud Storage 上の OVA ファイルへのパス。
    • PATH_TO_OVF_DIRECTORY: Cloud Storage 上の OVA ファイルを含むディレクトリへのパス。

    • my-instance という名前のインスタンスを作成する OVF ファイル Ubuntu.ovfmy-ovf-directory ディレクトリからインポートするには、次のコマンドを実行します。

      gcloud compute instances import my-instance \
       --source-uri=gs://my-bucket/my-ovf-directory/Ubuntu.ovf
      
    • my-ovf-directory ディレクトリから my-instance という名前のインスタンスを作成する OVF ファイルをインポートするには、次のコマンドを実行します。

      gcloud compute instances import my-instance \
       --source-uri=gs://my-bucket/my-ovf-directory
      

      OVF 記述子ファイル内のゲスト OS 情報が正しくない場合や、検出された OS をオーバーライドする場合は、--os フラグを追加してオペレーティング システムを指定できます。サポートされている値の一覧については、gcloud compute instances import コマンドの --os フラグ オプションをご覧ください。たとえば、OVF ファイル Ubuntu.ovf をインポートして、Ubuntu 16.04 を実行する my-instance という名前のインスタンスを作成するには、次のコマンドを実行します。

      gcloud compute instances import my-instance \
       --os=ubuntu-1604 \
       --source-uri=gs://my-bucket/my-ovf-directory/Ubuntu.ovf
      

REST

  1. 仮想アプライアンスを Cloud Storage に追加します。

  2. POST リクエストを Cloud Build API に送信します。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

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

    • PROJECT_ID: OVA ファイルのインポート先にするプロジェクトのプロジェクト ID。
    • VM_NAME: 作成する仮想マシン インスタンスの名前(my-instance など)。
    • SOURCE_URI: Cloud Storage に保管されている OVF ファイルの URI例: gs://my-bucket/my-instance.ovf
    • OS: OVF ファイルのオペレーティング システム例: ubuntu-1604--os フラグはデフォルトで省略可能ですが、このフラグを使用して、検出された OS をオーバーライドできます。サポートされている値の一覧については、gcloud compute instances import コマンドの --os フラグ オプションをご覧ください。
    • ZONE: VM インスタンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

    さらに args 値を指定できます。「Compute Engine OVF import 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-12-30T19:06:03.968694865Z",
        "steps": [
          {
            "name": "gcr.io/compute-image-tools/gce_ovf_import:release",
            "env": [
              "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
            ],
            "args": [
              "-instance-names=my-instance",
              "-ovf-gcs-path=gs://my-bucket/my-instance.ovf",
              "-os=ubuntu-1404",
              "-zone=asia-south1",
              "-client-id=api",
              "-timeout": "7056s"
            ]
          }
        ],
        "timeout": "7200s",
        "projectId": "myproject-12345",
        "logsBucket": "gs://12345.cloudbuild-logs.googleusercontent.com",
        "options": {
          "logging": "LEGACY"
        },
        "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

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

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

カスタム設定でのインポート

カスタム CPU とメモリ

gcloud

OVF ファイルで指定された CPU またはメモリ構成をオーバーライドするには、Google Cloud CLI のステップに従い、OVA ファイルをインポートするか、OVF ファイルをインポートして、--custom-cpu フラグと --custom-memory フラグを指定します。

たとえば、2 つの CPU と 2,048 MB のメモリを持つ my-instance というインスタンスをインポートするには、次のコマンドを実行します。

gcloud compute instances import my-instance \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

REST

OVF ファイルで指定された CPU またはメモリ構成をオーバーライドするには、Cloud Build API のステップに従い、OVA ファイルをインポートするか、OVF ファイルをインポートして、-machine-type 引数を指定します。この -machine-type は、使用する、事前定義またはカスタム マシンタイプです。

たとえば、2 個の CPU と 2,048 MB のメモリを持つ my-instance というインスタンスをインポートするには、次のリクエストを使用します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=my-instance",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-machine-type=custom-2-2048",
        "-zone=asia-south1",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

カスタム ネットワーク

カスタム ネットワークは、イメージをインポートするプロジェクトと同じプロジェクトで定義する必要があります。

gcloud

カスタム ネットワークを使用するには、Google Cloud CLI のステップに従って、OVA ファイルをインポートするか、OVF ファイルをインポートして、--network フラグを指定します。 ネットワークがカスタム サブネット モードで構成されている場合は、--subnet フラグと --zone フラグも指定する必要があります。

例 1 - カスタム ネットワークを使用する

たとえば、次のようなプロパティが設定されているとします。

  • VM 名: my-instance
  • ネットワーク: custom-vpc-network
  • サブネット: company-vpc-us-east1-c
  • ゾーン: us-east1-c

次のコマンドを実行して、上記のプロパティを持つインスタンスをインポートします。SERVICE_PROJECT_ID は、仮想アプライアンスのインポート先となるプロジェクトの ID に置き換えます。

gcloud compute instances import my-instance \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --project SERVICE_PROJECT_ID \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

例 2 - カスタム ネットワーク(共有 VPC)を使用する

たとえば、次のようなプロパティが設定されているとします。

  • VM 名: my-instance-2
  • ネットワーク: my-shared-vpc
  • サブネット: my-shared-subnet
  • ゾーン: us-east1-c

上記のプロパティを持つ VM をインポートするには、次の手順を行います。

  1. Cloud Build サービス アカウントに compute.networkUser ロールを付与します。詳細については、Cloud Build サービス アカウントに必要なロールを付与するをご覧ください。

  2. VM をインポートします。

    gcloud compute instances import my-instance-2 \
       --source-uri gs://my-bucket/Ubuntu.ova \
       --project SERVICE_PROJECT_ID \
       --network projects/HOST_PROJECT_ID/global/networks/my-shared-vpc \
       --subnet projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/my-shared-subnet
       --zone us-east1-c
    

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

    • SERVICE_PROJECT_ID: 仮想アプライアンスをインポートするプロジェクトの ID
    • HOST_PROJECT_ID: 共有 VPC が配置されているプロジェクトの ID

REST

カスタム ネットワークを使用するには、Cloud Build API のステップに従って、OVA ファイルをインポートするか、OVF ファイルをインポートして、-network 引数を指定します。ネットワークがカスタム サブネット モードで構成されている場合は、-subnet 引数と -zone 引数も指定する必要があります。

例 - カスタム ネットワークを使用する

たとえば、次のようなプロパティが設定されているとします。

  • VM 名: my-instance
  • ネットワーク: custom-vpc-network
  • サブネット: company-vpc-us-east1-c
  • ゾーン: us-east1-c

以下の POST リクエストを作成して、上記のプロパティを持つインスタンスをインポートします。SERVICE_PROJECT_ID は、仮想アプライアンスのインポート先となるプロジェクトの ID に置き換えます。

POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=my-instance",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-zone=us-east1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

例 2 - カスタム ネットワーク(共有 VPC)を使用する

たとえば、次のようなプロパティが設定されているとします。

  • VM 名: my-instance-2
  • ネットワーク: my-shared-vpc
  • サブネット: my-shared-subnet
  • ゾーン: us-east1-c

上記のプロパティを持つ VM をインポートするには、次の手順を行います。

  1. Cloud Build サービス アカウントに compute.networkUser ロールを付与します。詳細については、Cloud Build サービス アカウントに必要なロールを付与するをご覧ください。

  2. 次の POST リクエストを作成して VM をインポートします。

    POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
    {
     "timeout":"7200s",
     "steps":[
       {
         "args":[
           "-instance-names=my-instance-2",
           "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
           "-zone=us-east1-c",
           "-network=projects/HOST_PROJECT_ID/global/networks/my-shared-vpc",
           "-subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/my-shared-subnet",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

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

    • SERVICE_PROJECT_ID: 仮想アプライアンスをインポートするプロジェクトの ID。
    • HOST_PROJECT_ID: 共有 VPC が配置されているプロジェクトの ID。

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

外部 IP アドレスを許可しないネットワークを使用して VM をインポートする手順は次のとおりです。

  1. 仮想アプライアンスを Cloud Storage に追加します。

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

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

  4. Google Cloud CLI または REST を使用して VM をインポートします。

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

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

gcloud

Cloud Storage から Compute Engine に仮想アプライアンスをインポートするには、--no-address フラグを指定して gcloud compute instances import コマンドを使用します。

gcloud compute instances import VM_NAME \
    --source-uri=SOURCE_URI \
    --zone=ZONE \
    --no-address

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

  • VM_NAME: 作成するインスタンスの名前。
  • SOURCE_URI: Cloud Storage 上にある OVA または OVF ファイルの URI。例: gs://my-bucket/Ubuntu.ova
  • ZONE: 仮想アプライアンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

REST

Cloud Build API で外部 IP のオーバーライドを使用すると、外部 IP を持たない VM をインポートできます。

OVF ファイルで指定された外部 IP の設定をオーバーライドするには、Cloud Build API のステップに従って、OVA ファイルをインポートするか、OVF ファイルをインポートして、-no-external-ip 引数を指定します。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=VM_NAME",
        "-ovf-gcs-path=SOURCE_FILE",
        "-no-external-ip",
        "-zone=ZONE",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

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

  • PROJECT_ID: イメージをインポートするプロジェクトのプロジェクト ID。
  • VM_NAME: 作成する VM の名前。
  • SOURCE_FILE: Cloud Storage 内のイメージの URI。例: gs://my-bucket/Ubuntu.ova
  • ZONE: イメージを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

UEFI ブートローダーによる OVA ファイルのインポート

gcloud

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

gcloud compute instances import VM_NAME \
  --source-uri=SOURCE_URI \
  --guest-os-features=UEFI_COMPATIBLE

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

  • VM_NAME: 作成する VM の名前
  • SOURCE_URI: Cloud Storage 上にある OVA または OVF ファイルの URI。例: gs://my-bucket/Ubuntu.ova

REST

Cloud Build API を使用して -uefi-compatible 引数を指定すると、UEFI ブートローダーの OVA ファイルをインポートできます。

  1. 仮想アプライアンスを Cloud Storage にアップロードします。

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

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-uefi-compatible",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

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

    • PROJECT_ID: OVA ファイルのインポート先にするプロジェクトのプロジェクト ID。
    • VM_NAME: 作成する仮想マシン インスタンスの名前(my-instance など)。
    • SOURCE_URI: Cloud Storage に保管されている OVA ファイルの URI例: gs://my-bucket/my-instance.ova
    • ZONE: VM インスタンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

カスタム サービス アカウントを使用した仮想アプライアンスのインポート

仮想アプライアンスのインポート時には、一時的な仮想マシン(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-service-account フラグで指定されるサービス アカウントに必要です。詳細については、Compute Engine サービス アカウントに必要なロールを付与するをご覧ください。

  3. gcloud compute instances import コマンドを使用して、仮想アプライアンスをインポートします。

    gcloud compute instances import VM_NAME \
    --source-uri=SOURCE_URI \
    --zone=ZONE \
    --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=SCOPES
    

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

    • VM_NAME: 作成するインスタンスの名前。
    • SOURCE_URI: Cloud Storage 上にある OVA または OVF ファイルの URI。例: gs://my-bucket/Ubuntu.ova
    • ZONE: 仮想アプライアンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。
    • TEMP_SERVICE_ACCOUNT_EMAIL: 前の手順で作成したカスタム サービス アカウントに関連付けられているメールアドレス。このサービス アカウントは一時的な VM によって使用されます。指定しない場合、VM はデフォルトの Compute Engine サービス アカウントを使用します。
    • SERVICE_ACCOUNT_EMAIL: インポート プロセスで作成される VM に接続されるカスタム サービス アカウントに関連付けられたメールアドレス。このサービス アカウントには権限の制限がないため、必要に応じてカスタマイズできます。指定しない場合は、デフォルトの Compute Engine サービス アカウントが VM に接続されます。
    • SCOPES: --service-account オプションのアクセスレベルを指定します。指定しない場合、デフォルトのスコープが使用されます。詳細については、--scopes フラグをご覧ください。

REST

  1. 仮想アプライアンスを Cloud Storage に追加します。

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

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

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

    これらの最低限必要なロールは、-compute-service-account 引数で指定されるサービス アカウントに必要です。詳細については、Compute Engine サービス アカウントに必要なロールを付与するをご覧ください。

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

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "timeout":"7200s",
      "steps":[
        {
          "args":[
            "-instance-names=VM_NAME",
            "-ovf-gcs-path=SOURCE_FILE",
            "-compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL",
            "-service-account=SERVICE_ACCOUNT_EMAIL",
            "-zone=ZONE",
            "-scopes=SCOPES",
            "-client-id=api",
            "-timeout=7000s"
          ],
          "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "tags":[
        "gce-ovf-import"
      ]
    }
    

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

    • PROJECT_ID: イメージをインポートするプロジェクトのプロジェクト ID。
    • VM_NAME: 作成する VM の名前。
    • SOURCE_FILE: Cloud Storage 内のイメージの URI。例: gs://my-bucket/Ubuntu.ova
    • ZONE: イメージを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。
    • TEMP_SERVICE_ACCOUNT_EMAIL: 前の手順で作成したカスタム サービス アカウントに関連付けられているメールアドレス。このサービス アカウントは一時的な VM によって使用されます。指定しない場合、VM はデフォルトの Compute Engine サービス アカウントを使用します。
    • SERVICE_ACCOUNT_EMAIL: インポート プロセスで作成される VM に接続されるカスタム サービス アカウントに関連付けられたメールアドレス。このサービス アカウントには権限の制限がないため、必要に応じてカスタマイズできます。指定しない場合は、デフォルトの Compute Engine サービス アカウントが VM に接続されます。
    • SCOPES: -service-account オプションのアクセスレベルを指定します。指定しない場合、デフォルトのスコープが使用されます。詳細については、--scopes フラグをご覧ください。

次のステップ