Importar discos virtuales


Si tienes discos virtuales en tu entorno local con el software y las opciones de configuración que necesitas (a veces llamados discos dorados o imágenes doradas), puedes ahorrar tiempo si los importas en Compute Engine y usas la imagen resultante para crear máquinas virtuales. La herramienta de importación admite la mayoría de los formatos de archivo de discos virtuales, incluidos VMDK y VHD.

Si exportaste tu disco desde Compute Engine, puedes crear imágenes desde el disco.

A fin de obtener información sobre cómo crear un sistema automatizado para migrar varias máquinas virtuales (VM), consulta Migra VM a Compute Engine.

Antes de comenzar

  • Si hay una política de imágenes confiables definida para el proyecto en el que importas la imagen, agrega projects/compute-image-import y projects/compute-image-tools a la lista de publicadores permitidos.
  • Para obtener información sobre cómo cumplir con los requisitos antes de importar imágenes, consulta Requisitos previos para importar y exportar imágenes de VM.
  • 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 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.

Sistemas operativos compatibles

Puedes importar discos que se pueden iniciar y discos que no se pueden iniciar. Para que los discos virtuales se puedan iniciar en Compute Engine, deben ejecutar uno de los sistemas operativos compatibles.

Compatibilidad con BYOL y BYOS

Si prefieres usar tu propia licencia de software o suscripción a este, puedes importar tus discos virtuales con sus licencias. Para obtener información sobre los sistemas operativos compatibles con BYOL o BYOS, consulta Detalles de los sistemas operativos.

Puedes importar imágenes con licencias existentes mediante el comando gcloud compute instances import con la marca --byol.

Limitaciones

Esta función tiene las siguientes limitaciones generales:

Esta función tiene las siguientes limitaciones en Linux:

  • Los discos virtuales de Linux deben usar grub como el bootloader.

  • Los discos virtuales de Linux deben cumplir con los mismos requisitos que las imágenes personalizadas, incluida la compatibilidad con dispositivos del controlador de almacenamiento Virtio-SCSI.

Esta función tiene las siguientes limitaciones en Windows:

  • Cuando un software de la lista de anunciantes permitidos de aplicaciones, como CB Protection de Carbon Black, se instala en discos virtuales de Windows, el proceso de importación puede fallar. Es posible que debas desinstalar el software antes de la importación.

  • En las VM basadas en Windows, Microsoft KM-TEST Loopback Adapter evita el acceso a la red para el servidor de metadatos y debes inhabilitarlo o quitarlo antes de la importación.

Permisos

Para habilitar una experiencia sin interrupciones cuando importas imágenes, asegúrate de haber otorgado las funciones de IAM necesarias a tu cuenta, a la cuenta de servicio de Cloud Build, y a la cuenta de servicio de Compute Engine. Para obtener más información, consulta Otorga funciones de IAM necesarias.

Comprueba la compatibilidad

Antes de intentar importar el disco para tu VM, descarga y ejecuta la herramienta de verificación previa dentro de la VM. Esta herramienta busca problemas de compatibilidad que puedan provocar que el proceso de importación falle o que el disco no funcione de forma adecuada en Compute Engine.

Importar discos virtuales

Puedes importar tus discos virtuales mediante la consola de Google Cloud, Google Cloud CLI o la API de Cloud Build.

Importa un disco de inicio virtual

En los discos que se pueden iniciar no es necesario especificar el sistema operativo, ya que la herramienta de importación detecta de forma automática el sistema operativo para determinar qué controladores y paquetes son obligatorios. Sin embargo, si necesitas anular el sistema operativo detectado, puedes especificar la marca --os o el parámetro -os. Para obtener una lista de los valores admitidos, consulta marca --os.

