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.

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 aparecen en 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, la cuenta de servicio de Cloud Build requiere la función Administrador de instancias de Compute Engine. Para otorgar la función, haz lo siguiente:

  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 administrador de instancias de Compute Engine a la cuenta de servicio:

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/compute.instanceAdmin
    

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 tu archivo packer.json junto con tu 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"
           ]
        }
       ]
    }
    

    Aquí:

    • [PROJECT_ID] es tu ID del proyecto de Google 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 --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
    

    Aquí:

    • [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 no se 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 compiladas las imágenes, puedes verlas en la página de imágenes de Compute Engine en la consola de Google Cloud.

¿Qué sigue?