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


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

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

OVF パッケージまたは OVA 単一ファイルのどちらにある場合でも、OVF 形式の VM を Compute Engine にインポートできます。インポート方法の選択で、仮想アプライアンスの使用がユースケースに最適かどうか判断してください。

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

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

始める前に

Cloud Build API を有効にする

仮想アプライアンス インポート ツールでは Cloud Build を使用します。

ほとんどの場合、gcloud compute instances import はこれらの権限を Cloud Build サービス アカウントに付与しようとします。ただし、これらの権限を手動で付与して、必要な権限が有効になるようにすることもできます。

Console

  1. Cloud Build API を有効にします。

    Cloud Build API を有効にする

    Console から Cloud Build API を有効にすると、Compute Engine は Cloud Build サービス アカウントに次のロールを付与し、Cloud Build サービスが Compute Engine にインスタンスをインポートできるようにします。

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    インポート ツールでは、デフォルトの Compute Engine サービス アカウントも使用されます。デフォルトで、Compute Engine サービス アカウントには IAM プロジェクト編集者のロールが付与されています。このロールを削除すると、インポート プロセスが失敗することがあります。役割をサービス アカウントに再び追加するには、アクセス権の付与をご覧ください。Compute Engine のデフォルトのサービス アカウントについて詳しくは、Compute Engine のデフォルトのサービス アカウントをご覧ください。

gcloud

gcloud コマンドライン ツールを使用して Cloud Build サービスを設定する手順は次のとおりです。

  1. Cloud Build を有効にします。

    gcloud services enable cloudbuild.googleapis.com

    インポート ツールでは、デフォルトの Compute Engine サービス アカウントも使用されます。デフォルトで、Compute Engine サービス アカウントには IAM プロジェクト編集者のロールが付与されています。このロールを削除すると、インポート プロセスが失敗することがあります。役割をサービス アカウントに再び追加するには、アクセス権の付与をご覧ください。Compute Engine のデフォルトのサービス アカウントについて詳しくは、Compute Engine のデフォルトのサービス アカウントをご覧ください。

  2. Cloud Build API のサービス アカウントに compute.admin 役割を追加します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. Cloud Build API のサービス アカウントに iam.serviceAccountUser 役割を追加します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. Cloud Build API のサービス アカウントに iam.serviceAccountTokenCreator 役割を追加します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    以下を置き換えます。

要件

ソース 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 ファイルの最初のディスクは起動可能にする必要があります。

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

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 ライセンス アプライアンスとしてインポートするには、[--os] フラグに適切な BYOL 値を指定して、gcloud compute instances import コマンドを実行します。

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

  • ソース プロジェクト: 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. 仮想アプライアンスまたはマシンイメージをインポートします。

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

仮想アプライアンスは、gcloud コマンドライン ツールまたは Cloud Build API を使用してインポートできます。

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
    

    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
    

API

  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",
           "-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 に保管されている OVA ファイルの URI例: gs://my-bucket/my-instance.ova
    • OS: OVA ファイルのオペレーティング システム(ubuntu-1604 など)。このフラグはデフォルトではオプションですが、必要になる場合もあります。このフラグを指定することをおすすめします。サポートされている値の一覧については、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.ova",
              "-os=rhel-6",
              "-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/gcr/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
      

      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
      

API

  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",
           "-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 など)。このフラグはデフォルトではオプションですが、必要になる場合もあります。このフラグを指定することをおすすめします。サポートされている値の一覧については、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/gcr/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

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

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

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

カスタム CPU とメモリ

gcloud

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

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

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

API

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

たとえば、Ubuntu 1404 を実行し、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",
        "-os=ubuntu-1404",
        "-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

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

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

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

  • VM 名: my-instance
  • オペレーティング システム: Ubuntu 1404
  • ネットワーク: custom-vpc-network
  • サブネット: company-vpc-us-east1-c
  • ゾーン: us-east1-c

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

gcloud compute instances import my-instance \
    --os ubuntu-1404 \
    --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
  • オペレーティング システム: Ubuntu 1404
  • ネットワーク: my-shared-vpc
  • サブネット: my-shared-subnet
  • ゾーン: us-east1-c

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

  1. Cloud Build API のサービス アカウントに compute.networkUser ロールを追加します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
      --member serviceAccount:SERVICE_PROJECT_NUM@cloudbuild.gserviceaccount.com \
      --role roles/compute.networkUser
    

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

    • HOST_PROJECT_ID: 共有 VPC が配置されているプロジェクトの ID
    • SERVICE_PROJECT_NUM: 仮想アプライアンスをインポートするプロジェクトのプロジェクト番号
  2. VM をインポートします。

    gcloud compute instances import my-instance-2 \
       --os ubuntu-1404 \
       --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

API

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

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

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

  • VM 名: my-instance
  • オペレーティング システム: Ubuntu 1404
  • ネットワーク: 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",
        "-os=ubuntu-1404",
        "-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
  • オペレーティング システム: Ubuntu 1404
  • ネットワーク: my-shared-vpc
  • サブネット: my-shared-subnet
  • ゾーン: us-east1-c

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

  1. Cloud Build API のサービス アカウントに compute.networkUser ロールを追加します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
      --member serviceAccount:SERVICE_PROJECT_NUM@cloudbuild.gserviceaccount.com \
      --role roles/compute.networkUser
    

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

    • HOST_PROJECT_ID: 共有 VPC が配置されているプロジェクトの ID
    • SERVICE_PROJECT_NUM: 仮想アプライアンスをインポートするプロジェクトのプロジェクト番号
  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",
           "-os=ubuntu-1404",
           "-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. gcloud コマンドライン ツールまたは Cloud Build API を使用して 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 \
    --os=OS \
    --zone=ZONE \
    --no-address

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

  • VM_NAME: 作成するインスタンスの名前。
  • SOURCE_URI: Cloud Storage 上にある OVA または OVF ファイルの URI。例: gs://my-bucket/Ubuntu.ova
  • OS: OVA ファイルのオペレーティング システム(ubuntu-1604 など)。このフラグはデフォルトではオプションですが、必要になる場合もあります。このフラグを指定することをおすすめします。サポートされている値の一覧については、gcloud compute instances import コマンドの --os フラグ オプションをご覧ください。
  • ZONE: 仮想アプライアンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

API

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",
        "-os=OS",
        "-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
  • OS: イメージのオペレーティング システム。サポートされている値の一覧については、gcloud compute images import コマンドの --os フラグ オプションをご覧ください。
  • ZONE: イメージを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

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

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",
           "-os=OS",
           "-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
    • OS: OVA ファイルのオペレーティング システム(ubuntu-1604 など)。このフラグはデフォルトではオプションですが、必要になる場合もあります。このフラグを指定することをおすすめします。サポートされている値の一覧については、gcloud compute instances import コマンドの --os フラグ オプションをご覧ください。
    • ZONE: VM インスタンスを作成するゾーン。空のままにすると、プロジェクトのデフォルト ゾーンが使用されます。

次のステップ