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


Después de crear una imagen de máquina, puedes usarla para hacer copias de la instancia de la VM de origen. 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 clonar 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 la consola de Google Cloud, Google Cloud CLI o REST.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Restricciones

Las siguientes restricciones se aplican cuando creas VMs a partir de imágenes de máquina:

  • Puedes crear, como máximo, 6 VMs a partir de una imagen de máquina de origen en 60 minutos. Si excedes este límite, la operación de creación de la instancia falla y se muestra un error similar al siguiente:

    Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'.
    Too frequent operations from the source resource.
    

    Para crear más VMs que el límite definido (6 VM en 60 minutos), crea imágenes de máquina adicionales a partir de la VM de origen o crea imágenes de máquina de corta duración de las VMs nuevas. Luego, puedes crear la cantidad necesaria de VMs a partir de las imágenes de máquina nuevas.

  • No puedes crear VMs a partir de imágenes de máquina con discos persistentes regionales conectados mediante la consola de Google Cloud. Usa Google Cloud CLI o REST y especifica los parámetros replicaZones y deviceName para cada disco persistente regional conectado. Para obtener más información, consulta Crea una VM a partir de una imagen de máquina con anulaciones de propiedad.

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 la consola de Google Cloud, ve a la página Crea 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. Haz clic en Crear.

gcloud

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

gcloud 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 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/v1/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

REST

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/v1/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 URLs 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 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.

Cuando uses la función de anulación, ten en cuenta los siguientes factores:

  • No puedes anular ninguna propiedad del disco conectado que no sea el nombre del disco mientras creas una VM a partir de la imagen de máquina.
  • Debes especificar el parámetro replicaZones para cada disco persistente regional conectado junto con el deviceName del disco regional de la imagen de máquina.

  • 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 la consola de Google Cloud, ve a la página Crea 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. Haz 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 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, detener la política de mantenimiento de host y configurar un disco persistente regional con el nombre regional-disk-0.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image \
    --machine-type=e2-standard-2 \
    --maintenance-policy=TERMINATE \
    --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \
    --create-disk=device-name=regional-disk-0,\
      replica-zones=^:^us-east1-b:us-east1-c,boot=false

REST

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/v1/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 URLs 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.

Por ejemplo, si deseas crear una VM a partir de una imagen de máquina y crear discos persistentes regionales con la VM, usa una anulación para los discos a fin de que puedas especificar la opción replicaZones. Debido a que el campo disks es uno repetido, debes especificar la configuración del disco para todos los discos conectados y el disco de arranque, no solo los discos regionales.

POST /compute/projects/my-proj/zones/us-west1-a/instances
{
  "name": "vm-from-image",
  "sourceMachineImage": "global/machineImages/my-machine-image",
  "disks": [
    {
      "kind": "compute#attachedDisks",
      "boot": true,
      "autoDelete": true,
      "deviceName": "boot-device",
      "initializeParams": {
        "sourceImage": "projects/my-proj/global/images/my-image",
        "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
      }
    },
    {
      "kind": "compute#attachedDisk",
      "boot": false,
      "autoDelete": true,
      "deviceName": "regional-device-0",
      "initializeParams": {
         "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
         "replicaZones": [
            "projects/my-proj/zones/us-west1-a",
            "projects/my-proj/zones/us-west1-c"
         ]
      }
    }
  ]
}

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

Cuando creas una VM a partir de una imagen de máquina de otro proyecto, es posible que no tengas acceso a la cuenta de servicio vinculada con ese proyecto de origen. 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.

Si compartes una imagen de máquina en proyectos que usan una red de VPC compartida, debes especificar de forma explícita los detalles de la VPC compartida cuando crees una VM a partir de la imagen de máquina. Por ejemplo, cuando creas una VM en un proyecto que no es host, proporciona los detalles de la VPC compartida del proyecto host mediante las opciones --network, --subnet o --network-interface.

En las siguientes secciones, se describe cómo crear una VM a partir de una imagen de máquina ubicada en un proyecto diferente mediante Google Cloud CLI.

  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. Usa el comando gcloud compute machine-images add-iam-policy-binding para otorgar los permisos en la imagen de máquina.

    gcloud 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, usa el siguiente comando de gcloud:

    gcloud 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. Otorga al usuario que ejecuta el comando gcloud compute instances create el rol de usuario de la cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio asociada con la imagen de máquina.

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

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

    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_IMAGE_PROJECT: 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 la cuenta de servicio que deseas conectar a tu VM.
    • SUBNET: Si la subred y la instancia están en el mismo proyecto, reemplaza SUBNET por el nombre de una subred que esté en la misma región que la instancia.

      Para especificar una subred en una red de VPC compartida, reemplaza SUBNET por una string en el siguiente formato:

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      

      Reemplaza lo siguiente:

      • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida.
      • REGION: Es la región de la subred.
      • SUBNET_NAME: El nombre de la subred

      Ejemplo

      Por ejemplo, con el siguiente comando, se crea una VM llamada my-instance en vm-project, en la zona us-east1-b, a partir de una imagen de máquina llamada my-machine-image.

      La marca --service-account especifica la cuenta de servicio que deseas conectar a la VM recién creada. Si no proporcionas esta marca, la cuenta de servicio de origen no se puede compartir en ambos proyectos y la operación falla.

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

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

      Created [https://www.googleapis.com/compute/v1/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
      

Próximos pasos