Exporta una imagen personalizada a Google Cloud Storage

Si necesitas trasladar los datos del disco de arranque de Compute Engine por fuera de tu proyecto de Compute Engine, puedes exportar una imagen de disco de arranque a Cloud Storage como un archivo tar.gz. Si necesitas crear una imagen de disco persistente para usarla cuando crees discos persistentes nuevos en Compute Engine, consulta el artículo sobre cómo crear una imagen personalizada.

Puedes exportar una imagen personalizada como copia de seguridad o para compartir mediante la exportación de la imagen a Cloud Storage. Este método es ideal para compartir imágenes individuales con otros proyectos que no tienen acceso a tus imágenes. De forma alternativa, puedes compartir imágenes si otorgas la Función de usuario de imágenes de Compute Engine en la imagen o en el proyecto que la contiene.

En el diagrama siguiente, se muestran algunos flujos de trabajo típicos para la creación y reutilización de una imagen personalizada.

Ejemplos de creación y reutilización de imágenes personalizadas
Figura 1. Ejemplos de creación y reutilización de imágenes personalizadas

Antes de comenzar

Exporta una imagen con un solo comando

El método preferido para exportar una imagen a Cloud Storage es usar el comando de gcloud compute images export. Este comando usa Daisy a fin de encadenar los diversos pasos necesarios para exportar una imagen. Se supone que ya creaste una imagen, por ejemplo, con el comando de gcloud compute images create.

Con la herramienta de línea de comandos de gcloud, ejecuta el comando siguiente:

gcloud compute images export --destination-uri [DESTINATION_URI] \
    --image [IMAGE]

donde:

  • [DESTINATION_URI] es el destino del URI de Cloud Storage para el archivo de disco virtual exportado.
  • [IMAGE] es el nombre de la imagen de disco que se exportará.

Por ejemplo, con el comando siguiente, se exporta una imagen llamada my-image de my-project a un depósito de Cloud Storage llamado my-bucket. Por configuración predeterminada, la imagen se exporta como un archivo disk.raw y se comprime en el formato de archivo tar.gz.

gcloud compute images export --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image --project my-project

Si deseas obtener la lista con todas las marcas disponibles, consulta la documentación de referencia de gcloud compute images export.

Crea y exporta una imagen de forma manual

Si los comandos de gcloud compute images create y gcloud compute images export no cumplen con tus requisitos, puedes crear y exportar una imagen de forma manual desde una instancia de Compute Engine. Este proceso tiene pasos discretos a fin de crear primero una imagen y, luego, exportarla.

En el ejemplo siguiente, ten en cuenta que el disco creado se llama image-disk.

