Cómo crear una imagen personalizada en GCP usando Packer


Aprende a crear una imagen personalizada en GCP con NGINX usando Packer. Automatiza la creación de servidores web con infraestructura como código

oscar Escrito por oscar 16 February 2026 6 0

Cómo crear una imagen personalizada en GCP con NGINX usando Packer (Guía paso a paso)

¿Qué es Packer?

Packer es una herramienta de HashiCorp que permite crear imágenes de máquina automatizadas para múltiples plataformas cloud usando código.

Cómo crear una imagen personalizada en GCP usando Packer

Cuando trabajamos en entornos cloud, instalar manualmente software en cada máquina virtual no es escalable ni reproducible. Aquí es donde entra la Infraestructura como Código (IaC).

En este tutorial aprenderás cómo usar Packer para crear una imagen personalizada en Google Cloud Platform.

El resultado será una imagen lista para desplegar servidores web de forma rápida, automatizada y repetible.

Si estás empezando en DevOps, cloud o automatización, este ejercicio es un excelente punto de partida.

Prerrequisitos

Debes tener:

Template de Packer explicado

Vamos a crear la siguiente estrctura de directorios y archivos:

packer-gcp/
│
├── main.pkr.hcl
├── packer.auto.pkrvars.hcl
└── variables.pkr.hcl

Procedemos a crear el archivo main.pkr.hcl, este define, en código, cómo Packer debe crear una imagen personalizada en GCP.

Es el template de construcción de Packer escrito en HCL (HashiCorp Configuration Language).

Ese archivo describe:

  1. Qué plugin usar
  2. En qué nube trabajar
  3. Qué imagen base tomar
  4. Qué configuración tendrá la VM temporal
  5. Qué software instalar
  6. Cómo se llamará la imagen final

Es, básicamente, la “receta” de la imagen.

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

source "googlecompute" "ubuntu" {
  project_id          = var.project_id
  zone                = var.zone
  credentials_file    = var.credentials_file
  machine_type        = "e2-micro"

  source_image_family = "ubuntu-2204-lts"
  ssh_username        = "packer"
  
  image_name          = "nginx-image-{{timestamp}}"
  image_family        = "nginx-family"

  disk_size           = 10
  disk_type           = "pd-standard"
}

build {
  sources = [
    "source.googlecompute.ubuntu"
  ]
}

Creamos las variables.pkr.hcl

Define variables externas.

Permite que el template:

variable "project_id" {
  type = string
}

variable "zone" {
  type    = string
  default = "us-central1-a"
}

variable "credentials_file" {
  type = string
}

Por ultimo creamos packer.auto.pkrvars.hcl para colocar el valor de las variables

project_id = "TU_PROJECT_ID"
credentials_file = "ruta/a/tu/credenciales.json"

Nota: Tambien puede colocar las credenciales de la siguiente forma cono variables de entorno:

Para Windows con PowerShell

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\keys\steadfast-sign-268019.json"

Para Linux

export GOOGLE_APPLICATION_CREDENTIALS="/home/USUARIO/keys\steadfast-sign-268019.json"

Construcción de la imagen

Procedemos a ejecutar

packer init .

Para que realice la instalación de los plugins necesarios:

Luego ejecutamos

packer validate .

Si los archivos hcl quedaron bien construidos, no nos debera de mostrar ningun error.

Por ultimo ejecutamos:

packer build .

Donde realizara la creacion de la imagen mostrando el siguiente log

PS C:\code\packer\packer-gcp> packer build .
learn-packer.googlecompute.ubuntu: output will be in this color.

==> learn-packer.googlecompute.ubuntu: Checking image does not exist...
==> learn-packer.googlecompute.ubuntu: Creating temporary RSA SSH key for instance...
==> learn-packer.googlecompute.ubuntu: no persistent disk to create
==> learn-packer.googlecompute.ubuntu: Using image: ubuntu-2204-jammy-v20260210
==> learn-packer.googlecompute.ubuntu: Creating instance...
==> learn-packer.googlecompute.ubuntu: Loading zone: us-central1-c
==> learn-packer.googlecompute.ubuntu: Loading machine type: e2-standard-2
==> learn-packer.googlecompute.ubuntu: Requesting instance creation...
==> learn-packer.googlecompute.ubuntu: Waiting for creation operation to complete...
==> learn-packer.googlecompute.ubuntu: Instance has been created!
==> learn-packer.googlecompute.ubuntu: Waiting for the instance to become running...
==> learn-packer.googlecompute.ubuntu: IP: 136.105.223.0
==> learn-packer.googlecompute.ubuntu: Using SSH communicator to connect: 136.105.223.0
==> learn-packer.googlecompute.ubuntu: Waiting for SSH to become available...
==> learn-packer.googlecompute.ubuntu: Connected to SSH!
==> learn-packer.googlecompute.ubuntu: Deleting instance...
==> learn-packer.googlecompute.ubuntu: Instance has been deleted!
==> learn-packer.googlecompute.ubuntu: Creating image...
==> learn-packer.googlecompute.ubuntu: Deleting disk...
==> learn-packer.googlecompute.ubuntu: Disk has been deleted!
Build 'learn-packer.googlecompute.ubuntu' finished after 2 minutes 29 seconds.

==> Wait completed after 2 minutes 29 seconds

==> Builds finished. The artifacts of successful builds are:
--> learn-packer.googlecompute.ubuntu: A disk image was created in the 'steadfast-sign-268019' project: ubuntu-2204-packer-1771262250
PS C:\code\packer\packer-gcp>

Al verificar en la consola de GCP en el listado de instancias, podemos ver que se esta creando la maquina virtual que usara packer para generar la imagen.

Instancias VM para crear imagen
Instancias VM para crear imagen

Cómo probar la imagen

Listado de imagenes

Para verificar la imagen vamos a ingresar a Compute Engine en la seccion de imagenes, donde veremos el listado de todas las imagenes.

Al buscar podemos ver la imagen que acabamos de crear desde packer:

Listado de imágenes de GCP
Listado de imágenes de GCP

Al dar click sobre el el nombre de la imagen podemos acceder al detalle de la misma

Detalle de imagen creada en packer
Detalle de imagen creada en packer

Crear una maquina virtual con la imagen

Nota: Puede segur los pasos en Crear una máquina virtual (VM) en (GCP) donde explicamos a detalle.

Cuando estamos en el paso se de seccionar el Sistema operativo y almacenamiento vamos a cambiar el disco de arranque donde buscamos la pestaña de imágenes personalizadas, en el selector de imagenes buscamos la imagen creada con packer como se muestra a continuación.

Seleccionar imagen creada con packer
Seleccionar imagen creada con packer

Con esto ya podemos segur con el proceso de crear la instancia con una imagen personalizada.


Comentario

Debe aceptar antes de enviar