Console

  1. En la consola de Google Cloud, sube el archivo de disco virtual a Cloud Storage.
  2. Ve a la página Crear una imagen.

    Ir a la página Crear una imagen

  3. Especifica un Nombre para tu imagen.

  4. En Fuente, selecciona Disco virtual (VMDK, VHD).

  5. Selecciona la cuenta de servicio de Cloud Build. Puedes usar la cuenta de servicio predeterminada o selecciona una personalizada.

    • Si seleccionas una cuenta de servicio que no tiene suficientes permisos para importar una imagen, verás un mensaje con la opción de otorgarle los permisos necesarios. Haz clic en Otorgar para proporcionarle a la cuenta de servicio los permisos necesarios.
  6. Ingresa la Ubicación del registro. Si la cuenta de servicio que seleccionaste es una de Cloud Build, no necesitas proporcionar la ubicación del registro. Para todas las demás cuentas de servicio (incluida la cuenta de servicio predeterminada de Compute Engine), debes proporcionar la ubicación del registro.

  7. Busca o ingresa de forma manual la ubicación de almacenamiento del archivo de Cloud Storage.

  8. Selecciona el sistema operativo que está disponible en el disco importado. También puedes realizar los siguientes cambios:

    • Puedes elegir Instalar paquetes de invitado. Google recomienda que instales el entorno invitado. Para obtener más información sobre el entorno invitado, consulta Entorno invitado.

    • Para los sistemas operativos Windows o Red Hat Enterprise Linux (RHEL), puedes elegir una opción de licencia. Puedes permitir que Compute Engine proporcione una licencia o usar tu propia licencia. Para obtener más información sobre cómo usar una licencia adquirida por el usuario en Windows, consulta Licencia adquirida por el usuario.

  9. Especifica propiedades adicionales para tu imagen (opcional). Por ejemplo, puedes organizar esta imagen como parte de una familia de imágenes.

  10. Haz clic en Crear para importar la imagen.

gcloud

Usa el comando gcloud compute images import para crear una imagen de Compute Engine que se pueda iniciar. Aunque Compute Engine puede iniciar la mayoría de las imágenes de disco de arranque, el comando import asegura que el disco tenga los controladores necesarios y los últimos paquetes de entorno invitado, que son necesarios para iniciar una instancia y conectarse a ella mediante SSH o RDP.

Puedes importar archivos de discos virtuales desde un bucket de Cloud Storage o desde tu estación de trabajo local.

Si importas el archivo de disco virtual desde tu estación de trabajo, la herramienta de importación sube el archivo a un bucket de Cloud Storage de forma automática.

Si lo prefieres, puedes subir el archivo del disco virtual a Cloud Storage tú mismo antes de comenzar con el proceso de importación. Sin embargo, debes subir el archivo a un bucket de Cloud Storage en el mismo proyecto que se usará para el proceso de importación.

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE

Reemplaza lo siguiente:

  • IMAGE_NAME: El nombre de la imagen de destino.
  • SOURCE_FILE: El archivo del disco virtual. Este archivo puede ser un archivo local o un archivo almacenado en Cloud Storage. Si tu disco virtual es un archivo local, puedes proporcionar una ruta absoluta o relativa. Si el archivo del disco virtual ya se almacenó en Cloud Storage, debe existir en un bucket de Cloud Storage en el proyecto que se usa para el proceso de importación. Además, debes especificar la ruta de acceso completa en el formato gs://BUCKET_NAME/OBJECT_NAME.

Si importas una imagen con una licencia existente, especifica la marca --byol de la siguiente manera:

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE --byol

Si deseas obtener instrucciones para importar imágenes con licencias existentes a Google Cloud, consulta Licencias adquiridas por el usuario.

Si especificas un archivo local, la operación de carga puede tomar mucho tiempo en función del tamaño del disco virtual y la velocidad de la conexión de red. La importación puede tardar varios minutos en ejecutarse en función del tamaño del disco.

Ejemplo

En el siguiente ejemplo, se importa un disco virtual llamado my_server.vmdk y almacenado en gs://your_gcs_bucket.

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_server.vmdk

Parámetros opcionales

De forma predeterminada, se agregan paquetes de entorno invitado a todas las imágenes de disco de arranque importadas. Si no deseas estos paquetes, agrega la marca --no-guest-environment a tu comando de importación.

