En este documento se describe cómo copiar una VM en otro proyecto.
Antes de empezar
- Consulta las prácticas recomendadas para hacer capturas de discos persistentes y prepara tu disco de arranque para las capturas.
-
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:
-
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.
- Set a default region and zone.
-
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
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.
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 imagenSOURCE_SNAPSHOT
: la captura a partir de la que quieres crear la imagenLOCATION
: opcional, una marca que te permite designar la región o multirregión en la que se almacena tu imagen. Por ejemplo, especificaus
para almacenar la imagen en la multirregiónus
ous-central1
para almacenarla en la regiónus-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.
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.
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 VMIMAGE_PROJECT
: ID del proyecto Google Cloud que contiene la imagenIMAGE_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 personalizadasmy-debian-family
.
- Usa la marca
SUBNET
: si la subred y la instancia están en el mismo proyecto, sustituyeSUBNET
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 compartidaREGION
: la región de la subredSUBNET_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.