Copiar máquinas virtuales entre proyectos


En este documento se describe cómo copiar una VM en otro proyecto.

Antes de empezar

Roles obligatorios

Para obtener los permisos que necesitas para copiar una VM entre proyectos, 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 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.

Este rol predefinido contiene los permisos necesarios para copiar VMs entre proyectos. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para copiar una VM entre proyectos, se necesitan los siguientes permisos:

  • compute.instances.create del proyecto
  • Para usar una imagen personalizada para crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
  • Para usar una captura para crear la VM, sigue estos pasos: compute.snapshots.useReadOnly en la captura
  • Para usar una plantilla de instancia para crear la VM, haz lo siguiente: compute.instanceTemplates.useReadOnly en la plantilla de instancia
  • Para asignar una red antigua a la VM, sigue estos pasos: compute.networks.use en el proyecto
  • Para especificar una dirección IP estática para la máquina virtual, haz lo siguiente: compute.addresses.use en el proyecto
  • Para asignar una dirección IP externa a la VM cuando se usa una red antigua, haz lo siguiente: compute.networks.useExternalIp en el proyecto
  • Para especificar una subred para tu VM, haz lo siguiente: compute.subnetworks.use en el proyecto o en la subred elegida
  • Para asignar una dirección IP externa a la VM cuando se usa una red de VPC, sigue estos pasos: compute.subnetworks.useExternalIp en el proyecto o en la subred elegida
  • Para definir los metadatos de la instancia de VM: compute.instances.setMetadata en el proyecto
  • Para definir etiquetas en la VM, haz lo siguiente: compute.instances.setTags en la VM
  • Para definir etiquetas en la VM, sigue estos pasos: compute.instances.setLabels en la VM
  • Para definir una cuenta de servicio que pueda usar la VM, sigue estos pasos: compute.instances.setServiceAccount en la VM
  • Para crear un disco para la VM, sigue estos pasos: compute.disks.create en el proyecto
  • Para adjuntar un disco en modo de solo lectura o de lectura y escritura, sigue estos pasos: compute.disks.use en el disco
  • Para adjuntar un disco en modo de solo lectura, sigue estos pasos: compute.disks.useReadOnly en el disco

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Copiar una VM en otro proyecto

  1. En el proyecto de origen, crea una captura del disco de arranque de la VM con uno de los siguientes comandos:

    Disco de arranque de zona

    Si tu VM tiene un disco de arranque zonal, crea una captura con el siguiente comando:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --snapshot-type SNAPSHOT_TYPE \
        --source-disk-zone SOURCE_DISK_ZONE
    

    Haz los cambios siguientes:

    • SNAPSHOT_NAME: nombre de la captura.
    • SOURCE_DISK: nombre del volumen de Persistent Disk de zona del que quieres crear una captura.
    • SNAPSHOT_TYPE: el tipo de instantánea, STANDARD o ARCHIVE. Si no se especifica ningún tipo de captura, se crea una captura STANDARD. Elige Archivar para conservar los datos de forma más rentable.
    • SOURCE_DISK_ZONE: la zona del volumen de Persistent Disk zonal del que quieres crear una captura.

    Disco de arranque regional

    Si tu VM tiene un disco de arranque regional, crea una instantánea con el siguiente comando:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-region=SOURCE_DISK_REGION \
        --snapshot-type=SNAPSHOT_TYPE
    

    Haz los cambios siguientes:

    • SNAPSHOT_NAME: nombre de la captura.
    • SOURCE_DISK: nombre del volumen de Persistent Disk regional a partir del que quieres crear una captura.
    • SOURCE_DISK_REGION: la región del volumen de Persistent Disk regional del que quieres crear una captura.
    • SNAPSHOT_TYPE: el tipo de instantánea, STANDARD o ARCHIVE. Si no se especifica ningún tipo de captura, se crea una captura STANDARD.

  2. Crea una imagen personalizada a partir de la instantánea con el siguiente comando:

    gcloud compute images create IMAGE_NAME \
        --source-snapshot=SOURCE_SNAPSHOT \
        [--storage-location=LOCATION]
    

    Haz los cambios siguientes:

    • IMAGE_NAME: nombre de la nueva imagen
    • SOURCE_SNAPSHOT: la captura a partir de la que quieres crear la imagen
    • LOCATION: opcional, una marca que te permite designar la región o multirregión en la que se almacena tu imagen. Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 para almacenarla en la región us-central1. Si no haces ninguna selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.
  3. Opcional: Comparte la imagen personalizada con los usuarios que creen VMs en el proyecto de destino. Para obtener más información sobre cómo compartir imágenes personalizadas, consulta Compartir imágenes personalizadas en una organización.

  4. En el proyecto de destino, crea una VM a partir de la imagen personalizada con el siguiente comando:

    gcloud compute instances create VM_NAME \
        --image-project IMAGE_PROJECT \
        IMAGE_FLAG \
        --subnet SUBNET
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de la VM
    • IMAGE_PROJECT: ID del proyecto Google Cloud que contiene la imagen
    • IMAGE_FLAG: especifica una de las siguientes opciones:
      • Usa la marca --image IMAGE_NAME para especificar una imagen personalizada.

        Por ejemplo, --image my-debian-image-v2.

      • Si has creado tus imágenes personalizadas como parte de una familia de imágenes personalizadas, usa la marca --image-family IMAGE_FAMILY_NAME para especificar esa familia de imágenes personalizadas.

        De esta forma, se crea la VM a partir de la imagen y la versión del SO más recientes y no obsoletas de tu familia de imágenes personalizadas. Por ejemplo, si especificas --image-family my-debian-family, Compute Engine crea una VM a partir de la imagen de SO más reciente de tu familia de imágenes personalizadas my-debian-family.

    • 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 de 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

      La región de la subred de una red de VPC compartida también debe coincidir con la región que contiene la instancia.

Siguientes pasos

  • Personaliza la red de VPC del proyecto de destino.