仮想マシン(VM)イメージの構築

このページは、パートナー プロダクトを Compute Engine で実行するための公開マシンイメージの作成について説明します。

イメージには、インスタンスの起動に必要な、ブートローダー、オペレーティング システム、ルートファイル システムが含まれます。プロダクトのアプリとサービスのセットでイメージを構成できます。イメージは顧客がクラウドで仮想マシン(VM)インスタンスを起動するために使用されます。

最初は開発プロジェクトでイメージを作成し、担当の Google パートナー エンジニアによる確認が済んでからパブリック プロジェクトに移すことをおすすめします。

始める前に

  1. Google Cloud SDK をダウンロードします。

ベース プロダクト VM を作成する

Cloud Marketplace 用のカスタム マシンイメージを作成するには、次の手順を完了する必要があります(以降のセクションで説明します)。

  • Google でサポートされているベース公開イメージを使用して VM を作成し、アプリ固有のパッケージと構成をインストールします。

    Arm プロセッサを使用するイメージまたは x86 プロセッサを使用するイメージを選択できます。また、1 つの VM プロダクトに、異なるマシンタイプをターゲットとする複数のイメージを含めることもできます。CPU プラットフォームとそれらをサポートするマシンタイプの詳細については、CPU プラットフォームをご覧ください。

  • 顧客にサポートを提供する場合は、アプリユーザー認証情報を取得するスクリプトをインストールします。

ライセンスが適用された VM イメージの作成

  1. gcloud を使用して、Google Cloud CLI のデフォルトを設定します。

    gcloud config set project <project_id>
    gcloud config set compute/zone <zone>
  2. ソフトウェアのインストールに使用し、後で Cloud Marketplace で使用するためのイメージに変換されるプライマリ インスタンスを作成します。インスタンスの作成の詳細については、インスタンスの作成と起動をご覧ください。

    gcloud compute instances create ${INSTANCE} --scopes
    https://www.googleapis.com/auth/cloud-platform 
  3. ソフトウェアをインストールしてカスタマイズします。承認認証情報を作成するスクリプトなど、必要な起動スクリプトを含めます。

    安全なランダム パスワードを使用して承認認証情報を作成するには、次のセクションの承認認証情報の作成の手順に沿って操作します。

    プライマリー インスタンスの作成とカスタマイズが完了したら、VM イメージの作成に必要なディスクを準備します。

  4. 作業ディスクをクリーンアップします。また、VM から直接 VM イメージを作成すると、ユーザー ディレクトリと SSH 認証鍵が顧客の VM に転送されるため、VM イメージの作成時に入力ディスクをクリーンアップする必要があります。

    ディスクをクリーンアップする手順は次のとおりです。

    1. Compute Engine の [VM インスタンス] メニューで、クリーンアップするインスタンスの名前をクリックし、[編集] をクリックします。

    2. 下にスクロールして、[インスタンスを削除する際にブートディスクを削除する] チェックボックスをオフにして、[保存] をクリックします。このディスクを使用してイメージを作成します。

    3. ディスクを保持したまま VM を削除します。削除を確認するよう求められます。[ブートディスクの削除も行います] は選択しないでください。

    4. 次に、新しい VM インスタンスを作成する必要があります。[管理ディスクネットワーキングSSH 認証鍵] のオプションを展開します。

    5. [ディスク] で、前のインスタンスのディスクを追加のデータディスクとして接続します。[インスタンス削除時] に [ディスクを維持] が選択されていることを確認します。

      これで、インスタンスに SSH 接続して、ソフトウェアのインストール プロセスで作成されたホーム ディレクトリやその他の一時ファイルを削除できるようになりました。 データディスクにアクセスするには先にマウントする必要があります。ディスクのマウントの詳細については、永続ディスクの追加またはサイズ変更をご覧ください。

    6. 完了したら、更新したデータディスクを保持したまま、インスタンスをシャットダウンして削除します。これで、次の手順に沿って VM イメージを作成できるようになりました。

  5. 次の手順に沿って、Producer Portal で VM プロダクトのライセンス名を取得します。

    1. Google Cloud Console で Producer Portal を開きます。

      https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
      

      YOUR_PROJECT_ID を、開発プロジェクトまたはパブリック プロジェクトの ID に置き換えます。最初は開発プロジェクトでイメージを作成し、担当の Google パートナー エンジニアによる確認が済んでからパブリック プロジェクトに移すことをおすすめします。

    2. プロダクトの名前をクリックします。

    3. [Deployment パッケージ] セクションに移動します。[VM ライセンス] の名前をメモします。このライセンス名は、次のステップでイメージを作成するときに使用します。

  6. 次の gcloud コマンドを実行して、ライセンスが適用されたイメージを作成します。

    gcloud compute images create CREATE_IMAGE_NAME \
     --project PUBLIC_PROJECT_NAME \
     --source-disk projects/DEV_PROJECT_NAME/zones/SOURCE_DISK_ZONE/disks/SOURCE_DISK_NAME \
     --licenses LICENSE_NAME \
     --description ADD_DESCRIPTION
    

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

    • CREATE_IMAGE_NAME: イメージの名前と、そのイメージがサポートするCPUアーキテクチャを、who-vmOS-image-architecture-date 形式で、イメージのサポートするCPUアーキテクチャに応じ、architectureArm または x86_64 に置き換えます。プロダクトのイメージを更新するたびに、新しい一意の名前を使用する必要があります。

    • PUBLIC_PROJECT_NAME: Cloud Marketplace の公開プロジェクトのプロジェクト ID。このプロジェクトの Compute ストレージ管理者のロール(roles/compute.storageAdmin)が付与されている必要があります。

    • LICENSE_NAME: 前の手順でメモした VM プロダクトのライセンス名。

    • DEV_PROJECT_NAME: Cloud Marketplace の開発とテスト用に作成したプロジェクトのプロジェクト ID。このプロジェクトの Compute イメージ ユーザーのロール(roles/compute.imageUser)が必要です。

    • SOURCE_DISK_ZONE: ソースディスクのゾーン。

    • SOURCE_DISK_NAME: ソースディスクの名前。

    • ADD_DESCRIPTION: 作成するイメージのテキスト説明(省略可)。

