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

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

始める前に

このページの説明は、Packer の知識があることを前提としています。また、次の準備が必要です。

  • Packer テンプレートを含むソースコードを用意します。
  • このページの gcloud コマンドを使用する場合は、gcloud コマンドライン ツールをインストールします。
  • 次の 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 サービス アカウントに編集者のロールが必要です。編集者のロールを付与するには:

  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. 編集者のロールをアカウントに追加します。

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/editor
    

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

  2. ビルド構成ファイルに、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"
           ]
        }
       ]
    }
    

    ここで

  3. ビルド構成ファイルを使用してビルドを開始します。

    gcloud builds submit --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
    

    ここで

    • [CONFIG_FILE_PATH] は、ビルド構成ファイルへのパスです。
    • [SOURCE_DIRECTORY] は、ソースコードのパスまたは URL です。

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

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

次のステップ