Crea imágenes de máquina

Usa una imagen de máquina para almacenar la configuración, los metadatos, los permisos y los datos de uno o más discos de una instancia de VM que se ejecuta en Compute Engine. La instancia de VM que usas para crear una imagen de máquina se denomina instancia de origen.

Para obtener información sobre cuándo y cómo usar las imágenes de máquina, consulta Imágenes de máquina.

En esta página, se abordan los pasos para crear una imagen de máquina a partir de una instancia de origen.

Antes de comenzar

Limitaciones y restricciones

Crea una imagen de máquina a partir de una instancia

Puedes crear imágenes de máquina mediante Google Cloud Console, la herramienta de línea de comandos de gcloud o la API de Compute Engine.

Para crear una imagen de máquina, necesitas la siguiente información:

  • Un nombre para la imagen de máquina que deseas crear
  • El nombre de la instancia de origen
  • La zona en la que se encuentra la instancia de origen
  • Una descripción opcional
  • Una storageLocation opcional. Si no especificas una ubicación, la ubicación de almacenamiento predeterminada es la ubicación de Cloud Storage multirregional de la instancia de origen
  • Una clave de encriptación opcional. Puedes elegir entre una clave administrada por Google, una clave de Cloud Key Management Service (Cloud KMS) o una clave de encriptación proporcionada por el cliente (CSEK). Si no se especifica una clave de encriptación, las imágenes de máquina se encriptarán mediante una clave administrada por Google
  • Si deseas usar una imagen de máquina para clonar y replicar instancias, quita la información del SO y de la app que sea exclusiva antes de generar la imagen de máquina a partir de una instancia. Por ejemplo, en instancias de VM de Windows, usa GCESysprep a fin de preparar el sistema para la replicación.

Console

  1. En Google Cloud Console, ve a la página Imágenes de máquina.

    Ir a la página Imágenes de máquina

  2. Haz clic en Crear imagen de máquina.
  3. Especifica un Nombre para tu imagen de máquina.
  4. Proporciona una Descripción (opcional).
  5. Selecciona la instancia de VM de origen.
  6. Especifica la ubicación en la que se almacenará la imagen de máquina (opcional). Elige entre almacenamiento multirregional o regional. Para obtener más información sobre la ubicación, consulta Ubicación de almacenamiento de imágenes de máquina.
  7. Selecciona un método de Encriptación (opcional).
  8. Haz clic en Crear.

gcloud

Usa el comando gcloud beta compute machine-images create para crear una imagen de máquina a partir de una instancia.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance SOURCE_INSTANCE_NAME

Reemplaza los siguientes elementos:

  • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que deseas crear.
  • SOURCE_INSTANCE_NAME: Es el nombre de la instancia de origen desde la que deseas crear la imagen.

Ejemplo

Por ejemplo, puedes usar el siguiente comando de gcloud para crear una imagen de máquina llamada my-machine-image desde una instancia de origen llamada my-instance:

gcloud beta compute machine-images create my-machine-image  \
    --source-instance my-instance

El proceso toma unos minutos. Cuando se crea la imagen de máquina, obtienes un resultado similar al siguiente:

Created [https://www.googleapis.com/compute/beta/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

API

En la API, realiza una solicitud POST para el método machineimages.insert. En el cuerpo de la solicitud, incluye la siguiente solicitud POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL"
}

Reemplaza los siguientes elementos:

  • PROJECT_ID: Es el ID del proyecto.
  • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que deseas crear.
  • SOURCE_INSTANCE_URL: Es la URL parcial o completa de la instancia de origen que deseas usar para crear la imagen de máquina. Por ejemplo, si tienes una instancia de origen llamada my-instance en un proyecto llamado myProject, las siguientes URL son válidas:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/instances/my-instance
    • projects/myProject/global/instances/my-instance
    • global/instances/my-instance

Crea una imagen de máquina a partir de un dispositivo virtual

Habilita la API de Cloud Build

En la mayoría de los casos, gcloud beta compute machine-images import intenta otorgar estos permisos a la cuenta de servicio de Cloud Build. Sin embargo, puedes otorgarlos de forma manual para asegurarte de que los permisos obligatorios estén en vigor.

Console

  1. Habilita la API de Cloud Build.

    Habilitar la API de Cloud Build

    Cuando habilitas la API de Cloud Build desde Console, Compute Engine le otorga las siguientes funciones a la cuenta de servicio de Cloud Build para que el servicio de Cloud Build pueda importar instancias a Compute Engine:

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    La herramienta de importación también usa la cuenta de servicio predeterminada de Compute Engine. De forma predeterminada, la cuenta de servicio de Compute Engine tiene la función de editor de proyecto de IAM. Si se quita esta función, es posible que el proceso de importación falle. Para volver a agregar la función a la cuenta de servicio, consulta la página sobre cómo otorgar acceso. Para obtener más información sobre la cuenta de servicio predeterminada de Compute Engine, consulta Cuenta de servicio predeterminada de Compute Engine.

gcloud

