仮想アプライアンスからマシンイメージをインポートする


マシンイメージを使用すると、Compute Engine で実行される VM インスタンス用に、すべての構成、メタデータ、権限、データを 1 つ以上のディスクから格納できます。マシンイメージを使用するタイミングと方法については、マシンイメージをご覧ください。

このドキュメントでは、仮想アプライアンスからマシンイメージをインポートする手順を説明します。

始める前に

  • マシンイメージをインポートするプロジェクトに信頼できるイメージのポリシーが定義されている場合は、パブリッシャーの許可リストに projects/compute-image-importprojects/compute-image-tools を追加します。
  • 別のプロジェクトから仮想アプライアンスをインポートする場合は、プロジェクト間でのインポートをご覧ください。
  • Compute Engine の仮想アプライアンスのインポートに関するガイドで、ソース VM と OVF ファイルの要件を確認します。
  • マシンイメージをインポートする前に要件を満たす方法については、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 を使用して認証するをご覧ください。

制限事項

  • マシンイメージは、プロジェクト間で共有できます。ただし、共有 VPC ネットワークはサポートされていません。
  • この機能は、VPC Service Controls で保護されているプロジェクトではサポートされていません。
  • 200 TB を超えるディスクがアタッチされているソース VM からマシンイメージを作成することはできません。

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

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

マシンイメージをインポートする

仮想アプライアンスからマシンイメージをインポートするには、Google Cloud CLI または REST を使用します。

gcloud

gcloud compute machine-images import コマンドを使用して、仮想アプライアンスからマシンイメージをインポートします。

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:SOURCE_URI \
    --os=OS

以下を置き換えます。

  • MACHINE_IMAGE_NAME: インポートするマシンイメージの名前。
  • SOURCE_URI: Cloud Storage 上の OVA ファイルまたは OVF ファイルへのパス。
  • OS: OVA ファイルのオペレーティング システム。このフラグはデフォルトで省略可能ですが、必要になる場合もあります。このフラグを指定することをおすすめします。

たとえば、次の gcloud コマンドを使用すると、gs://my-bucket ディレクトリに保存されていて、centos-7 を実行する my-ova というソース OVA ファイルから my-machine-image というマシンイメージをインポートできます。

gcloud compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

REST

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

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

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

    以下を置き換えます。

    • PROJECT_ID: OVA ファイルのインポート先にするプロジェクトのプロジェクト ID。
    • MACHINE_IMAGE_NAME: インポートするマシンイメージの名前。例: my-machine-image
    • SOURCE_URI: OVA ファイルの URI、または Cloud Storage に保存されている OVF パッケージを含むディレクトリ。例: gs://my-bucket/my-instance.ova
    • OS: OVA ファイルのオペレーティング システム。例: ubuntu-1604。このフラグはデフォルトで省略可能ですが、必要になる場合もあります。このフラグを指定することをおすすめします。

    さらに args 値を指定できます。「Compute Engine OVF import GitHub」ページのオプション フラグに関するセクションをご覧ください。

OVF オーバーライドを使用してマシンイメージをインポートする

カスタム CPU とメモリ

gcloud

OVF ファイルで指定された CPU またはメモリ構成をオーバーライドするには、Google Cloud CLI の手順に沿ってマシンイメージをインポートする際に、--custom-cpu フラグと --custom-memory フラグを指定します。

my-machine-image という名前のマシンイメージには、OVF ファイルの設定に適用される次のオーバーライドがあります。

  • オペレーティング システム: Ubuntu 1404
  • CPU: 2 CPUs
  • メモリ: 2048 MB

これらのオーバーライドを使用して my-machine-image をインポートするには、次のコマンドを実行します。

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

REST

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

my-machine-image という名前のマシンイメージには、OVF ファイルの設定に適用される次のオーバーライドがあります。

  • オペレーティング システム: Ubuntu 1404
  • CPU: 2 CPUs
  • メモリ: 2048 MB

これらのオーバーライドを使用して my-machine-image をインポートするには、Compute Engine API に次のリクエストを行います。

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

PROJECT_ID は、実際のプロジェクト ID に置き換えます。

