Importar imágenes de máquinas de dispositivos virtuales


Gracias a las imágenes de máquina, puedes almacenar la configuración, los metadatos, los permisos y los datos de uno o más discos para crear una instancia de máquina virtual que se ejecute en Compute Engine. Para obtener información sobre cuándo y cómo usar imágenes de máquina, consulta Imágenes de máquina.

En este documento se describen los pasos para importar una imagen de máquina desde un dispositivo virtual.

Antes de empezar

  • Si el proyecto en el que quieres importar la imagen de máquina tiene definida una política de imágenes de confianza, añade projects/compute-image-import y projects/compute-image-tools a la lista de editores permitidos.
  • Si vas a importar un dispositivo virtual de otro proyecto, consulta Importar entre proyectos.
  • Consulta los requisitos de la máquina virtual de origen y del archivo OVF en la guía de Compute Engine para importar aplicaciones virtuales.
  • Para saber cómo cumplir los requisitos antes de importar imágenes de máquina, consulta Requisitos para importar y exportar imágenes de máquina virtual.
  • 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:

    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 .

Limitaciones y restricciones

  • Puedes compartir una imagen de máquina entre proyectos. Sin embargo, las redes de VPC compartidas no son compatibles.
  • Esta función no está disponible en los proyectos protegidos con Controles de Servicio de VPC.
  • No se pueden crear imágenes de máquina a partir de VMs de origen que tengan más de 200 TB de discos conectados.

Sistemas operativos compatibles

Para obtener información sobre los sistemas operativos compatibles, consulta Detalles del sistema operativo.

Importar imágenes de máquina

Puedes importar imágenes de máquina desde dispositivos virtuales mediante la CLI de Google Cloud o la API Cloud Build.

gcloud

Usa el comando gcloud compute machine-images import para importar una imagen de máquina de dispositivos virtuales.

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:SOURCE_URI \
    --os=OS

Haz los cambios siguientes:

  • MACHINE_IMAGE_NAME: nombre de la imagen de máquina que quieras importar.
  • SOURCE_URI: ruta al archivo OVA u OVF en Cloud Storage.
  • OS: sistema operativo del archivo OVA. Esta marca es opcional de forma predeterminada, pero puede ser obligatoria en algunos casos. Te recomendamos que proporciones esta marca.

Ejemplo

Por ejemplo, puedes usar el siguiente comando gcloud para importar una imagen de máquina llamada my-machine-image desde un archivo OVA de origen llamado my-ova que se almacena en el directorio gs://my-bucket y ejecuta centos-7:

gcloud compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

REST

  1. Sube el dispositivo virtual a Cloud Storage.

  2. Envía una solicitud POST al método projects.builds.create.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-machine-image-name=MACHINE_IMAGE_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":"gce-ovf-machine-image-import"
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: ID del proyecto al que quieres importar el archivo OVA.
    • MACHINE_IMAGE_NAME: nombre de la imagen de máquina que se va a importar. Por ejemplo, my-machine-image.
    • SOURCE_URI: URI del archivo OVA o del directorio que contiene los paquetes OVF almacenados en Cloud Storage. Por ejemplo, gs://my-bucket/my-instance.ova.
    • OS: sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604. Esta marca es opcional de forma predeterminada, pero puede ser obligatoria en algunos casos. Te recomendamos que proporciones esta marca.

    Para ver otros valores de args que se pueden proporcionar, consulta la sección de marcas opcionales de la página de GitHub sobre la importación de OVF de Compute Engine.

Importar imágenes de máquina con anulaciones de OVF

Cuando importas una imagen de máquina de un dispositivo virtual, puedes anular los ajustes del archivo OVF. Por ejemplo, puedes cambiar la configuración de la CPU o la memoria, o usar una red personalizada.

CPU y memoria personalizadas

Para anular la configuración de CPU o memoria especificada en el archivo OVF, sigue estos pasos:

gcloud

Para anular la configuración de CPU o memoria especificada en el archivo OVF, sigue los pasos de la CLI de Google Cloud para importar una imagen de máquina y especifica las marcas --custom-cpu y --custom-memory.

Ejemplo

Una imagen de máquina llamada my-machine-image tiene las siguientes anulaciones aplicadas a los ajustes del archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • CPU: 2 CPUs
  • Memoria: 2048 MB

Para importar my-machine-image con estas anulaciones, ejecuta el siguiente comando:

gcloud compute machine-images import my-machine-image \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

REST

Para anular la configuración de CPU o memoria especificada en el archivo OVF, sigue los pasos de la API Compute Engine para importar una imagen de máquina y especifica el argumento -machine-type. Este -machine-type representa un tipo de máquina predefinido o personalizado de la serie N1 que se va a usar.

Ejemplo

Una imagen de máquina llamada my-machine-image en el proyecto my-project tiene las siguientes anulaciones aplicadas a la configuración del archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • CPU: 2 CPUs
  • Memoria: 2048 MB

Para importar my-machine-image con estas anulaciones, haz la siguiente solicitud a la API Cloud Build.

