Crea instancias de VM a partir de imágenes de máquina

Después de crear una imagen de máquina, puedes usar esa imagen para crear una instancia de máquina virtual (VM). Para obtener más información sobre el uso de imágenes de máquina, consulta cuándo usar una imagen de máquina.

Una imagen de máquina contiene la mayor parte de la información y los datos necesarios para crear una instancia.

Una imagen de máquina no se puede cambiar. Sin embargo, puedes anular casi todas las propiedades de la imagen de máquina cuando creas una instancia a partir de la imagen de máquina.

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

Antes de comenzar

Crea una VM a partir de una imagen de máquina (sin anulación)

Si deseas crear una VM basada por completo en la imagen de máquina sin cambios en las propiedades, usa este método.

Console

  1. En Google Cloud Console, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. Haz clic en Nueva instancia de VM a partir de una imagen de máquina.

  3. Selecciona la imagen de máquina y haz clic en Continuar.

  4. Opcional: Personaliza los detalles de la VM.

  5. Haga clic en Crear.

gcloud

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

gcloud beta compute instances create VM_NAME \
    --zone ZONE \
    --source-machine-image SOURCE_MACHINE_IMAGE_NAME

Reemplaza lo siguiente:

  • VM_NAME: El nombre de la VM que se creará.
  • ZONE es la zona para la VM.
  • SOURCE_MACHINE_IMAGE_NAME es la imagen de máquina a partir de la cual se creará la VM.

Ejemplo

Por ejemplo, puedes usar el siguiente comando de gcloud para crear una VM llamada my-instance en la zona us-east1-b, a partir de una imagen de máquina llamada my-machine-image.

gcloud beta compute instances create my-instance \
    --zone us-east1-b \
    --source-machine-image my-machine-image

Una vez que se crea la VM, el resultado será similar al siguiente:

