Importa imágenes de máquinas desde dispositivos virtuales

Usa una imagen de máquina para almacenar la configuración, los metadatos, los permisos y los datos de uno o más discos de una instancia de VM que se ejecuta en Compute Engine. Para obtener información sobre cuándo y cómo usar las 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 comenzar

Limitaciones y restricciones

Sistemas operativos compatibles

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

Habilita la API de Cloud Build

En la mayoría de los casos, gcloud beta compute machine-images import intenta otorgar estos permisos a la cuenta de servicio de Cloud Build. Sin embargo, puedes otorgarlos de forma manual para asegurarte de que los permisos obligatorios estén en vigor.

Console

  1. Habilita la API de Cloud Build.

    Habilitar la API de Cloud Build

    Cuando habilitas la API de Cloud Build desde la consola, Compute Engine otorga las siguientes funciones a la cuenta de servicio de Cloud Build para que el servicio de Cloud Build pueda importar instancias a Compute Engine:

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    La herramienta de importación también usa la cuenta de servicio predeterminada de Compute Engine. De forma predeterminada, la cuenta de servicio de Compute Engine tiene la función de editor de proyecto de IAM. Si se quita esta función, es posible que el proceso de importación falle. Para volver a agregar la función a la cuenta de servicio, consulta la página sobre cómo otorgar acceso. Para obtener más información sobre la cuenta de servicio predeterminada de Compute Engine, consulta Cuenta de servicio predeterminada de Compute Engine.

gcloud

Para configurar el servicio Cloud Build mediante la herramienta de línea de comandos de gcloud, completa los siguientes pasos:

  1. Habilita Cloud Build.

    gcloud services enable cloudbuild.googleapis.com

    La herramienta de importación también usa la cuenta de servicio predeterminada de Compute Engine. De forma predeterminada, la cuenta de servicio de Compute Engine tiene la función de editor de proyecto de IAM. Si se quita esta función, es posible que el proceso de importación falle. Para volver a agregar la función a la cuenta de servicio, consulta la página sobre cómo otorgar acceso. Para obtener más información sobre la cuenta de servicio predeterminada de Compute Engine, consulta Cuenta de servicio predeterminada de Compute Engine.

  2. Agrega la función compute.admin a la cuenta de servicio para la API de Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. Agrega la función iam.serviceAccountUser a la cuenta de servicio para la API de Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. Agrega la función iam.serviceAccountTokenCreator a la cuenta de servicio para la API de Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    Reemplaza los siguientes valores:

Importa imágenes de máquinas.

Puedes importar imágenes de máquina desde dispositivos virtuales mediante la herramienta de línea de comandos de gcloud o la API de Cloud Build.

gcloud

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

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

Reemplaza lo siguiente:

  • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que deseas importar.
  • SOURCE_URI: Es la ruta de acceso a tu archivo OVA o OVF en Cloud Storage.
  • OS: El sistema operativo del archivo OVA. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca.

Ejemplo

Por ejemplo, puedes usar el siguiente comando de 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 beta compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

API

  1. Sube el dispositivo virtual a Cloud Storage.

  2. En la API, crea una solicitud POST a 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",
           "-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"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto en el que deseas importar el archivo OVA.
    • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que se creará. Por ejemplo, my-machine-image
    • SOURCE_URI: Es el URI para el archivo OVA o un directorio que contiene paquetes OVF que se almacena en Cloud Storage. Por ejemplo, gs://my-bucket/my-instance.ova.
    • OS: El sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604 De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca.

    Para obtener valores args adicionales que se puedan aprovisionar, consulta la sección de marcas opcionales en la página sobre importación de OVF de Compute Engine en GitHub.

Importa imágenes de máquinas con anulaciones de OVF

CPU y memoria personalizadas

gcloud

A fin de anular la configuración de CPU o memoria especificada en el archivo OVF, sigue los pasos de la herramienta de línea de comandos de gcloud para importar una imagen de máquina y especifica las marcas --custom-cpu y --custom-memory.

Ejemplo

A una imagen de máquina llamada my-machine-image se le aplican las siguientes anulaciones 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, ejecuta el siguiente comando:

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

API

A fin de anular la configuración de CPU o memoria especificada en el archivo OVF, sigue los pasos de la API de 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 para usar.

Ejemplo

A una imagen de máquina llamada my-machine-image se le aplican las siguientes anulaciones 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, realiza la siguiente solicitud a la API de 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",
        "-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"
}

Reemplaza PROJECT_ID con el ID del proyecto.

Redes personalizadas

gcloud

A fin de configurar una red personalizada, sigue los pasos de la herramienta de línea de comandos de gcloud 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 debes especificar las marcas --subnet y --zone.

Ejemplo

A una imagen de máquina llamada my-machine-image se le aplican las siguientes anulaciones a la configuración 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 beta 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

API

A fin de usar una red personalizada, sigue los pasos de la API de Compute Engine para importar una imagen de máquina y especifica un argumento -network. Si la red está configurada con un modo de subred personalizado, también debes especificar los argumentos -subnet y -zone.

Ejemplo

