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 deseas usar los comandos de
gcloud
de esta página, instala 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 rol de Administrador de instancias de Compute Engine (
roles/compute.instanceAdmin.v1
) a tu cuenta de servicio de compilación.Para almacenar imágenes compiladas en Artifact Registry, otorga el rol de escritor de Artifact Registry (
roles/artifactregistry.writer
) a la cuenta de servicio de compilación.
Crea una imagen del compilador de Packer
Cloud Build proporciona una imagen del compilador de la comunidad Packer que se usa para invocar comandos de 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 admitidas.
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 las imágenes estén compiladas, 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.