Packer ist ein Open Source-Tool zum Erstellen identischer VM-Images (virtuelle Maschine) für mehrere Plattformen aus einer einzelnen Quellkonfiguration. Auf dieser Seite wird erläutert, wie Sie mithilfe von Packer und Cloud Build ein VM-Image zur Verwendung in Compute Engine erstellen.
Hinweis
Die Anleitung auf dieser Seite setzt voraus, dass Sie mit Packer vertraut sind. Außerdem gilt:
- Halten Sie Ihren Quellcode bereit, einschließlich der Packer-Vorlage.
- Sie benötigen ein Docker-Repository in Artifact Registry oder müssen ein neues Repository erstellen.
- Wenn Sie die
gcloudBefehle auf dieser Seite verwenden möchten, installieren Sie die Google Cloud CLI. Aktivieren Sie folgende APIs:
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
Erforderliche IAM-Berechtigungen
Wenn Sie Packer mit Cloud Build verwenden möchten, weisen Sie Ihrem Build-Dienstkonto die Compute Engine Instanzadministrator (v1)-Rolle (
roles/compute.instanceAdmin.v1) und die Dienstkontonutzer-Rolle (roles/iam.serviceAccountUser) zu.Zum Speichern erstellter Images in Artifact Registry weisen Sie Ihrem Build-Dienstkonto die Rolle „Artifact Registry-Autor“ (
roles/artifactregistry.writer) zu.
Packer-Builder-Image erstellen
Cloud Build bietet ein
Builder-Image der Packer-Community
, mit dem Sie in Cloud Build packer Befehle aufrufen können.
Bevor Sie diesen Builder in einer Cloud Build-Konfigurationsdatei verwenden können, müssen Sie erst das Image erstellen und an Artifact Registry übertragen:
Klonen Sie das Repository cloud-builders-community:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.gitWechseln Sie zum Packer-Builder-Image:
cd cloud-builders-community/packerÜbertragen Sie den Builder in Ihr Projekt:
gcloud builds submit . --config cloudbuild.yaml --substitutions=_AR_HOST=[LOCATION]-docker.pkg.dev,_AR_REPO=[REPOSITORY]Wobei:
[LOCATION]ist die Region Ihres Artifact Registry-Repositorys.[REPOSITORY]ist der Name Ihres Artifact Registry-Repositorys.
Packer-Vorlage erstellen
Erstellen Sie eine neue Datei mit dem Namen packer.pkr.hcl und fügen Sie die Vorlagenkonfiguration hinzu.
Das folgende Beispiel zeigt eine Packer-Vorlage (packer.pkr.hcl), die zum Erstellen eines Compute Engine-VM-Images konfiguriert ist:
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"
]
}
}
Packer-Builder verwenden
Vergewissern Sie sich, dass Sie die Packer-Vorlage (z. B.
packer.pkr.hcl) zusammen mit Ihrem Quellcode haben.Erstellen Sie im Stammverzeichnis des Projekts eine Build-Konfigurationsdatei mit dem Namen
cloudbuild.yamlodercloudbuild.json.Fügen Sie der Build-Konfigurationsdatei einen Build-Schritt hinzu, um den Befehl
packer buildaufzurufen: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" ] } ] }Wobei:
[LOCATION]ist die Region Ihres Artifact Registry-Repositorys.[PROJECT_ID]ist Ihre Google Cloud Projekt-ID.[REPOSITORY]ist der Name Ihres Artifact Registry-Repositorys.[IMAGE_NAME]ist der Name des VM-Images, das Sie erstellen.[IMAGE_FAMILY]ist die Image-Familie des VM-Images.[IMAGE_ZONE]ist die Zone des Images.
Starten Sie den Build mithilfe der Build-Konfigurationsdatei:
gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]Dabei gilt:
[CONFIG_FILE_PATH]ist der Pfad zur Build-Konfigurationsdatei.[SOURCE_DIRECTORY]ist der Pfad oder die URL zum Quellcode.[REGION]ist eine der unterstützten Build-Regionen.
Wenn Sie in dem Befehl
gcloud builds submitkeine Werte für[CONFIG_FILE_PATH]und[SOURCE_DIRECTORY]angeben, geht Cloud Build davon aus, dass sich die Konfigurationsdatei und der Quellcode im aktuellen Arbeitsverzeichnis befinden.
Sobald die Images erstellt wurden, können Sie sich diese in der Compute Engine Image page in the Google Cloud Console anzeigen lassen.
Nächste Schritte
- Mehr zum Erstellen von Containern
- Mehr zum Erstellen von
Go-Projekten - Build-Fehler beheben