Packer を使用した VM イメージのビルド

Packer は、単一のソース構成から複数のプラットフォーム向けに同じ仮想マシン(VM)イメージを作成するオープンソース ツールです。このページでは、Packer と Cloud Build によって Compute Engine で使用する VM イメージを作成する方法について説明します。

準備

このページの説明は、Packer の知識があることを前提としています。次の特長があります。

  • Packer テンプレートを含むソースコードを用意します。
  • このページの gcloud コマンドを使用する場合は、Google Cloud CLI をインストールします。
  • 次の API を有効にします。

    gcloud services enable sourcerepo.googleapis.com
    gcloud services enable compute.googleapis.com
    gcloud services enable servicemanagement.googleapis.com
    gcloud services enable storage-api.googleapis.com
    

必要な IAM 権限

Cloud Build で Packer を使用するには、Cloud Build サービス アカウントに Compute Engine インスタンス管理者のロールが必要です。ロールを付与するには:

  1. Cloud Build サービス アカウントを見つけます。

    CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT --filter="(bindings.role:roles/cloudbuild.builds.builder)"  --flatten="bindings[].members" --format="value(bindings.members[])")
    
  2. Compute Engine インスタンス管理者のロールをサービス アカウントに追加します。

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/compute.instanceAdmin
    

Packer ビルダー イメージを作成する

Cloud Build の Packer コミュニティ ビルダー イメージを使用すると、Cloud Build で packer コマンドを呼び出すことができます。このビルダーを Cloud Build 構成ファイルで使用する前に、イメージをビルドし、プロジェクトの Container Registry に push する必要があります。

  1. cloud-builders-community リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Packer ビルダー イメージに移動します。

    cd cloud-builders-community/packer
    
  3. ビルダーをプロジェクトに送信します。

    gcloud builds submit .
    

Packer ビルダーを使用する

  1. ソースコードとともに packer.json ファイルが存在することを確認します。

  2. プロジェクトのルート ディレクトリに、cloudbuild.yaml または cloudbuild.json という名前のビルド構成ファイルを作成します。

  3. ビルド構成ファイルに、packer build コマンドを呼び出すビルドステップを追加します。

    YAML

    steps:
    - name: 'gcr.io/[PROJECT_ID]/packer'
      args:
      - build
      - -var
      - image_name=[IMAGE_NAME]
      - -var
      - project_id=[PROJECT_ID]
      - -var
      - image_family=[IMAGE_FAMILY]
      - -var
      - image_zone=[IMAGE_ZONE]
      - packer.json
    

    JSON

    {
      "steps": [
       {
          "name": "gcr.io/[PROJECT_ID]/packer",
          "args": [
            "build",
            "-var",
            "image_name=[IMAGE_NAME]",
            "-var",
            "project_id=[PROJECT_ID]",
            "-var",
            "image_family=[IMAGE_FAMILY]",
            "-var",
            "image_zone=[IMAGE_ZONE]",
            "packer.json"
           ]
        }
       ]
    }
    

    ここで

    • [PROJECT_ID] はユーザーの Google Cloud プロジェクト ID です。
    • [IMAGE_NAME] は、作成中の VM イメージの名前です。
    • [IMAGE_FAMILY] は、VM イメージのイメージ ファミリーです。
    • [IMAGE_ZONE] は、イメージのゾーンです。
  4. ビルド構成ファイルを使用してビルドを開始します。

    gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
    

    ここで

    gcloud builds submit コマンドに [CONFIG_FILE_PATH][SOURCE_DIRECTORY] を指定しないと、Cloud Build は、構成ファイルとソースコードが現在の作業ディレクトリにあることを前提とします。

ビルドされたイメージは、Google Cloud コンソールの Compute Engine イメージページで確認できます。

次のステップ