Copiar VM entre proyectos


En este documento, se describe cómo copiar tu VM a un proyecto diferente.

Antes de comenzar

  • Revisa las recomendaciones para instantáneas de discos persistentes y prepara el disco de arranque para las instantáneas.
  • Si aún no lo hiciste, configura la autenticación. 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 un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.
    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Set a default region and zone.

Funciones obligatorias

Para obtener los permisos que necesitas y poder copiar la VM entre proyectos, pídele a tu administrador que te otorgue el rol Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para copiar la VM entre proyectos. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para copiar la VM entre proyectos:

  • compute.instances.create en el proyecto
  • Si deseas usar una imagen personalizada para crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
  • Para usar una instantánea a fin de crear la VM, haz lo siguiente: compute.snapshots.useReadOnly en la instantánea
  • Si quieres usar una plantilla de instancias para crear la VM, sigue estos pasos: compute.instanceTemplates.useReadOnly en la plantilla de instancias
  • Para asignar una red heredada a la VM, ejecuta compute.networks.use en el proyecto.
  • Si deseas especificar una dirección IP estática para la VM: compute.addresses.use en el proyecto
  • Para asignar una dirección IP externa a la VM cuando se usa una red heredada, ejecuta compute.networks.useExternalIp en el proyecto
  • A fin de especificar una subred para tu VM: 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, compute.subnetworks.useExternalIp en el proyecto o en la subred elegida.
  • Para configurar los metadatos de la instancia de VM para la VM, compute.instances.setMetadata en el proyecto.
  • Para configurar etiquetas en la VM, haz lo siguiente: compute.instances.setTags en la VM
  • Para configurar etiquetas en la VM, haz lo siguiente: compute.instances.setLabels en la VM
  • A fin de configurar una cuenta de servicio para que la VM use: compute.instances.setServiceAccount en la VM
  • Crear un disco nuevo para la VM: compute.disks.create en el proyecto
  • Para conectar un disco existente en modo de solo lectura o de lectura y escritura, usa compute.disks.use en el disco.
  • Para conectar un disco existente en modo de solo lectura, haz lo siguiente: compute.disks.useReadOnly en el disco

También puedes obtener estos permisos con funciones personalizadas o con otras funciones predefinidas

Copia una VM a otro proyecto

  1. En tu proyecto de origen, crea una instantánea del disco de arranque de la VM mediante uno de los siguientes comandos:

    Disco de arranque zonal

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

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

    Reemplaza lo siguiente:

    • SNAPSHOT_NAME: Es un nombre para la instantánea.
    • SOURCE_DISK: El nombre del volumen de Persistent Disk zonal desde el que quieres crear una instantánea.
    • SNAPSHOT_TYPE: Es el tipo de instantánea, ya sea ESTÁNDAR o ARCHIVO. Si no se especifica un tipo de instantánea, se crea una instantánea ESTÁNDAR. Elige Instantánea de archivo para lograr una retención de datos más rentable.
    • SOURCE_DISK_ZONE: La zona del volumen de Persistent Disk zonal desde el que quieres crear una instantánea.

    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
    

    Reemplaza lo siguiente:

    • SNAPSHOT_NAME: Es un nombre para la instantánea.
    • SOURCE_DISK: Es el nombre del volumen regional de Persistent Disk desde el que deseas crear una instantánea.
    • SOURCE_DISK_REGION: Es la región del disco persistente regional desde el que quieres crear una instantánea.
    • SNAPSHOT_TYPE: Es el tipo de instantánea, ya sea ESTÁNDAR o ARCHIVO. Si no se especifica un tipo de instantánea, se crea una instantánea ESTÁNDAR.

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

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

    Reemplaza lo siguiente:

    • IMAGE_NAME: Es un nombre para la imagen nueva.
    • SOURCE_SNAPSHOT: Es la instantánea desde la que deseas crear la imagen.
    • LOCATION: Es una marca que te permite designar la región o multirregión en la que se almacena la imagen (opcional). Por ejemplo, especifica us para almacenar la imagen en la multirregión us o us-central1 a fin de almacenarla en la región us-central1. Si no realizas una selección, Compute Engine almacenará la imagen en la multirregión más cercana a la ubicación de origen de la imagen.
  3. Comparte la imagen personalizada con los usuarios que crean VM en el proyecto de destino (opcional). Para obtener más información sobre el uso compartido de imágenes personalizadas, consulta Comparte imágenes personalizadas dentro de una organización.

  4. En tu 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 IMAGE | --image-family IMAGE_FAMILY]
        --subnet SUBNET
    

    Reemplaza lo siguiente:

    • VM_NAME: Es el nombre de la VM
    • IMAGE_PROJECT: Es el nombre del proyecto que contiene la imagen.
    • IMAGE o IMAGE_FAMILY: Especifica una de las siguientes opciones:
      • IMAGE: Es el nombre de tu imagen personalizada.

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

      • IMAGE_FAMILY: Si creaste tus imágenes personalizadas como parte de una familia de imágenes personalizadas, especifica esa familia de imágenes.

        Esto crea la VM a partir de la versión de SO de la imagen de SO no obsoleta más reciente 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 última imagen de SO en tu familia de imágenes personalizadas my-debian-family.

    • 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 con el siguiente formato:

              projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
             

      Reemplaza lo siguiente:

      • HOST_PROJECT_ID es el ID del proyecto host de la VPC compartida
      • REGION es la región de la subred
      • SUBNET_NAME es 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.

¿Qué sigue?

  • Personaliza la red de VPC del proyecto de destino.