Compila imágenes de VM con Packer

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. Si estás dando los primeros pasos en Cloud Build, lee primero las guías de inicio rápido y la descripción general de la configuración de compilación.

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 la herramienta de línea de comandos de gcloud.
  • Habilita las siguientes API:

    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, la cuenta de servicio de Cloud Build requiere la función de editor. Para otorgar la función de editor, sigue estos pasos:

  1. Busca la cuenta de servicio de Cloud Build de la siguiente manera:

    CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT --filter="(bindings.role:roles/cloudbuild.builds.builder)"  --flatten="bindings[].members" --format="value(bindings.members[])")
    
  2. Agrega la función de editor a la cuenta mediante el siguiente comando:

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/editor
    

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:

  1. Clona el repositorio cloud-builders-community:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Navega a la imagen del compilador de Packer:

    cd cloud-builders-community/packer
    
  3. Ejecuta el siguiente comando para enviar el compilador a tu proyecto:

    gcloud builds submit .
    

Usa el compilador de Packer

  1. Asegúrate de tener el archivo packer.json junto con el código fuente.

  2. En el directorio raíz del proyecto, crea un archivo de configuración de compilación llamado cloudbuild.yaml o cloudbuild.json.

  3. 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"
           ]
        }
       ]
    }
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • [PROJECT_ID] es el 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.
  4. Usa este comando para comenzar a compilar mediante el archivo de configuración de compilación:

    gcloud builds submit --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.

    Si se no especifica [CONFIG_FILE_PATH] ni [SOURCE_DIRECTORY] en el comando gcloud 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 Cloud Console.

¿Qué sigue?