REST

  1. Agrega el disco virtual a Cloud Storage.

  2. Envía una solicitud POST a la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-import/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto en el que deseas importar la imagen.
    • IMAGE_NAME: Es el nombre de la imagen que se importará.
    • SOURCE_FILE: Es el URI de la imagen en Cloud Storage, por ejemplo, gs://my-bucket/my-image.vmdk

    Para obtener valores args adicionales que se puedan proporcionar, consulta la sección de marcas opcionales de la página sobre importación de imágenes de VM en GitHub.

    Respuesta de ejemplo

    El resultado muestra una respuesta similar al siguiente ejemplo:

    {
     "name": "operations/build/myproject-12345/operation-1578608233418",
     "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
       "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
       "status": "QUEUED",
       "createTime": "2019-09-20T15:55:29.353258929Z",
       "steps": [
        {
         "name": "gcr.io/compute-image-import/gce_vm_image_import:release",
         "env": [
          "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
         ],
         "args": [
          "-timeout=7000s",
          "-image_name=my-image",
          "-client_id=api",
          "-data-disk",
          "-source_file=gs://my-bucket/my-image.vmdk"
         ]
        }
       ],
       "timeout": "7200s",
       "projectId": "myproject-12345",
       "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com",
       "options": {
        "logging": "LEGACY"
       },
       "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456"
      }
    }
    

    Puedes supervisar tu compilación de las siguientes dos maneras:

    • Ejecuta una solicitud projects.builds.get mediante el build-id que se mostró.
    • Revisa los registros alojados en la logUrl proporcionada.

Importa y agrega una licencia a un disco virtual

Para agregar una licencia cuando importas una imagen, usa el siguiente comando gcloud compute images import.

gcloud compute images import IMAGE_NAME \
  --source-file=SOURCE_FILE
  --os=OS

Reemplaza lo siguiente:

  • IMAGE_NAME: Es el nombre de la imagen que se creará.
  • SOURCE_FILE: Es un archivo local o un URI de Cloud Storage del disco virtual que se importará.
  • OS: Es el SO de la imagen de disco que se importará. La licencia para el SO se infiere del valor de esta marca. No hay una marca explícita para proporcionar información de licencia cuando se importa. Para obtener una lista de los valores admitidos, consulta Marca --os.

Para obtener más información sobre cómo ver y adjuntar licencias, consulta Visualiza y agrega licencias.

Importa un disco virtual que no se pueda iniciar

Console

  1. En la consola de Google Cloud, sube el archivo de disco virtual a Cloud Storage.
  2. Ve a la página Crear una imagen.

    Ir a la página Crear una imagen

  3. Especifica un Nombre para tu imagen.

  4. En Fuente, selecciona Disco virtual (VMDK, VHD, y demás).

  5. Busca o ingresa de forma manual la ubicación de almacenamiento del archivo de Cloud Storage.

  6. En sistema operativo, selecciona No hay sistema operativo. Solo datos.

  7. Especifica propiedades adicionales para tu imagen (opcional). Por ejemplo, puedes organizar esta imagen como parte de una familia de imágenes.

  8. Haz clic en Crear para importar la imagen.

gcloud

Puedes usar el comando gcloud compute images import para crear una imagen de Compute Engine que no se pueda iniciar. Si el disco virtual no contiene un sistema operativo instalado que se pueda iniciar, especifica la marca --data-disk. De esta forma, se omite el paso de instalación de controladores y paquetes de entorno invitado que hacen que la imagen se pueda iniciar en Compute Engine.

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE \
    --data-disk

Reemplaza lo siguiente:

  • IMAGE_NAME: El nombre de la imagen de destino.
  • SOURCE_FILE: El archivo del disco virtual. Este archivo puede ser un archivo local o un archivo almacenado en Cloud Storage. Si tu archivo de disco virtual es local, puedes usar una ruta de acceso absoluta o relativa. Si el archivo del disco virtual ya se almacenó en Cloud Storage, debe existir en un bucket de Cloud Storage en el proyecto que se usa para el proceso de importación. Además, debes especificar la ruta de acceso completa en el formato gs://BUCKET_NAME/OBJECT_NAME.

Ejemplo 1: Importa un disco virtual que no se pueda iniciar desde Cloud Storage