Para configurar el servicio Cloud Build mediante la herramienta de línea de comandos de gcloud, completa los siguientes pasos:

  1. Habilita Cloud Build.

    gcloud services enable cloudbuild.googleapis.com

    La herramienta de importación también usa la cuenta de servicio predeterminada de Compute Engine. De forma predeterminada, la cuenta de servicio de Compute Engine tiene la función de editor de proyecto de IAM. Si se quita esta función, es posible que el proceso de importación falle. Para volver a agregar la función a la cuenta de servicio, consulta la página sobre cómo otorgar acceso. Para obtener más información sobre la cuenta de servicio predeterminada de Compute Engine, consulta Cuenta de servicio predeterminada de Compute Engine.

  2. Agrega la función compute.admin a la cuenta de servicio para la API de Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. Agrega la función iam.serviceAccountUser a la cuenta de servicio para la API de Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. Agrega la función iam.serviceAccountTokenCreator a la cuenta de servicio para la API de Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    Reemplaza los siguientes elementos:

Requisitos

Crea una imagen de máquina a partir de un dispositivo virtual

Puedes crear imágenes de máquina a partir de los dispositivos virtuales mediante la herramienta de línea de comandos de gcloud o la API de Compute Engine.

gcloud

Usa el comando gcloud beta compute machine-images import para crear una imagen de máquina desde dispositivos virtuales.

gcloud beta compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:PATH_TO_VIRTUAL_APPLIANCE_FILE
    --os=OS

Reemplaza los siguientes elementos:

  • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que deseas crear.
  • PATH_TO_VIRTUAL_APPLIANCE_FILE: Es la ruta de acceso a tu archivo OVA o OVF en Cloud Storage.
  • OS: Es el sistema operativo del archivo OVA. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca.

Ejemplo

Por ejemplo, puedes usar el siguiente comando de gcloud para crear una imagen de máquina llamada my-machine-image desde un archivo OVA de origen llamado my-ova que se almacena en el directorio gs://my-bucket y ejecuta centos-7:

gcloud beta compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

API

  1. Sube el dispositivo virtual a Cloud Storage.

  2. En la API, crea una solicitud POST a la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout":"TIMEOUT",
     "steps":[
       {
         "args":[
           "-machine-image-name=MACHINE_IMAGE_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-client-id=api",
           "-timeout=TIMEOUT"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":"gce-ovf-machine-image-import"
    }
    

    Reemplaza los siguientes elementos:

    • PROJECT_ID: Es el ID del proyecto en el que deseas importar el archivo OVA.
    • TIMEOUT: Es el tiempo máximo que debería durar una compilación antes de que falle con un mensaje TIMEOUT. En la API, la hora debe especificarse en segundos. Un valor de tiempo de espera de 7200s debería funcionar en la mayoría de los casos.
    • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que se creará. Por ejemplo, my-machine-image.
    • SOURCE_URI: Es el URI para el archivo OVA o un directorio que contiene paquetes OVF que se almacena en Cloud Storage. Por ejemplo, gs://my-bucket/my-instance.ova.
    • OS: Es el sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca.

    Para obtener valores args adicionales que se puedan aprovisionar, consulta la sección de marcas opcionales en la página sobre importación de OVF de Compute Engine en GitHub.

Crea imágenes de máquina con anulaciones de OVF

CPU y memoria personalizadas

gcloud

A fin de anular la configuración de CPU o memoria especificada en el archivo OVF, sigue los pasos de la herramienta de línea de comandos de gcloud para crear una imagen de máquina desde un dispositivo virtual y especifica las marcas --custom-cpu y --custom-memory.

Ejemplo

Por ejemplo, si deseas crear una imagen de máquina llamada my-machine-image que tenga las siguientes anulaciones que se aplicaron a la configuración en el archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • CPU: 2 CPUs
  • Memoria: 2048 MB

Ejecuta el siguiente comando:

gcloud beta compute machine-images import my-machine-image \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

API

A fin de anular la configuración de CPU o memoria especificada en el archivo OVF, sigue los pasos de la API de Compute Engine para crear una imagen de máquina desde un dispositivo virtual y especifica el argumento -machine-type. Este -machine-type representa un tipo de máquina predefinido o personalizado para usar.

Ejemplo

Por ejemplo, si deseas crear una imagen de máquina llamada my-machine-image que tenga las siguientes anulaciones que se aplicaron a la configuración en el archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • CPU: 2 CPUs
  • Memoria: 2048 MB

Realiza la siguiente solicitud a la API de Compute Engine. Reemplaza PROJECT_ID por el ID del proyecto.

{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Redes personalizadas

gcloud

A fin de configurar una red personalizada, sigue los pasos de la herramienta de línea de comandos de gcloud para crear una imagen de máquina desde un dispositivo virtual y especifica una marca --network. Si la red está configurada con un modo de subred personalizado, también debes especificar las marcas --subnet y --zone.

Ejemplo

Por ejemplo, si deseas crear una imagen de máquina llamada my-machine-image que tenga las siguientes anulaciones que se aplicaron a la configuración en el archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • Red: custom-vpc-network
  • Subred: company-vpc-us-east1-c
  • Zona: us-east1-c

Ejecuta el siguiente comando:

gcloud beta compute machine-images import my-machine-image \
    --os ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

API

A fin de usar una red personalizada, sigue los pasos de la API de Compute Engine para crear una imagen de máquina desde un dispositivo virtual y especifica un argumento -network. Si la red está configurada con un modo de subred personalizado, también debes especificar los argumentos -subnet y -zone.

Ejemplo

Por ejemplo, si deseas crear una imagen de máquina llamada my-machine-image que tenga las siguientes anulaciones que se aplicaron a la configuración en el archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • Red: custom-vpc-network
  • Subred: company-vpc-us-east1-c
  • Zona: us-central1-c

Realiza la siguiente solicitud a la API de Compute Engine. Reemplaza PROJECT_ID por el ID del proyecto.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Próximos pasos