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

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

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

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

始める前に

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

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

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

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

Producer Portal

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

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

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

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

  4. オープンソース コンポーネントのライセンス テキスト ファイルとソースコードを VM に追加します(該当する場合)。 要件については、オープンソース コンプライアンス ドキュメントをご覧ください。

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

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

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

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

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

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

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

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

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

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

  6. 次の手順に沿って、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. [デプロイ パッケージ] セクションに移動します。[VM ライセンス] の下に、名前をメモします。このライセンス名は、イメージの作成時に使用します。

  7. 次の 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 projects/PUBLIC_PROJECT_NAME/global/licenses/LICENSE_NAME \
    --description ADD_DESCRIPTION
    

    以下を置き換えます。

    • CREATE_IMAGE_NAME: イメージの名前(who-vmOS-image-date 形式)。プロダクトのイメージを更新するたびに、新しい一意の名前を使用する必要があります。
    • PUBLIC_PROJECT_NAME: Google Cloud Marketplace の公開プロジェクトのプロジェクト ID。
    • LICENSE_NAME: 前の手順でメモした VM プロダクトのライセンス名。
    • DEV_PROJECT_NAME: Google Cloud Marketplace の開発とテスト用に作成したプロジェクトのプロジェクト ID。
    • SOURCE_DISK_ZONE: ソースディスクのゾーン。
    • SOURCE_DISK_NAME: ソースディスクの名前。
    • ADD_DESCRIPTION: 作成するイメージの説明(省略可)。

パートナー ポータル

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

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

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

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

  4. オープンソース コンポーネントのライセンス テキスト ファイルとソースコードを VM に追加します(該当する場合)。 要件については、オープンソース コンプライアンス ドキュメントをご覧ください。

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

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

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

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

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

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

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

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

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

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

  6. 次の手順に沿って、パートナー ポータルでプロダクトのライセンス名を取得します。

    1. プロダクトのソリューション ID をクリックします。

    2. クリックして [Solution Metadata] を編集します。

    3. ソリューションのメタデータで、[Licensing & Pricing] セクションの [ライセンス名] に表示されているライセンス名をメモします。このライセンス名は、gcloud を使用してイメージを作成するときに後で使用します。

  7. 次の 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 projects/PUBLIC_PROJECT_NAME/global/licenses/LICENSE_NAME \
    --description ADD_DESCRIPTION
    

承認認証情報を作成する

プロダクトが基本的なファイアウォール ルールを備えた単一の 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
gsutil --version
ssh -V
ps aux | grep sshd
curl -V
ps aux | grep dhcp

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