A una imagen de máquina llamada my-machine-image se le aplican las siguientes anulaciones a la configuración 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, realiza la siguiente solicitud a la API de 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"
}

Reemplaza PROJECT_ID con el ID del proyecto.

Importa una imagen de máquina dentro de una red que no permita una IP externa

Para importar una imagen de máquina con una red que no permita direcciones IP externas, completa los siguientes pasos:

  1. Agrega el dispositivo virtual a Cloud Storage.

  2. El proceso de importación requiere que se instalen administradores de paquetes en el sistema operativo de la imagen de máquina. 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 la imagen de máquina con la herramienta de línea de comandos de gcloud o la API de Cloud Build.

    Cuando importas una imagen de máquina desde un dispositivo 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 sobre la marca o el argumento requerido, haz clic en las siguientes pestañas:

gcloud

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

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

Reemplaza lo siguiente:

  • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que deseas importar.
  • SOURCE_URI: El URI para tu archivo OVA o OVF en Cloud Storage. Por ejemplo, gs://my-bucket/Ubuntu.ova
  • OS: El sistema operativo del archivo OVA. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca. Si deseas obtener una lista de los valores admitidos, consulta las opciones de la marca --os para el comando gcloud beta compute machine-images import.
  • ZONE: La zona en la que se importará la imagen de máquina. Si se deja en blanco, se usa la zona predeterminada del proyecto

API

Usa la API de Cloud Build y 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"
}

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto en el que deseas importar la imagen de máquina.
  • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que se creará. Por ejemplo, my-machine-image
  • SOURCE_URI: El URI del archivo OVA que se almacena en Cloud Storage. Por ejemplo, gs://my-bucket/my-machine.ova
  • OS: El sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca. Si deseas obtener una lista de los valores admitidos, consulta las opciones de la marca --os para el comando gcloud compute instances import.
  • ZONE: La zona en la que se importará la imagen de máquina.

Importa una imagen de máquina con cuentas de servicio personalizadas

Durante una importación de imágenes de máquina, se crean instancias de máquina virtual (VM) temporales en tu proyecto. La herramienta de importación 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 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 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 dispositivo 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

    Estas funciones mínimas se necesitan para la cuenta de servicio especificada para la marca --compute-service-account.

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

    gcloud beta 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
    

    Reemplaza lo siguiente:

    • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que deseas importar.
    • SOURCE_URI: Es la ruta de acceso a tu archivo OVA o OVF en Cloud Storage.
    • OS: El sistema operativo del archivo OVA. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca.
    • TEMP_SERVICE_ACCOUNT_EMAIL: Es la dirección de correo electrónico asociada con la cuenta de servicio personalizada creada en el paso anterior. Las VM temporales usan esta cuenta de servicio. Si no se especifica, la VM usa la cuenta de servicio predeterminada de Compute Engine.
    • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico asociada con la cuenta de servicio personalizada que se conectará a cualquier VM creada a partir de esta imagen de máquina. No hay restricciones de permisos para esta cuenta de servicio. Puedes personalizar esta cuenta según sea necesario. Si no se especifica, la cuenta de servicio predeterminada de Compute Engine se conecta a la VM.
    • SCOPES: Especifica el nivel de acceso para la opción --service-account. Si no se especifica, se usan los permisos predeterminados. Para obtener más información, revisa la marca --scopes.

API

  1. Agrega el dispositivo 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

    Estas funciones mínimas son necesarias para la cuenta de servicio especificada para la marca -compute-service-account.

  3. En la API, crea una solicitud POST a 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"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto en el que deseas importar la imagen de máquina.
    • MACHINE_IMAGE_NAME: Es el nombre de la imagen de máquina que se creará. Por ejemplo, my-machine-image
    • SOURCE_URI: El URI del archivo OVA que se almacena en Cloud Storage. Por ejemplo, gs://my-bucket/my-machine.ova
    • OS: El sistema operativo del archivo OVA. Por ejemplo, ubuntu-1604. De forma predeterminada, esta marca es opcional, pero se podría necesitar en algunos casos. Te recomendamos que proporciones esta marca. Si deseas obtener una lista de los valores admitidos, consulta las opciones de la marca --os para el comando gcloud compute instances import.
    • ZONE: La zona en la que se importará la imagen de máquina.
    • TEMP_SERVICE_ACCOUNT_EMAIL: Es la dirección de correo electrónico asociada con la cuenta de servicio personalizada creada en el paso anterior. Las VM temporales usan esta cuenta de servicio. Si no se especifica, la VM usa la cuenta de servicio predeterminada de Compute Engine.
    • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico asociada con la cuenta de servicio personalizada que se conectará a cualquier VM creada a partir de esta imagen de máquina. No hay restricciones de permisos para esta cuenta de servicio. Puedes personalizar esta cuenta según sea necesario. Si no se especifica, la cuenta de servicio predeterminada de Compute Engine se conecta a la VM.
    • SCOPES: Especifica el nivel de acceso para la opción --service-account. Si no se especifica, se usan los permisos predeterminados. Para obtener más información, revisa la marca --scopes.

Próximos pasos