VM イメージのビルド

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

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

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

始める前に

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

ベース ソリューション VM の作成

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

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

  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. ソリューションのメタデータを編集します。

    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 インスタンスのシンプルなデプロイである場合、パートナー ポータルでデプロイ パッケージを直接構成するときに、安全なランダム パスワードを自動的に含めることができます。

ほとんどのユースケースで推奨されている Deployment Manager のオープンソース deploymentmanager-autogen ツールを使用してデプロイ パッケージを作成する場合は、Deployment Manage Autogen を使用して安全なランダム パスワードを自動的に追加できます。安全なランダムなパスワードを複数追加する場合は、次のカスタム デプロイ パッケージ用の承認認証情報を作成する手順を参照してください。

カスタム デプロイ パッケージを作成する場合は、次の手順で承認認証情報を作成できます。

  1. デプロイ パッケージの PROJECT_NAME.jinja という Jinja ファイル内に、次のリソースを作成します。

    - name: generated-password-0
     type: password.py
     properties:
       length: 8
       includeSymbols: False
    

    自動生成パスワードの長さを指定するには、length の値を編集します。

    デプロイ パッケージにの複数の安全なランダム パスワードを含めるには、このリソースの複製を必要な数だけ追加し、必要に応じて名前の番号を増やします。例:

    - name: generated-password-0
     type: password.py
     properties:
       length: 8
       includeSymbols: False
    - name: generated-password-1
     type: password.py
     properties:
       length: 14
       includeSymbols: False
    
  2. VM インスタンスにパスワードを添付するには、Jinja ファイルのメタデータの items の下に追加します。例:

    metadata:
     items:
       - key: PASSWORD-0-NAME
         value: $(ref.generated-password-0.password)
       - key: PASSWORD-1-NAME
         value: $(ref.generated-password-1.password)
    

    複数のパスワードを含める場合は、前の手順で作成した各パスワードに Key-Value ペアを追加します。

  3. Jinja ファイルの最後のほうにある outputs セクションにパスワードを追加します。

    outputs:
     - name: password0
       value: $(ref.generated-password-0.password)
     - name: password1
       value: $(ref.generated-password-1.password)
    

    複数のパスワードを含める場合は、パスワードごとに Name-Value ペアを追加します。

  4. PROJECT_NAME.jinja.schema という名前のスキーマ ファイル内に、前の手順で追加した出力に対応する出力を追加します。

    outputs:
     deployment:
       type: string
     password0:
       type: string
     password1:
       type: string
    
  5. デプロイ後のインターフェースからユーザーがパスワードを確認できるようにするには、PROJECT_NAME.jinja.displayapplicationTable にパスワードを追加します。

    runtime:
     applicationTable:
       rows:
         - label: PASSWORD-0-NAME (Temporary)
           value: '{{ outputs().password0 }}'
         - label: PASSWORD-1-NAME (Temporary)
           value: '{{ outputs().password1 }}'
    

ソリューションがデプロイされた後で、作成したパスワードの値を取得するには、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

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