Created [https://www.googleapis.com/compute/beta/projects/project-12345/zones/us-east1-b/instances/my-instance].
NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING

API

En la API, realiza una solicitud POST para el método instances.insert. En el cuerpo de la solicitud, incluye los siguientes parámetros:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Reemplaza lo siguiente:

  • PROJECT_ID es el ID de tu proyecto.
  • ZONE: La zona para la VM.
  • VM_NAME: El nombre de la VM que se creará.
  • SOURCE_MACHINE_IMAGE_URL es la URL completa o parcial de la imagen de máquina que deseas usar para crear la VM. Por ejemplo, si tienes una imagen de máquina llamada my-machine-image en un proyecto llamado myProject. las siguientes URL son válidas:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Crea una VM mediante una imagen de máquina de un proyecto diferente

Si deseas crear una VM a partir de una imagen de máquina ubicada en otro proyecto, debes asegurarte de tener acceso a la imagen de máquina y anular la propiedad de la cuenta de servicio en la VM nueva. En las siguientes secciones, se describe cómo crear una VM a partir de una imagen de máquina ubicada en un proyecto diferente con la herramienta de línea de comandos de gcloud.

  1. Otorga acceso a las imágenes de máquina que se almacenan en un proyecto diferente.

    Los permisos se pueden otorgar en el proyecto de origen o en la imagen de máquina. Para otorgar los permisos en la imagen de máquina con la herramienta de línea de comandos de gcloud, ejecuta el siguiente comando:

    gcloud beta compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \
        --project=MACHINE_IMAGE_PROJECT \
        --member='ACCOUNT_EMAIL' \
        --role='roles/compute.admin'
    

    Reemplaza lo siguiente:

    • MACHINE_IMAGE_PROJECT: El ID del proyecto que contiene la imagen de la máquina de origen.
    • MACHINE_IMAGE_NAME: El nombre de la imagen de máquina a la que deseas agregar la vinculación del permiso.
    • ACCOUNT_EMAIL: La dirección de correo electrónico de serviceAccount o user que está crea la VM. Asegúrate de que el correo electrónico tenga un formato que incluya el prefijo obligatorio. El prefijo debe ser uno de los siguientes:

      • user:: Especifica esto si la dirección de correo electrónico está asociada con una cuenta de usuario. Por ejemplo, user:user@example.com.
      • serviceAccount:: Especifica esto si la dirección de correo electrónico está asociada con una cuenta de servicio. Por ejemplo, serviceAccount:123456789000-compute@developer.gserviceaccount.com

    Ejemplo

    Por ejemplo, para agregar una vinculación compute.admin a la imagen de la máquina llamada my-machine-image al correo electrónico de la cuenta de servicio 123456789000-compute@developer.gserviceaccount.com.

    gcloud beta compute machine-images add-iam-policy-binding my-machine-image \
        --project=machine-image-project \
        --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \
        --role='roles/compute.admin'
    
  2. Usa el comando gcloud beta compute instances create para crear una VM a partir de una imagen de máquina.

    gcloud beta compute instances create VM_NAME \
        --project=VM_PROJECT_ID \
        --zone ZONE \
        --source-machine-image projects/MACHINE_PROJECT_ID/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account SERVICE_ACCOUNT_EMAIL
    

    Reemplaza lo siguiente:

    • VM_PROJECT_ID: El ID del proyecto en el que deseas crear la VM.
    • VM_NAME: El nombre de la VM que se creará.
    • ZONE: La zona para la VM.
    • MACHINE_PROJECT_ID: El ID del proyecto en el que se encuentra la imagen de máquina.
    • MACHINE_IMAGE_NAME: La imagen de máquina a partir de la cual se creará la VM.
    • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de serviceAccount que creará la VM.

      Ejemplo

      Por ejemplo, para crear una VM llamada my-instance en la zona us-east1-b a partir de una imagen de máquina llamada my-machine-image, que se ubica en un proyecto llamado vm-project.

      La marca service-account especifica la cuenta de servicio para el proyecto de VM en el que deseas crear la imagen de máquina. Si no proporcionas esta marca, la cuenta de servicio de origen no se puede compartir en ambos proyectos y la operación falla.

      gcloud beta compute instances create my-instance \
       --project=vm-project \
       --zone us-east1-b \
       --source-machine-image projects/project-67890/global/machineImages/my-machine-image \
       --service-account 123456789000-compute@developer.gserviceaccount.com
      

      Una vez que se crea la VM, el resultado será similar al siguiente:

      Created [https://www.googleapis.com/compute/beta/projects/project-12345/zones/us-east1-b/instances/my-instance].
      NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
      my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING
      

Crea una VM a partir de una imagen de máquina (con anulaciones de propiedad)

Si deseas crear una VM basada en la imagen de la máquina, pero con algunos cambios, puedes usar el comportamiento de anulación. A fin de usar el comportamiento de anulación, debes pasar los atributos para anular las propiedades existentes de la imagen de máquina cuando creas la instancia.

Puedes anular la mayoría de las propiedades de la VM de la imagen de máquina. Cuando uses la función de anulación, ten en cuenta los siguientes factores:

  • Si la VM de origen utilizada para generar la imagen de máquina y la nueva VM pertenecen al mismo proyecto y a la misma región, se aplica lo siguiente:

    • La mayoría de las propiedades de la instancia de origen y la VM nueva son las mismas. Las propiedades que difieren son aquellas como las direcciones IP efímeras que se asignan automáticamente.
    • Si la instancia de VM de origen todavía existe cuando creas una VM nueva, la VM nueva no puede usar el mismo nombre ni la misma zona que la instancia de origen.
  • Si la VM de origen utilizada para generar la imagen de máquina y la VM nueva pertenecen al mismo proyecto, pero a regiones diferentes, se aplica lo siguiente:

    • Debes anular todos los recursos zonales y regionales para la VM nueva. Por ejemplo, si creas una instancia de VM a partir de una imagen de máquina cuya instancia de origen pertenecía a una región diferente, debes anular los recursos regionales como la subred y las reglas de firewall regionales. Sin embargo, los recursos globales, como los balanceadores de cargas y las cuentas de servicio, no necesitan una anulación, a menos que desees modificarlos.

Console

  1. En Google Cloud Console, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. Haz clic en Nueva instancia de VM a partir de una imagen de máquina.

  3. Selecciona la imagen de máquina y haz clic en Continuar.

  4. Opcional: Personaliza los detalles de la VM.

  5. Haga clic en Crear.

    Para obtener más detalles sobre la configuración, consulta Crea una instancia de VM a partir de una imagen.

gcloud

Usa el comando gcloud beta compute instances create para crear una instancia a partir de una imagen de máquina y agrega las propiedades que deseas anular.

Por ejemplo, puedes usar el siguiente comando de gcloud para crear una VM llamada my-instance en la zona us-east1-b, a partir de una imagen de máquina llamada my-machine-image. En este ejemplo, las anulaciones se aplican para cambiar el tipo de máquina y detener la política de mantenimiento.

gcloud beta compute instances create my-instance \
    --zone us-east1-b \
    --source-machine-image my-machine-image \
    --machine-type e2-standard-2 \
    --maintenance-policy TERMINATE

API

Para anular las propiedades de la imagen de máquina durante la creación de la VM, usa la API de instances.insert() y proporciona los campos que deseas anular en el cuerpo de la solicitud.

En la API, realiza una solicitud POST para el método instances.insert. En el cuerpo de la solicitud, incluye el parámetro sourceMachineImage y cualquier anulación que necesites. Puedes agregar cualquier propiedad que normalmente configurarías durante la creación de la instancia. Por ejemplo, para cambiar el tipo de máquina, la llamada a la API debe incluir el parámetro machineType.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto.
  • ZONE: La zona para la VM.
  • VM_NAME: El nombre de la VM que se creará.
  • NEW_MACHINE_TYPE: El tipo de máquina que deseas usar para la VM.
  • SOURCE_MACHINE_IMAGE_URL: La URL completa o parcial de la imagen de máquina que deseas usar para crear la instancia. Por ejemplo, si tienes una imagen de máquina llamada my-machine-image en un proyecto llamado myProject. Las siguientes URL son válidas:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Comportamiento de anulación

El comportamiento de anulación en la API sigue las reglas de parche de combinación JSON, como se describe en RFC 7396. En resumen, se aplican las siguientes reglas:

  • Si anulas un campo básico, el campo básico correspondiente en la imagen de máquina se reemplaza por el valor del campo básico en la solicitud. Los campos básicos incluyen parámetros como machineType y name.
  • Si anulas un campo repetido, todos los valores repetidos de esa propiedad se reemplazan por los valores correspondientes proporcionados en la solicitud. Por lo general, los campos repetidos son propiedades del tipo list. Por ejemplo, disks y networkInterfaces son campos repetidos.
  • Si anulas un nested object, el objeto en la imagen de máquina se combina con la especificación de objeto correspondiente en la solicitud. Ten en cuenta que, si un objeto anidado está dentro de un campo repetido, el campo se trata de acuerdo con las reglas para campos repetidos. Las etiquetas son una excepción a esta regla y se tratan como un campo repetido, aunque las etiquetas sean del tipo object.

Próximos pasos