カスタム ネットワーク

gcloud

カスタム ネットワークを設定するには、Google Cloud CLI の手順に沿ってマシンイメージをインポートする際に、--network フラグを指定します。ネットワークがカスタム サブネット モードで構成されている場合は、--subnet フラグと --zone フラグも指定する必要があります。

my-machine-image という名前のマシンイメージには、OVF ファイルの設定に適用される次のオーバーライドがあります。

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

これらのオーバーライドを使用して my-machine-image をインポートするには、次のサンプル コマンドを実行します。

gcloud compute machine-images import my-machine-image \
    --os=ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network=custom-vpc-network \
    --subnet=company-vpc-us-east1-c \
    --zone=us-east1-c

REST

カスタム ネットワークを使用するには、Compute Engine API の手順に沿ってマシンイメージをインポートし、-network 引数を指定します。ネットワークがカスタム サブネット モードで構成されている場合は、-subnet 引数と -zone 引数も指定する必要があります。

my-machine-image という名前のマシンイメージには、OVF ファイルの設定に適用される次のオーバーライドがあります。

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

これらのオーバーライドを使用して my-machine-image をインポートするには、Compute Engine API に次のリクエストを行います。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-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=$BUsILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

PROJECT_ID は、実際のプロジェクト ID に置き換えます。

外部 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 machine-images import コマンドを使用します。

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=SOURCE_URI \
    --os=OS \
    --zone=ZONE \
    --no-address

以下を置き換えます。

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

REST

Cloud Build API を使用して、-no-external-ip 引数を指定します。

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

以下を置き換えます。

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

カスタム サービス アカウントを使用してマシンイメージをインポートする

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

サービス アカウントは VM に接続されている ID です。サービス アカウントのアクセス トークンは、VM メタデータ サーバーからアクセスでき、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 machine-images import コマンドを使用して、仮想アプライアンスからマシンイメージをインポートします。

    gcloud compute machine-images import MACHINE_IMAGE_NAME \
        --source-uri=gs:SOURCE_URI \
        --os=OS \
        --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --scopes=SCOPES
    

    以下を置き換えます。

    • MACHINE_IMAGE_NAME: インポートするマシンイメージの名前。
    • SOURCE_URI: Cloud Storage 上の OVA ファイルまたは OVF ファイルへのパス。
    • OS: OVA ファイルのオペレーティング システム。このフラグはデフォルトで省略可能ですが、必要になる場合もあります。このフラグを指定することをおすすめします。
    • 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. POST リクエストを Cloud Build API に送信します。

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

    以下を置き換えます。

    • PROJECT_ID: マシンイメージをインポートするプロジェクトのプロジェクト ID。
    • MACHINE_IMAGE_NAME: インポートするマシンイメージの名前。例: my-machine-image
    • SOURCE_URI: Cloud Storage に保管されている OVA ファイルの URI例: gs://my-bucket/my-machine.ova
    • OS: OVA ファイルのオペレーティング システム(ubuntu-1604 など)。このフラグはデフォルトではオプションですが、必要になる場合もあります。このフラグを指定することをおすすめします。サポートされている値の一覧については、gcloud compute instances import コマンドの --os フラグ オプションをご覧ください。
    • ZONE: マシンイメージをインポートするゾーン
    • TEMP_SERVICE_ACCOUNT_EMAIL: 前の手順で作成したカスタム サービス アカウントに関連付けられているメールアドレス。このサービス アカウントは一時的な VM によって使用されます。指定しない場合、VM はデフォルトの Compute Engine サービス アカウントを使用します。
    • SERVICE_ACCOUNT_EMAIL: このマシンイメージから作成された VM に接続するカスタム サービス アカウントに関連付けられたメールアドレス。このサービス アカウントには権限の制限がないため、必要に応じてカスタマイズできます。指定しない場合は、デフォルトの Compute Engine サービス アカウントが VM に接続されます。
    • SCOPES: --service-account オプションのアクセスレベルを指定します。指定しない場合、デフォルトのスコープが使用されます。詳細については、--scopes フラグをご覧ください。

次のステップ