Si quieres crear y exportar una imagen, haz lo siguiente:

  1. De forma opcional, puedes detener la instancia a la que conectaste el disco antes de crear la instantánea. Si detienes la instancia, se garantiza la integridad del contenido del disco en la instantánea.

  2. Crea una instantánea del disco. Asígnale el nombre image-snapshot a la instantánea.

    gcloud compute disks snapshot [DISK_NAME] --snapshot-names image-snapshot
    

    donde [DISK_NAME] es el nombre del disco desde el que creas la instantánea.

  3. Usa la instantánea image-snapshot para crear un disco nuevo llamado image-disk mediante la ejecución del comando siguiente:

    gcloud compute disks create image-disk --source-snapshot image-snapshot
    
  4. Crea un disco temporal llamado temporary-disk a fin de conservar su archivo tar y especifica la propiedad [SIZE] del disco para que sea, al menos, un 50% más grande que el disco de imagen.

    Después podrás desvincular y borrar el disco.

    gcloud compute disks create temporary-disk --size [SIZE]
    

    donde [SIZE] es el tamaño del disco temporal en unidades de GB o TB. Por ejemplo, especifica 100GB si quieres crear un disco de 100 gigabytes.

  5. Crea una instancia nueva y habilita el alcance de storage-rw en la instancia. Además, adjunta el image-disk y el temporary-disk a la instancia como discos secundarios con atributos específicos device-name.

    gcloud compute instances create [INSTANCE_NAME] --scopes storage-rw \
        --disk name=image-disk,device-name=image-disk \
        --disk name=temporary-disk,device-name=temporary-disk
    

    donde [INSTANCE_NAME] es el nombre de la instancia que quieres crear.

    Ten en cuenta que transfieres los alcances de la cuenta de servicio a fin de poder subir tu archivo a Google Cloud Storage en los pasos posteriores.

    Consulta los detalles sobre cómo iniciar una instancia nueva si es necesario.

  6. Conéctate a tu instancia con el comando siguiente:

    gcloud compute ssh [INSTANCE_NAME]
    

    donde [INSTANCE_NAME] es la instancia a la que deseas conectarte.

  7. Formatea y activa el disco temporal. Si se formatea el disco, se borran los contenidos del disco temporal.

    sudo mkdir /mnt/tmp
    
    sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
    
    sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
    
  8. De forma opcional, puedes activar el disco de imagen y realizar cambios adicionales antes de crear el archivo tar. Por ejemplo, es posible que quieras borrar los archivos existentes del directorio /home si no necesitas que formen parte de tu imagen. Debes activar las particiones del disco que necesitas modificar, modificar los archivos en el disco que necesitas cambiar y, luego, desactivar el disco cuando hayas terminado.

    1. Crea un directorio en el que puedas activar tu disco o partición.

      sudo mkdir /mnt/image-disk
      
    2. Usa el comando ls a fin de determinar qué disco o partición de disco necesitas activar.

      ls /dev/disk/by-id/
      

      Con el comando, se imprime una lista del ID del disco y las particiones. Por ejemplo, el disco siguiente tiene una tabla particionada con una partición. El ID de google-image-disk se dirige al disco completo desde el que quieres crear una imagen. El ID de google-image-disk-part1 se dirige a la primera partición en este disco. Debes activar la partición si necesitas realizar cambios en el disco; luego, crea la imagen desde el disco completo.

      google-image-disk
      google-image-disk-part1
      
    3. Activa el disco o la partición. Si tu disco tiene una tabla particionada, debes activar las particiones individuales de tu disco. Por ejemplo, activa google-image-disk-part1.

      sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
      

      De forma alternativa, si tu disco tiene un formato sin procesar y sin tabla particionada, debes activar el disco completo google-image-disk.

      sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
      
    4. Modifica los archivos en el directorio /mnt/image-disk para configurar los archivos en el disco. Como ejemplo, puedes quitar el archivo /mnt/image-disk/home/[USER]/.ssh/authorized_keys para evitar que tus Llaves SSH se compartan.

    5. Una vez que terminaste de modificar los archivos, desactiva el disco.

      sudo umount /mnt/image-disk/
      
  9. Crea el archivo tar de tu imagen.

    Cuando termines de personalizar los archivos en el disco de imagen, crea un archivo de disco sin procesar en tu disco temporal. El nombre de la imagen de disco sin procesar debe ser “disk.raw”:

    sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
    

    Luego, debes convertir este archivo en formato tar y gzip:

    cd /mnt/tmp
    
    sudo tar czvf myimage.tar.gz disk.raw
    

    Con este comando, se creará una imagen de la instancia en la ubicación siguiente:

    /mnt/tmp/myimage.tar.gz
    
  10. Sube la imagen a Google Cloud Storage.

    Para subir el archivo tar a Google Cloud Storage, usa la herramienta de línea de comandos de gsutil que viene preinstalada en tu instancia.

    1. Crea un depósito con gsutil.

      Asegúrate de revisar los Lineamientos de denominación y de depósito antes de crear tu depósito. Luego, crea tu depósito con el comando siguiente:

      me@example-instance:~$ gsutil mb gs://[BUCKET_NAME]

      donde [BUCKET_NAME] es el nombre del depósito que se creará.

    2. Copia el archivo en tu depósito nuevo.

      me@example-instance:~$ gsutil cp /mnt/tmp/myimage.tar.gz gs://[BUCKET_NAME]

      donde [BUCKET_NAME] es el depósito en el que se copiará el archivo.

Listo; has exportado tu archivo a Google Cloud Storage. Ahora puedes compartir la imagen con otras personas o usar el archivo tar para agregar una imagen nueva a un proyecto de Google Cloud Platform Console.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine