Packer es una herramienta de código abierto para crear imágenes de máquina virtual (VM) idénticas para varias plataformas desde una sola configuración de origen. En esta página, se explica cómo usar Packer y Cloud Build a fin de crear una imagen de VM para usar en Compute Engine.
Antes de comenzar
En las instrucciones de esta página, se da por hecho que estás familiarizado con Packer
. Además, ten en cuenta lo siguiente:
- Ten a mano el código fuente, incluida la plantilla de Packer.
- Si quieres usar los comandos de
gcloud
que se indican en esta página, instala el Google Cloud CLI. Habilita las siguientes APIs:
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
Permisos de IAM obligatorios
Para usar Packer con Cloud Build, otorga el permiso Compute Engine Rol de administrador de instancias (
roles/compute.instanceAdmin.v1
) a la cuenta de servicio de Build.Para almacenar imágenes compiladas en Artifact Registry, otorga el rol Escritor de Artifact Registry Rol (
roles/artifactregistry.writer
) a la cuenta de servicio de compilación.
Crea una imagen del compilador de Packer
Cloud Build proporciona un
Imagen del compilador de la comunidad de Packer
que puedes usar para invocar comandos packer
en Cloud Build.
Antes de usar este compilador en un archivo de configuración de Cloud Build, debes compilar la imagen y enviarla a Container Registry en el proyecto. Para esto, sigue los pasos que se indican a continuación:
Clona el repositorio cloud-builders-community:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Navega a la imagen del compilador de Packer:
cd cloud-builders-community/packer
Ejecuta el siguiente comando para enviar el compilador a tu proyecto:
gcloud builds submit .
Usa el compilador de Packer
Asegúrate de tener tu archivo packer.json junto con tu código fuente.
En el directorio raíz del proyecto, crea un archivo de configuración de compilación llamado
cloudbuild.yaml
ocloudbuild.json
.En este archivo, agrega un paso de compilación para invocar el comando
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" ] } ] }
Aquí:
[PROJECT_ID]
es tu ID del proyecto de Cloud.[IMAGE_NAME]
es el nombre de la imagen de VM que compilarás.[IMAGE_FAMILY]
es la familia de imágenes de la imagen de VM.[IMAGE_ZONE]
es la zona de la imagen.
Usa este comando para comenzar a compilar mediante el archivo de configuración de compilación:
gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
En el ejemplo anterior, se ilustra lo siguiente:
[CONFIG_FILE_PATH]
es la ruta de acceso al archivo de configuración de compilación.[SOURCE_DIRECTORY]
es la ruta o la URL del código fuente.[REGION]
es una de las regiones de compilación compatibles.
Si se no especifica
[CONFIG_FILE_PATH]
ni[SOURCE_DIRECTORY]
en el comandogcloud builds submit
, Cloud Build da por hecho que el archivo de configuración y el código fuente están en el directorio de trabajo actual.
Una vez que se compilen las imágenes, podrás verlas en la página de imágenes de Compute Engine en la consola de Google Cloud.
¿Qué sigue?
- Obtén más información sobre cómo compilar contenedores.
- Obtén más información sobre cómo compilar proyectos de
Go
. - Obtén más información para solucionar errores de compilación.