Crear instancias de Compute Engine 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 Compute de origen. Para obtener más información sobre los usos de las 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 modificar. Sin embargo, puedes anular casi todas las propiedades de la imagen de máquina al crear una instancia a partir de ella.

Puedes crear instancias a partir de imágenes de máquina con la Google Cloud consola, la CLI de Google Cloud o REST.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

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

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para crear instancias de Compute Engine a partir de imágenes de máquina, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de instancias de Compute (v. 1) (roles/compute.instanceAdmin.v1) en la instancia de Compute o en el proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Restricciones

Se aplican las siguientes restricciones al crear instancias a partir de imágenes de máquina:

  • Puedes crear un máximo de 6 instancias a partir de una imagen de máquina de origen en 60 minutos. Si superas este límite, la operación de creación de la instancia fallará y devolverá 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 instancias que el límite definido (6 instancias en 60 minutos), crea imágenes de máquina adicionales a partir de la instancia de origen o crea imágenes de máquina de corta duración a partir de las nuevas instancias. A continuación, puedes crear el número de instancias que necesites a partir de las nuevas imágenes de máquina.

  • No puedes crear instancias a partir de imágenes de máquina con discos regionales conectados mediante la consola Google Cloud . Usa Google Cloud CLI o REST y especifica los parámetros replicaZones y deviceName de cada disco regional conectado. Para obtener más información, consulta el artículo Crear una instancia a partir de una imagen de máquina con anulaciones de propiedades.

Crear una instancia a partir de una imagen de máquina (sin anulación)

Si quieres crear una instancia que se base completamente en la imagen de máquina sin cambiar las propiedades, usa este método.

Consola

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

    Ir a Crear una instancia

  2. En el menú Crear VM a partir de ..., selecciona Imágenes de máquina.

  3. En la ventana Crear VM a partir de imagen de máquina que aparece, haz lo siguiente:

    1. Selecciona una imagen de máquina.

    2. Para crear e iniciar la instancia, 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 INSTANCE_NAME \
    --zone=ZONE \
    --source-machine-image=SOURCE_MACHINE_IMAGE_NAME

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia
  • ZONE: la zona de la instancia
  • SOURCE_MACHINE_IMAGE_NAME: la imagen de máquina a partir de la que se creará la instancia

Ejemplo

Por ejemplo, puedes usar el siguiente comando gcloud para crear una instancia 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 creada la instancia, 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, crea una solicitud POST al 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": "INSTANCE_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto.
  • ZONE: la zona de la instancia.
  • INSTANCE_NAME: un nombre para la instancia.
  • SOURCE_MACHINE_IMAGE_URL: URL completa o parcial de la imagen de máquina que quiere 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

Crear una instancia a partir de una imagen de máquina con anulaciones de propiedades

Si quieres crear una instancia basada principalmente en la imagen de máquina, pero con algunos cambios, puedes usar el comportamiento de anulación. Para usar el comportamiento de anulación, debes transferir atributos para anular las propiedades de la imagen de máquina al crear la instancia.

Cuando uses la función de anulación, ten en cuenta lo siguiente:

  • Al crear una instancia a partir de una imagen de máquina, no puedes anular ninguna propiedad del disco conectado, excepto el nombre del disco.
  • Debe especificar el parámetro replicaZones de cada disco regional adjunto junto con el deviceName del disco regional de la imagen de máquina.

  • Si la instancia de origen (que se usa para generar la imagen de máquina) y la nueva instancia pertenecen al mismo proyecto y a la misma región, se aplican las siguientes condiciones:

    • La mayoría de las propiedades de la instancia de origen y de la nueva instancia son las mismas. Las propiedades que difieren son, por ejemplo, las direcciones IP efímeras que se asignan automáticamente.
    • Si la instancia de origen sigue existiendo cuando creas una instancia nueva, esta no podrá usar el mismo nombre ni la misma zona que la instancia de origen.
  • Si la instancia de origen que se ha usado para generar la imagen de máquina y la nueva instancia pertenecen al mismo proyecto, pero a regiones diferentes, se aplican las siguientes condiciones:

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

Consola

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

    Ir a Crear una instancia

  2. En el menú Crear VM a partir de ..., selecciona Imágenes de máquina.

  3. En la ventana Crear VM a partir de una imagen de máquina que aparece, selecciona una plantilla y, a continuación, haz clic en Personalizar.

  4. Opcional: Especifica otras opciones de configuración. Para obtener más información, consulta Opciones de configuración durante la creación de instancias.

  5. Para crear e iniciar la instancia, haz clic en Crear.

gcloud

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