POST https://cloudbuild.googleapis.com/v1/projects/my-project/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Redes personalizadas

Para anular la configuración de red especificada en el archivo OVF, sigue estos pasos:

gcloud

Para configurar una red personalizada, sigue los pasos de Google Cloud CLI para importar una imagen de máquina y especifica una marca --network. Si la red está configurada con un modo de subred personalizado, también debe especificar las marcas --subnet y --zone.

Ejemplo

Una imagen de máquina llamada my-machine-image tiene las siguientes anulaciones aplicadas a los ajustes del archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • Red: custom-vpc-network
  • Subred: company-vpc-us-east1-c
  • Zona: us-east1-c

Para importar my-machine-image con estas anulaciones, ejecuta el siguiente comando de ejemplo:

gcloud compute machine-images import my-machine-image \
    --os=ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network=custom-vpc-network \
    --subnet=company-vpc-us-east1-c \
    --zone=us-east1-c

REST

Para usar una red personalizada, sigue los pasos de REST para importar una imagen de máquina y especifica un argumento -network. Si la red se configura con un modo de subred personalizado, también debe especificar los argumentos -subnet y -zone.

Ejemplo

Una imagen de máquina llamada my-machine-image tiene las siguientes anulaciones aplicadas a los ajustes del archivo OVF:

  • Sistema operativo: Ubuntu 1404
  • Red: custom-vpc-network
  • Subred: company-vpc-us-east1-c
  • Zona: us-central1-c

Para importar my-machine-image con estas anulaciones, haz la siguiente solicitud a la API Compute Engine.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUsILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Sustituye PROJECT_ID por el ID del proyecto.

Importar una imagen de máquina en una red que no permita IPs externas

Para importar una imagen de máquina mediante una red que no permita direcciones IP externas, sigue estos pasos:

  1. Añade el dispositivo virtual a Cloud Storage.

  2. Para el proceso de importación, es necesario que los gestores de paquetes estén instalados en el sistema operativo de la imagen de máquina. Es posible que estos gestores de paquetes tengan que hacer solicitudes a repositorios de paquetes que estén fuera de Google Cloud. Para permitir el acceso a estas actualizaciones, debes configurar Cloud NAT. Para obtener más información, consulta el artículo sobre cómo crear una configuración de NAT con Cloud Router.

  3. Configura Acceso privado de Google. Para obtener más información, consulta el artículo sobre cómo configurar Acceso privado de Google.

  4. Importa la imagen de máquina con la CLI de Google Cloud o la API Cloud Build.

    Cuando importas una imagen de máquina de un dispositivo virtual, se crean máquinas virtuales temporales en tu proyecto. Para asegurarte de que a estas VMs temporales no se les asignen direcciones IP externas, debes especificar una marca o un argumento adicional.

    Para obtener más información sobre la marca o el argumento necesarios, haz clic en las siguientes pestañas:

gcloud

Usa el comando gcloud compute machine-images import con la marca --no-address .

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=SOURCE_URI \
    --os=OS \
    --zone=ZONE \
    --no-address

Haz los cambios siguientes:

  • MACHINE_IMAGE_NAME: nombre de la imagen de máquina que quieras importar.
  • SOURCE_URI: URI de tu archivo OVA u OVF en Cloud Storage. Por ejemplo, gs://my-bucket/Ubuntu.ova.
  • OS: sistema operativo del archivo OVA. Esta marca es opcional de forma predeterminada, pero puede ser obligatoria en algunos casos. Te recomendamos que proporciones esta marca. Para ver una lista de los valores admitidos, consulta las opciones de la marca --os del comando gcloud compute machine-images import.
  • ZONE: la zona en la que se va a importar la imagen de máquina. Si se deja en blanco, se usará la zona predeterminada del proyecto.

REST

