Packer è uno strumento open source per creare immagini di macchine virtuali (VM) identiche per più piattaforme da una singola configurazione di origine. Questa pagina spiega come utilizzare Packer e Cloud Build per creare un'immagine VM da utilizzare su Compute Engine.
Prima di iniziare
Le istruzioni riportate in questa pagina presuppongono che tu abbia familiarità con Packer. Inoltre:
- Tieni a portata di mano il codice sorgente, incluso il modello Packer.
- Avere un repository Docker in Artifact Registry o crearne uno nuovo.
- Se vuoi utilizzare i comandi
gcloudin questa pagina, installa Google Cloud CLI. Abilita le seguenti API:
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
Autorizzazioni IAM obbligatorie
Per utilizzare Packer con Cloud Build, concedi il ruolo Compute Engine Instance Admin (v1) (
roles/compute.instanceAdmin.v1) e il ruolo Service Account User (roles/iam.serviceAccountUser) al account di servizio di build.Per archiviare le immagini create in Artifact Registry, concedi il ruolo Writer Artifact Registry (
roles/artifactregistry.writer) al account di servizio di build.
Creazione di un'immagine del builder Packer
Cloud Build fornisce un'immagine del builder della community Packer che puoi utilizzare per richiamare i comandi packer in Cloud Build.
Prima di utilizzare questo builder in un file di configurazione di Cloud Build, devi creare l'immagine ed eseguirne il push su Artifact Registry:
Clona il repository cloud-builders-community:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.gitVai all'immagine del builder Packer:
cd cloud-builders-community/packerInvia il builder al tuo progetto:
gcloud builds submit . --config cloudbuild.yaml --substitutions=_AR_HOST=[LOCATION]-docker.pkg.dev,_AR_REPO=[REPOSITORY]Dove:
[LOCATION]è la regione del repository Artifact Registry.[REPOSITORY]è il nome del repository Artifact Registry.
Creazione di un modello Packer
Crea un nuovo file denominato packer.pkr.hcl e aggiungi la configurazione del modello.
L'esempio seguente mostra un modello Packer (packer.pkr.hcl) configurato per creare un'immagine VM di 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"
]
}
}
Utilizzo del builder Packer
Assicurati di avere il modello Packer (ad esempio
packer.pkr.hcl) insieme al codice sorgente.Nella directory root del progetto, crea un file di configurazione della build denominato
cloudbuild.yamlocloudbuild.json.Nel file di configurazione della build, aggiungi un passaggio di build per richiamare il comando
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.hclJSON
{ "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" ] } ] }Dove:
[LOCATION]è la regione del repository Artifact Registry.[PROJECT_ID]è l'ID progetto Google Cloud .[REPOSITORY]è il nome del repository Artifact Registry.[IMAGE_NAME]è il nome dell'immagine VM che stai creando.[IMAGE_FAMILY]è la famiglia di immagini dell'immagine VM.[IMAGE_ZONE]è la zona dell'immagine.
Avvia la build utilizzando il file di configurazione della build:
gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]Dove:
[CONFIG_FILE_PATH]è il percorso del file di configurazione della build.[SOURCE_DIRECTORY]è il percorso o l'URL del codice sorgente.[REGION]è una delle regioni di build supportate.
Se non specifichi
[CONFIG_FILE_PATH]e[SOURCE_DIRECTORY]nel comandogcloud builds submit, Cloud Build presuppone che il file di configurazione e il codice sorgente si trovino nella directory di lavoro corrente.
Una volta create le immagini, puoi visualizzarle nella pagina Immagine Compute Engine nella console Google Cloud .
Passaggi successivi
- Scopri come creare container.
- Scopri come creare progetti
Go. - Scopri come risolvere gli errori di build.