Por ejemplo, puedes usar el siguiente comando gcloud para crear una máquina virtual llamada my-instance en la zona us-east1-b a partir de una imagen de máquina llamada my-machine-image. En este ejemplo, se aplican anulaciones para cambiar el tipo de máquina, detener la política de mantenimiento del 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 instancia, crea una solicitud POST al método instances.insert. En el cuerpo de la solicitud, incluya el parámetro sourceMachineImage y las anulaciones que necesite. Puede añadir cualquier propiedad que normalmente definiría durante la creación de instancias. Por ejemplo, para anular el tipo de máquina, tu llamada a la API incluiría el parámetro machineType.

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

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto.
  • ZONE: la zona de la instancia.
  • INSTANCE_NAME: un nombre para la instancia.
  • NEW_MACHINE_TYPE: el tipo de máquina que quieres usar en la instancia.
  • SOURCE_MACHINE_IMAGE_URL: URL completa o parcial de la imagen de máquina que quiere 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

Anular el comportamiento

El comportamiento de anulación en la API de Compute Engine sigue las reglas de la combinación de parches JSON, que se describen en el RFC 7396. En resumen, se aplican las siguientes reglas:

  • Si anulas un campo básico, el campo básico correspondiente de la imagen de máquina se sustituye por el valor del campo básico de 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 sustituirán por los valores correspondientes proporcionados en la solicitud. Los campos repetidos suelen ser propiedades de tipo list. Por ejemplo, disks y networkInterfaces son campos repetidos.
  • Si anulas un nested object, el objeto de la imagen de la máquina se combina con la especificación del objeto correspondiente en la solicitud. Ten en cuenta que, si un objeto anidado se encuentra en un campo repetido, el campo se trata según las reglas de los campos repetidos. Las etiquetas son una excepción a esta regla y se tratan como un campo repetido aunque sean de tipo object.

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

POST https://compute.googleapis.com/compute/v1/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"
         ]
      }
    }
  ]
}

Crear una instancia con una imagen de máquina de otro proyecto

Cuando creas una instancia con una imagen de máquina de otro proyecto, es posible que no tengas acceso a la cuenta de servicio vinculada a ese proyecto de origen. Si quieres crear una instancia a partir de una imagen de máquina que se encuentre en otro proyecto, debes asegurarte de que tienes acceso a la imagen de máquina y de anular la propiedad de la cuenta de servicio en la nueva instancia.

Si compartes una imagen de máquina entre proyectos que usan una red de VPC compartida, debes especificar explícitamente los detalles de la VPC compartida al crear una instancia a partir de la imagen de máquina. Por ejemplo, cuando creas una instancia en un proyecto que no es el host, proporciona los detalles de la VPC compartida del proyecto host mediante las marcas --network, --subnet o --network-interface.

En las siguientes secciones se explica cómo crear una instancia a partir de una imagen de máquina ubicada en otro proyecto mediante la CLI de Google Cloud.

  1. Concede acceso a la imagen de máquina almacenada en otro proyecto.

    Los permisos se pueden conceder en el proyecto de origen o en la imagen de máquina. Usa el comando gcloud compute machine-images add-iam-policy-binding para conceder los permisos en la imagen de la máquina.

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

    Haz los cambios siguientes:

    • MACHINE_IMAGE_PROJECT: ID del proyecto que contiene la imagen de máquina de origen.
    • MACHINE_IMAGE_NAME: el nombre de la imagen de máquina a la que quieres añadir la vinculación de permisos.
    • ACCOUNT_EMAIL: la dirección de correo del serviceAccount o user que está creando la instancia. Asegúrate de que el correo tenga el formato adecuado para incluir el prefijo obligatorio. El prefijo debe ser uno de los siguientes:

      • user: especifica este valor si la dirección de correo está asociada a una cuenta de usuario. Por ejemplo, user:user@example.com.
      • serviceAccount: especifica este valor si la dirección de correo está asociada a una cuenta de servicio. Por ejemplo, serviceAccount:123456789000-compute@developer.gserviceaccount.com.

    Ejemplo

    Por ejemplo, para añadir un enlace compute.admin a la imagen de máquina llamada my-machine-image a la dirección de correo de la cuenta de servicio 123456789000-compute@developer.gserviceaccount.com, usa el siguiente comando gcloud CLI:

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

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

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

    Haz los cambios siguientes:

    • INSTANCE_PROJECT_ID: el ID del proyecto en el que quieres crear la instancia
    • INSTANCE_NAME: nombre de la instancia
    • ZONE: la zona de la instancia
    • 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 que se creará la instancia
    • SERVICE_ACCOUNT_EMAIL: la dirección de correo de la cuenta de servicio que quieras adjuntar a tu instancia
    • SUBNET: si la subred y la instancia están en el mismo proyecto, sustituye SUBNET por el nombre de una subred que esté en la misma región que la instancia.

      Para especificar una subred en una red VPC compartida, sustituye SUBNET por una cadena con el siguiente formato:

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      

      Haz los cambios siguientes:

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

      Ejemplo

      Por ejemplo, el siguiente comando 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 quieres adjuntar a la máquina virtual recién creada. Si no proporcionas esta marca, la cuenta de servicio de origen no se podrá compartir entre ambos proyectos y la operación fallará.

      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 creada 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
      

Siguientes pasos