Envía una solicitud POST al método projects.builds.create mediante la API de Cloud Build. Especifica el argumento -no-external-ip.

 POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
 {
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=MACHINE_IMAGE_NAME",
        "-ovf-gcs-path=SOURCE_URI",
        "-os=OS",
        "-zone=ZONE",
        "-no-external-ip",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto al que quieres importar la imagen de máquina.
  • MACHINE_IMAGE_NAME: el nombre de la imagen de máquina que se va a importar. Por ejemplo, my-machine-image.
  • SOURCE_URI: el URI del archivo OVA almacenado en Cloud Storage. Por ejemplo, gs://my-bucket/my-machine.ova.
  • OS: el sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604. Esta marca es opcional de forma predeterminada, pero puede ser obligatoria en algunos casos. Te recomendamos que proporciones esta marca. Para ver una lista de los valores admitidos, consulta las opciones de la marca --os del comando gcloud compute instances import.
  • ZONE: la zona en la que se va a importar la imagen de máquina.

Importar una imagen de máquina mediante cuentas de servicio personalizadas

Durante la importación de una imagen de máquina, se crean instancias de máquina virtual temporales en tu proyecto. La herramienta de importación de estas VMs temporales debe autenticarse.

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

De forma predeterminada, el proceso de importación usa la cuenta de servicio predeterminada de Compute Engine. Sin embargo, si la cuenta de servicio predeterminada de Compute Engine está inhabilitada en tu proyecto o 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. Añade el dispositivo virtual a Cloud Storage.

  2. Crea una cuenta de servicio y asigna los roles mínimos. Para obtener más información sobre cómo crear cuentas de servicio, consulta el artículo Crear y gestionar cuentas de servicio.

    Como mínimo, la cuenta de servicio de Compute Engine especificada debe tener asignados los siguientes roles:

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

    Estos roles mínimos son necesarios para la cuenta de servicio especificada en la marca --compute-service-account. Para obtener más información, consulta Conceder los roles necesarios a la cuenta de servicio de Compute Engine.

  3. Usa el comando gcloud compute machine-images import para importar una imagen de máquina de dispositivos virtuales.

    gcloud compute machine-images import MACHINE_IMAGE_NAME \
        --source-uri=gs:SOURCE_URI \
        --os=OS \
        --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --scopes=SCOPES
    

    Haz los cambios siguientes:

    • MACHINE_IMAGE_NAME: nombre de la imagen de máquina que quieras importar.
    • SOURCE_URI: ruta al archivo OVA u OVF en Cloud Storage.
    • OS: sistema operativo del archivo OVA. Esta marca es opcional de forma predeterminada, pero puede ser obligatoria en algunos casos. Te recomendamos que proporciones esta marca.
    • TEMP_SERVICE_ACCOUNT_EMAIL: la dirección de correo asociada a la cuenta de servicio personalizada que has creado en el paso anterior. Esta cuenta de servicio la usan las VMs temporales. Si no se especifica, la VM usa la cuenta de servicio predeterminada de Compute Engine.
    • SERVICE_ACCOUNT_EMAIL: la dirección de correo asociada a la cuenta de servicio personalizada que se va a adjuntar a cualquier máquina virtual creada a partir de esta imagen de máquina. Esta cuenta de servicio no tiene restricciones de permisos, por lo que puedes personalizarla según tus necesidades. Si no se especifica, la cuenta de servicio predeterminada de Compute Engine se adjunta a la VM.
    • SCOPES: especifica el nivel de acceso de la opción --service-account. Si no se especifica, se usan los ámbitos predeterminados. Para obtener más información, consulta la --scopes bandera.

REST

  1. Añade el dispositivo virtual a Cloud Storage.

  2. Crea una cuenta de servicio y asigna los roles mínimos. Para obtener más información sobre cómo crear cuentas de servicio, consulta el artículo Crear cuentas de servicio.

    Como mínimo, la cuenta de servicio de Compute Engine especificada debe tener asignados los siguientes roles:

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

    Estos roles mínimos son necesarios para la cuenta de servicio especificada en el argumento -compute-service-account. Para obtener más información, consulta Conceder los roles necesarios a la cuenta de servicio de Compute Engine.

  3. Envía una solicitud POST al método projects.builds.create con la API de Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
    "timeout":"7200s",
    "steps":[
      {
        "args":[
          "-machine-image-name=MACHINE_IMAGE_NAME",
          "-ovf-gcs-path=SOURCE_URI",
          "-os=OS",
          "-zone=ZONE",
          "-compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL",
          "-service-account=SERVICE_ACCOUNT_EMAIL",
          "-client-id=api",
          "-timeout=7000s"
        ],
        "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
        "env":[
          "BUILD_ID=$BUILD_ID"
        ]
      }
    ],
    "tags":"gce-ovf-machine-image-import"
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que quieres importar la imagen de máquina.
    • MACHINE_IMAGE_NAME: el nombre de la imagen de máquina que se va a importar. Por ejemplo, my-machine-image.
    • SOURCE_URI: el URI del archivo OVA almacenado en Cloud Storage. Por ejemplo, gs://my-bucket/my-machine.ova.
    • OS: el sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604. Esta marca es opcional de forma predeterminada, pero puede ser obligatoria en algunos casos. Te recomendamos que proporciones esta marca. Para ver una lista de los valores admitidos, consulta las opciones de la marca --os del comando gcloud compute instances import.
    • ZONE: la zona en la que se va a importar la imagen de máquina.
    • TEMP_SERVICE_ACCOUNT_EMAIL: la dirección de correo asociada a la cuenta de servicio personalizada que has creado en el paso anterior. Esta cuenta de servicio la usan las VMs temporales. Si no se especifica, la VM usa la cuenta de servicio predeterminada de Compute Engine.
    • SERVICE_ACCOUNT_EMAIL: la dirección de correo asociada a la cuenta de servicio personalizada que se va a adjuntar a cualquier máquina virtual creada a partir de esta imagen de máquina. Esta cuenta de servicio no tiene restricciones de permisos, por lo que puedes personalizarla según tus necesidades. Si no se especifica, la cuenta de servicio predeterminada de Compute Engine se adjunta a la VM.
    • SCOPES: especifica el nivel de acceso de la opción --service-account. Si no se especifica, se usan los ámbitos predeterminados. Para obtener más información, consulta la --scopes bandera.

Siguientes pasos