En el siguiente ejemplo, se importa un disco virtual llamado my_disk.vmdk, almacenado en gs://your_gcs_bucket.

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_disk.vmdk
    --data-disk

Ejemplo 2: Importa un archivo VMDK grande mediante la especificación del valor de tiempo de espera

El valor de tiempo de espera predeterminado para el proceso de importación es de dos horas. Los archivos VMDK grandes pueden tardar hasta 24 horas en importarse. Si no especificas la marca --timeout cuando importas archivos grandes, el proceso falla después de dos horas.

En el siguiente ejemplo, se importa un disco virtual llamado my_disk.vmdk y almacenado en gs://your_gcs_bucket. El valor de tiempo de espera para esta importación es de 24 horas.

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_disk.vmdk
    --data-disk --timeout=24h

REST

  1. Agrega el disco virtual a Cloud Storage.

  2. Envía una solicitud POST a la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "steps":[
        {
          "args":[
            "-image_name=IMAGE_NAME",
            "-source_file=SOURCE_FILE",
            "-timeout=7000s",
            "-client_id=api",
            "-data_disk"
          ],
          "name":"gcr.io/compute-image-import/gce_vm_image_import:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "timeout":"7200s",
      "tags":[
        "gce-daisy",
        "gce-daisy-image-import"
      ]
    }
    

    Reemplaza los siguientes valores args:

    • PROJECT_ID: Es el ID del proyecto en el que deseas importar la imagen.
    • IMAGE_NAME: Es el nombre de la imagen que se importará.
    • SOURCE_FILE: Es el URI de la imagen en Cloud Storage, por ejemplo, gs://my-bucket/my-image.vmdk

Importa discos mediante redes que no permiten direcciones IP externas

Para importar discos virtuales mediante una red que no permite direcciones IP externas, completa los siguientes pasos:

  1. Agrega el disco virtual a Cloud Storage.

  2. El proceso de importación de imágenes requiere que los administradores de paquetes se instalen en el sistema operativo del disco virtual. Es posible que estos administradores de paquetes deban realizar solicitudes a repositorios de paquetes que se encuentran fuera de Google Cloud. A fin de permitir el acceso a estas actualizaciones, debes configurar Cloud NAT. Para obtener más información, consulta Crea una configuración de NAT con Cloud Router.

  3. Configura el Acceso privado a Google. Para obtener más información, consulta Configura el acceso privado a los servicios.

  4. Importa el disco virtual mediante Google Cloud CLI o REST.

    Cuando importas un disco virtual, se crean VM temporales en tu proyecto. Para asegurarte de que no se les asignen direcciones IP externas a estas VM temporales, debes especificar una marca o argumento adicional.

    Para obtener más información, haz clic en las siguientes pestañas:

gcloud

Usa el comando gcloud compute images import con la marca --no-address para importar el disco virtual.

gcloud compute images import IMAGE_NAME \
    --source-file=SOURCE_FILE \
    --zone=ZONE \
    --no-address

Reemplaza lo siguiente:

  • IMAGE_NAME: El nombre de la imagen de disco que deseas crear.
  • SOURCE_FILE: El archivo del disco virtual. Puede ser un archivo local o un archivo almacenado en Cloud Storage. Si tu disco virtual es un archivo local, puedes proporcionar una ruta absoluta o relativa. Si el archivo del disco virtual ya se almacenó en Cloud Storage, debe existir en un bucket de Cloud Storage en el proyecto que se usa para el proceso de importación. Además, debes especificar la ruta de acceso completa en el formato gs://BUCKET_NAME/OBJECT_NAME.
  • ZONE: Es la zona en la que se creará la instancia. Si se deja en blanco, se usa la zona predeterminada del proyecto

REST

Envía una solicitud POST a la API de Cloud Build y especifica el argumento -no-external-ip.

 POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
 {
   "steps":[
     {
       "args":[
         "-image_name=IMAGE_NAME",
         "-source_file=SOURCE_FILE",
         "-zone=ZONE",
         "-no_external_ip",
         "-timeout=7000s",
         "-client_id=api"
       ],
       "name":"gcr.io/compute-image-import/gce_vm_image_import:release",
       "env":[
         "BUILD_ID=$BUILD_ID"
       ]
     }
   ],
   "timeout":"7200s",
   "tags":[
     "gce-daisy",
     "gce-daisy-image-import"
   ]
 }
 

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto en el que deseas importar la imagen.
  • IMAGE_NAME: Es el nombre de la imagen que se importará.
  • SOURCE_FILE: Es el URI de la imagen en Cloud Storage. Por ejemplo, gs://my-bucket/my-image.vmdk para el comando gcloud compute images import.
  • ZONE: Es la zona en la que se creará la instancia. Si se deja en blanco, se usa la zona predeterminada del proyecto

Importa un disco virtual con un bootloader de UEFI

En la mayoría de los discos virtuales, Compute Engine puede detectar y, luego, importar discos de forma correcta mediante un bootloader de UEFI sin necesidad de una marca adicional.

Sin embargo, para situaciones como las siguientes, es posible que debas forzar un inicio UEFI durante la importación.

  • Si el proceso de importación de imágenes no detecta el bootloader de UEFI durante la importación.
  • Si el disco se puede iniciar en doble lugar y tiene una combinación de: hybrid-mbr + UEFI o protective-mbr + UEFI. Para los discos que se pueden iniciar de forma dual, la importación podría permitir el inicio no perteneciente a la UEFI.

gcloud

Puedes usar el comando gcloud compute images import para forzar una importación a fin de usar el inicio de UEFI.

gcloud compute images import IMAGE_NAME \
    --source-file=SOURCE_FILE \
    --guest-os-features=UEFI_COMPATIBLE

Reemplaza lo siguiente:

  • IMAGE_NAME: Es el nombre de la imagen que se importará.
  • SOURCE_FILE: Es el URI de la imagen en Cloud Storage, por ejemplo, gs://my-bucket/my-image.vmdk

Ejemplo

En el siguiente ejemplo, se importa un disco virtual llamado my-disk.vmdk, almacenado en gs://my-gcs-bucket/, y se obliga a usar el inicio de UEFI.

gcloud compute images import my-imported-image \
    --source-file gs://my-gcs-bucket/my-disk.vmdk \
    --guest-os-features=UEFI_COMPATIBLE

REST

Para forzar una importación a fin de que use el arranque UEFI, puedes usar la API de Cloud Build y especificar el argumento -uefi_compatible. Para hacerlo, sigue los pasos que se indican a continuación:

  1. Agrega el dispositivo virtual a Cloud Storage.

  2. Envía una solicitud POST a la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-uefi_compatible",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-import/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto en el que deseas importar la imagen.
    • IMAGE_NAME: Es el nombre de la imagen que se importará.
    • SOURCE_FILE: Es el URI de la imagen en Cloud Storage, por ejemplo, gs://my-bucket/my-image.vmdk

Importa un disco virtual mediante una VPC compartida

Antes de importar un disco virtual que usa una VPC compartida, debes agregar la función compute.networkUser a la cuenta de servicio de Cloud Build. Para obtener más información, consulta Otorga funciones necesarias a la cuenta de servicio de Cloud Build.

gcloud

Usa el comando gcloud compute images import para importar el disco virtual.

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE \
    --project SERVICE_PROJECT_ID \
    --zone ZONE \
    --network NETWORK \
    --subnet SUBNET

Reemplaza lo siguiente:

  • IMAGE_NAME: El nombre de la imagen que se importará.
  • SOURCE_FILE: El archivo del disco virtual. Puede ser un archivo local o un archivo almacenado en Cloud Storage. Si tu disco virtual es un archivo local, puedes proporcionar una ruta absoluta o relativa. Si el archivo del disco virtual ya se almacenó en Cloud Storage, debe existir en un bucket de Cloud Storage en el proyecto que se usa para el proceso de importación. Además, debes especificar la ruta de acceso completa en el formato gs://BUCKET_NAME/OBJECT_NAME.
  • SERVICE_PROJECT_ID: El ID del proyecto en el que deseas importar la imagen.
  • ZONE: La zona a la que deseas importar la imagen. Esta zona debe coincidir con la región de la subred. Por ejemplo, si SUBNET es us-west1. La zona de importación debe ser una de las siguientes: us-west1-a, us-west1-b o us-west1-c.
  • NETWORK: La ruta de acceso completa a una red de VPC compartida. Por ejemplo, projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME.
  • SUBNET: La ruta de acceso completa a una subred de VPC compartida. Por ejemplo, projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.

    Comando de muestra

    gcloud compute images import example-image \
     --source-file gs://source-bucket/source-file.vmdk \
     --project my-image-project \
     --zone us-west1-c \
     --network projects/my-vpc-project/global/networks/my-shared-vpc \
     --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-shared-subnet
    

REST

  1. Agrega el disco virtual a Cloud Storage.

  2. Envía una solicitud POST a la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-zone=ZONE",
           "-network=NETWORK",
           "-subnet=SUBNET",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-import/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    Reemplaza los siguientes valores args:

    • SERVICE_PROJECT_ID: El ID del proyecto en el que deseas importar la imagen.
    • IMAGE_NAME: Es el nombre de la imagen que se importará.
    • SOURCE_FILE: El URI para la imagen en Cloud Storage, por ejemplo, gs://my-bucket/my-image.vmdk.
    • ZONE: La zona a la que deseas importar la imagen. Esta zona debe coincidir con la región de la subred. Por ejemplo, si SUBNET es us-west1. La zona de importación debe ser una de las siguientes: us-west1-a, us-west1-b o us-west1-c.
    • NETWORK: La ruta de acceso completa a una red de VPC compartida. Por ejemplo, projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME.
    • SUBNET: La ruta de acceso completa a una subred de VPC compartida. Por ejemplo, projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME.

Importa un disco virtual con una cuenta de servicio personalizada de Compute Engine

Durante una importación de imágenes, se crean instancias de máquina virtual (VM) temporales en tu proyecto. La herramienta de importación de imágenes de estas VM temporales debe autenticarse.

Una cuenta de servicio es una identidad que se adjunta a una VM. Se puede acceder a los tokens de acceso a la cuenta de servicio a través del servidor de metadatos de instancia y usarlos para autenticar la herramienta de importación de imágenes en la VM.

De forma predeterminada, el proceso de importación usa el agente de servicio predeterminado de Compute Engine del proyecto. Sin embargo, si la cuenta de servicio predeterminada de Compute Engine está inhabilitada en tu proyecto o si quieres usar una cuenta de servicio de Compute Engine personalizada, debes crear una cuenta de servicio y especificarla para el proceso de importación.

gcloud

  1. Agrega el disco virtual a Cloud Storage.

  2. Crea una cuenta de servicio y asigna las funciones mínimas. Si deseas obtener más información para crear cuentas de servicio, consulta Crea y administra cuentas de servicio.

    Como mínimo, la cuenta de servicio de Compute Engine especificada debe tener asignadas las siguientes funciones:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    Para obtener más información, consulta Otorga funciones necesarias a la cuenta de servicio de Compute Engine.

  3. Usa gcloud compute images import para importar la imagen.

    gcloud compute images import IMAGE_NAME \
      --source-file SOURCE_FILE \
      --compute-service-account SERVICE_ACCOUNT_EMAIL
    

    Reemplaza lo siguiente:

    • IMAGE_NAME: El nombre de la imagen de destino.
    • SOURCE_FILE: El archivo del disco virtual. Este archivo puede ser un archivo local o un archivo almacenado en Cloud Storage. Si tu disco virtual es un archivo local, puedes proporcionar una ruta absoluta o relativa. Si el archivo del disco virtual ya se almacenó en Cloud Storage, debe existir en un bucket de Cloud Storage en el proyecto que se usa para el proceso de importación. Además, debes especificar la ruta de acceso completa en el formato gs://BUCKET_NAME/OBJECT_NAME.
    • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico asociada con la cuenta de servicio de Compute Engine creada en el paso anterior.

    Ejemplo

    En el siguiente ejemplo, se importa un disco virtual de arranque que se llama my_server.vmdk, almacenado en gs://your_gcs_bucket, mediante una cuenta de servicio que tiene el correo electrónico image-export-service-account@proj-12345.iam.gserviceaccount.com.

    gcloud compute images import my-imported-image \
      --source-file gs://your_gcs_bucket/my_server.vmdk \
      --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
    

REST

  1. Agrega el disco virtual a Cloud Storage.

  2. Crea una cuenta de servicio y asigna las funciones mínimas. Si deseas obtener más información para crear cuentas de servicio, consulta Crea y administra cuentas de servicio.

    Como mínimo, la cuenta de servicio de Compute Engine especificada debe tener asignadas las siguientes funciones:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    Para obtener más información, consulta Otorga funciones necesarias a la cuenta de servicio de Compute Engine.

  3. Agrega el disco virtual a Cloud Storage.

  4. Envía una solicitud POST a la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
    "steps":[
     {
       "args":[
         "-image_name=IMAGE_NAME",
         "-source_file=SOURCE_FILE",
         "-compute_service_account=SERVICE_ACCOUNT_EMAIL",
         "-timeout=7000s",
         "-client_id=api"
       ],
       "name":"gcr.io/compute-image-import/gce_vm_image_import:release",
       "env":[
         "BUILD_ID=$BUILD_ID"
       ]
     }
    ],
    "timeout":"7200s",
    "tags":[
     "gce-daisy",
     "gce-daisy-image-import"
    ]
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto en el que deseas importar la imagen.
    • IMAGE_NAME: Es el nombre de la imagen que se importará.
    • SOURCE_FILE: Es el URI de la imagen en Cloud Storage, por ejemplo, gs://my-bucket/my-image.vmdk
    • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico asociada con la cuenta de servicio de Compute Engine creada en el paso anterior.

Haz que una imagen se pueda iniciar

Si tienes una imagen personalizada de Compute Engine que contiene un sistema operativo que se puede iniciar, pero que no tiene los controladores o los paquetes de entorno invitado necesarios de Compute Engine, puedes usar la herramienta de importación de imágenes para hacer que la imagen se pueda iniciar en Compute Engine.

Usa la marca --source-image a fin de especificar una imagen personalizada para que se pueda iniciar, en lugar de usar la marca --source-file, que especifica un disco nuevo que se importará.

gcloud compute images import IMAGE_NAME \
    --source-image SOURCE_IMAGE_NAME

Reemplaza lo siguiente:

  • IMAGE_NAME: El nombre de la imagen de destino.
  • SOURCE_IMAGE_NAME: El nombre de la imagen de origen.

    Si deseas obtener instrucciones para importar imágenes con licencias existentes a Google Cloud, consulta Licencias adquiridas por el usuario.

Comando de muestra

En el siguiente ejemplo, se convierte una imagen de Compute Engine llamada my-image en una imagen que se puede iniciar denominada my-bootable-image. En este ejemplo, --os ubuntu-1604 anula el sistema operativo detectado.

gcloud compute images import my-bootable-image \
    --source-image my-image \
    --os ubuntu-1604

Limpia los recursos

Los archivos almacenados en Cloud Storage y las imágenes de Compute Engine generan costos. La herramienta de importación importa el archivo del disco virtual a Cloud Storage y crea una imagen personalizada de Compute Engine.

Una vez que verifiques que la imagen se importó de forma correcta y que se inicia sin problemas como una instancia de Compute Engine, puedes borrar el archivo del disco virtual de Cloud Storage. La herramienta muestra el URI del archivo mientras se sube a Cloud Storage. Este URI tiene el siguiente formato: gs://BUCKET_NAME/tmpimage/IMAGE_NAME.

Si importaste una imagen mediante la marca --data-disk y, luego, ejecutaste la herramienta de import por segunda vez con la marca --source-image para hacer que la imagen se pueda iniciar, la primera imagen seguirá existiendo. Si no la necesitas, puedes borrarla. Si especificas el mismo nombre de imagen para las marcas --image y --source-image, la imagen se reemplaza de forma automática y no se requiere otra limpieza.

Próximos pasos