イメージの公開

Marketplace に帰属するイメージを使用しない Terraform 以外のプロダクトの場合は、それをお客様が Compute Engine インスタンスにデプロイできるように、イメージを一般公開する必要があります。イメージを公開するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。

Console

  1. 公開プロジェクトで、Compute Engine の [イメージ] ページに移動します。

    [イメージ] ページに移動

  2. 以下のようにイメージを選択します。

  3. 右上に情報パネルが表示されない場合は、[情報パネルを表示] をクリックします。

  4. 情報パネルの [メンバーを追加] フィールドに allAuthenticatedUsers と入力し、[ロールを選択] メニューから [Compute イメージ ユーザー] を選択します。

  5. [追加] をクリックしてイメージを公開します。

コマンドライン

Cloud Shell またはローカルマシンで次の gcloud コマンドを使用します。

gcloud compute images add-iam-policy-binding IMAGE_NAME --member=allAuthenticatedUsers --role=roles/compute.imageUser

承認認証情報を作成する

プロダクトが基本的なファイアウォール ルールを備えた単一の VM インスタンスのシンプルなデプロイである場合、デプロイ パッケージを直接構成するときに、安全なランダム パスワードを自動的に含めることができます。

ほとんどのユースケースで推奨されているオープンソース mpdev ツールを使用してデプロイ パッケージを作成する場合は、mpdev を使用して自動的に複数の安全なランダム パスワードを追加できます。

認証情報を作成する手順については、デプロイ パッケージの作成をご覧ください。

プロダクトがデプロイされた後で、作成したパスワードの値を取得するには、VM インスタンス内から次のコマンドを使用します。

curl -H "Metadata-Flavor: Google" \
http://metadata/computeMetadata/v1/instance/attributes/PASSWORD_NAME

VM イメージをテストする

新しく作成したイメージを使用して VM インスタンスを作成し、機能を確認します。

また、ライセンス ID を確認するために、インスタンスに SSH 接続して、有効なライセンスが添付されていることを確認します。

curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/licenses/?recursive=true

Python 2.6 以上がインストールされていることを確認します。

python -V

次のパッケージがインストールされていることを確認します。

gcloud --version
ssh -V
ps aux | grep sshd
curl -V
ps aux | grep dhcp

独自のインスタンスを除いて、インスタンスに他のユーザー ディレクトリがインストールされていないこと、および独自のもの以外のユーザー ディレクトリと認証情報が残っていないことを確認してください。