Mem-build image VM menggunakan Packer

Packer adalah alat open source untuk membuat image Virtual Machine (VM) yang identik untuk beberapa platform dari konfigurasi sumber tunggal. Halaman ini menjelaskan cara menggunakan Packer dan Cloud Build untuk membuat image VM yang akan digunakan di Compute Engine.

Sebelum memulai

Petunjuk di halaman ini mengasumsikan bahwa Anda sudah memahami Packer. Selain itu:

  • Siapkan kode sumber Anda, termasuk template Packer.
  • Memiliki repositori Docker di Artifact Registry atau membuat repositori baru.
  • Jika Anda ingin menggunakan perintah gcloud di halaman ini, instal Google Cloud CLI.
  • Mengaktifkan API berikut:

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

Izin IAM yang diperlukan

Membuat image builder Packer

Cloud Build menyediakan image community builder Packer yang dapat Anda gunakan untuk memanggil perintah packer di Cloud Build. Sebelum menggunakan builder ini dalam file konfigurasi Cloud Build, Anda harus membangun image dan mengirimkannya ke Artifact Registry:

  1. Buat clone repositori cloud-builders-community:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Buka image builder Packer:

    cd cloud-builders-community/packer
    
  3. Kirim builder ke project Anda:

    gcloud builds submit . --config cloudbuild.yaml --substitutions=_AR_HOST=[LOCATION]-docker.pkg.dev,_AR_REPO=[REPOSITORY]
    

    Dengan:

    • [LOCATION] adalah region repositori Artifact Registry Anda.
    • [REPOSITORY] adalah nama repositori Artifact Registry Anda.

Membuat template Packer

Buat file baru bernama packer.pkr.hcl dan tambahkan konfigurasi template.

Contoh berikut menunjukkan template Packer (packer.pkr.hcl) yang dikonfigurasi untuk membuat image VM Compute Engine:

packer {
  required_plugins {
    googlecompute = {
      version = ">= 1.1.1"
      source  = "github.com/hashicorp/googlecompute"
    }
  }
}

variable "image_name" {
  type    = string
  description = "The name of the output VM image"
  default = "my-packer-image"
}
variable "project_id" {
  type    = string
  description = "The GCP project ID"
}
variable "image_family" {
  type    = string
  description = "The family of the output VM image"
  default = "my-image-family"
}
variable "image_zone" {
  type    = string
  description = "The zone to build the image in"
  default = "us-central1-a"
}

source "googlecompute" "gce" {
  project_id          = var.project_id
  source_image_family = "ubuntu-2004-lts"
  source_image_project_ids = ["ubuntu-os-cloud"]
  zone                = var.image_zone
  ssh_username        = "packer"
  machine_type        = "e2-small"
  image_name          = "${var.image_name}-"
  image_family        = var.image_family
}

build {
  name    = "gce-vm-image"
  sources = ["sources.googlecompute.gce"]

  provisioner "shell" {
    inline = [
      "echo 'Provisioning image...'",
      "sudo apt-get update",
      "sudo apt-get install -y nginx"
    ]
  }
}

Menggunakan builder Packer

  1. Pastikan Anda memiliki template Packer (misalnya, packer.pkr.hcl) beserta kode sumber Anda.

  2. Di direktori root project Anda, buat file konfigurasi build bernama cloudbuild.yaml atau cloudbuild.json.

  3. Dalam file konfigurasi build, tambahkan langkah build untuk memanggil perintah packer build:

    YAML

    steps:
    - name: '[LOCATION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY]/packer'
      args:
      - build
      - -var
      - image_name=[IMAGE_NAME]
      - -var
      - project_id=[PROJECT_ID]
      - -var
      - image_family=[IMAGE_FAMILY]
      - -var
      - image_zone=[IMAGE_ZONE]
      - packer.pkr.hcl
    

    JSON

    {
      "steps": [
       {
          "name": "[LOCATION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY]/packer",
          "args": [
            "build",
            "-var",
            "image_name=[IMAGE_NAME]",
            "-var",
            "project_id=[PROJECT_ID]",
            "-var",
            "image_family=[IMAGE_FAMILY]",
            "-var",
            "image_zone=[IMAGE_ZONE]",
            "packer.pkr.hcl"
           ]
        }
       ]
    }
    

    Dengan:

    • [LOCATION] adalah region repositori Artifact Registry Anda.
    • [PROJECT_ID] adalah Google Cloud project ID Anda.
    • [REPOSITORY] adalah nama repositori Artifact Registry Anda.
    • [IMAGE_NAME] adalah nama image VM yang Anda buat.
    • [IMAGE_FAMILY] adalah kelompok image dari image VM.
    • [IMAGE_ZONE] adalah zona image.
  4. Mulai build menggunakan file konfigurasi build:

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

    Dengan:

    • [CONFIG_FILE_PATH] adalah jalur ke file konfigurasi build.
    • [SOURCE_DIRECTORY] adalah jalur atau URL ke kode sumber.
    • [REGION] adalah salah satu wilayah build yang didukung.

    Jika Anda tidak menentukan [CONFIG_FILE_PATH] dan [SOURCE_DIRECTORY] dalam perintah gcloud builds submit, Cloud Build mengasumsikan bahwa file konfigurasi dan kode sumber berada di direktori kerja saat ini.

Setelah image dibuat, Anda dapat melihatnya di halaman Image Compute Engine di konsol Google Cloud .

Langkah berikutnya