Crear una AMI desde una instancia con respaldo en el almacén de instancias - Amazon Elastic Compute Cloud

Crear una AMI desde una instancia con respaldo en el almacén de instancias

Los siguientes procedimientos permiten crear una AMI con respaldo en el almacén de instancias AMI desde una instancia con respaldo en el almacén de instancias. Antes de comenzar, asegúrese de que ha leído los requisitos previos.

Crear una AMI desde una instancia de Amazon Linux con respaldo en el almacén de instancias

En esta sección se describe la creación de una AMI desde una instancia de Amazon Linux. Los siguientes procedimientos podrían no funcionar para instancias que ejecutan otras distribuciones Linux. Para conocer los procedimientos específicos para Ubuntu, consulte Crear una AMI desde una instancia de Ubuntu con respaldo en el almacén de instancias.

Para prepararse para utilizar las herramientas de la AMI (solo instancias HVM)
  1. Las herramientas de la AMI requieren GRUB Legacy para arrancar correctamente. Utilice el siguiente comando para instalar GRUB:

    [ec2-user ~]$ sudo yum install -y grub
  2. Instale los paquetes de administración de particiones con el siguiente comando:

    [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
Para crear una AMI desde una instancia de Amazon Linux con respaldo en el almacén de instancias

En este procedimiento se presupone que ha satisfecho los requisitos previos que se indican en Requisitos previos.

En el siguiente ejemplo, reemplace cada marcador de posición del usuario con su propia información.

  1. Cargue las credenciales en la instancia. Estas credenciales se utilizan para garantizar que solo usted y Amazon EC2 pueden obtener acceso a la AMI.

    1. Cree un directorio temporal en la instancia para las credenciales del modo siguiente:

      [ec2-user ~]$ mkdir /tmp/cert

      Esto le permite excluir las credenciales de la imagen creada.

    2. Copie el certificado X.509 y la clave privada correspondiente del equipo en el directorio /tmp/cert de la instancia utilizando una herramienta de copia segura como scp. La opción -i my-private-key.pem del comando scp es la clave privada que utiliza para conectarse a la instancia con SSH, no la clave privada X.509. Por ejemplo:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00

    Puesto que se trata de archivos de texto sin formato, también puede abrir el certificado y la clave con un editor de texto y copiar el contenido en nuevos archivos en /tmp/cert.

  2. Prepare el paquete a cargar en Amazon S3 ejecutando el comando ec2-bundle-vol desde dentro de la instancia. Asegúrese de especificar la opción -e para excluir el directorio en el que están almacenadas las credenciales. De forma predeterminada, el proceso de agrupación excluye los archivos que podrían contener información confidencial. Estos archivos incluyen *.sw, *.swo, *.swp, *.pem, *.priv, *id_rsa*, *id_dsa* *.gpg, *.jks, */.ssh/authorized_keys y */.bash_history. Para incluir todos estos archivos, use la opción --no-filter. Para incluir algunos de estos archivos, use la opción --include.

    importante

    De forma predeterminada, el proceso de agrupación de la AMI crea una serie de archivos comprimidos y cifrados en el directorio /tmp que representa el volumen raíz. Si no dispone de suficiente espacio libre en disco en /tmp para almacenar el paquete, necesita especificar una ubicación distinta para almacenar el paquete mediante la opción -d /path/to/bundle/storage. Algunas instancias tienen almacenamiento efímero montado en /mnt o en /media/ephemeral0 que puede utilizar, o también puede crear, asociar y montar un nuevo volumen de Amazon EBS para almacenar el paquete. Para obtener más información, consulte Creación de un volumen de Amazon EBS en la Guía del usuario de Amazon EBS.

    1. Debe ejecutar el comando ec2-bundle-vol como raíz. Para la mayoría de comandos, puede utilizar sudo para obtener permisos elevados, pero en este caso debe ejecutar sudo -E su para mantener las variables de entorno.

      [ec2-user ~]$ sudo -E su

      Tenga en cuenta que la pregunta bash ahora le identifica como el usuario raíz y que el signo de dólar se ha sustituido por un hash tag, lo que indica que se encuentra en un shell raíz:

      [root ec2-user]#
    2. Para crear el paquete de la AMI, ejecute el comando ec2-bundle-vol del modo siguiente:

      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      nota

      En las regiones China (Pekín) y AWS GovCloud (EE. UU. Oeste), utilice el parámetro --ec2cert y especifique los certificados de acuerdo con lo indicado en los requisitos previos.

      La creación de la imagen puede llevar unos minutos. Cuando el comando se complete, el directorio /tmp (o no predeterminado) contiene el paquete (image.manifest.xml, además de varios archivos image.part.xx).

    3. Salga del shell raíz.

      [root ec2-user]# exit
  3. (Opcional) Para añadir más volúmenes de almacén de instancias, edite los mapeos de dispositivos de bloques del archivo image.manifest.xml de la AMI. Para obtener más información, consulte Mapeos de dispositivos de bloques.

    1. Cree una copia de seguridad del archivo image.manifest.xml.

      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. Reformatee el archivo image.manifest.xml para que sea más fácil de leer y editar.

      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. Edite los mapeos de dispositivos de bloques en image.manifest.xml con un editor de texto. En el siguiente ejemplo se muestra una nueva entrada para el volumen de almacén de instancias ephemeral1.

      nota

      Para obtener una lista de los archivos excluidos, consulte ec2-bundle-vol.

      <block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping> <mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping> <mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping>
    4. Guarde el archivo image.manifest.xml y salga del editor de texto.

  4. Para cargar el paquete a Amazon S3, ejecute el comando ec2-upload-bundle del modo siguiente.

    [ec2-user ~]$ ec2-upload-bundle -b my-s3-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
    importante

    Para registrar la AMI en una región distinta a US East (N. Virginia), debe especificar tanto la región de destino con la opción --region como una ruta para el bucket que ya exista en la región de destino o bien una ruta para el bucket exclusiva que pueda crearse en la región de destino.

  5. (Opcional) Una vez que el bucket se ha cargado en Amazon S3, puede eliminar el paquete del directorio /tmp de la instancia utilizando el siguiente comando rm:

    [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    importante

    Si ha especificado una ruta con la opción -d /path/to/bundle/storage en Paso 2, utilice dicha ruta en lugar de /tmp.

  6. Para registrar la AMI, ejecute el comando register-image del modo siguiente.

    [ec2-user ~]$ aws ec2 register-image --image-location my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    importante

    Si ha especificado previamente una región para el comando ec2-upload-bundle, especifique la misma región de nuevo para este comando.

Crear una AMI desde una instancia de Ubuntu con respaldo en el almacén de instancias

En esta sección se describe la creación de una AMI desde una instancia de Ubuntu Linux con un volumen de almacén de instancias como volumen raíz. Los siguientes procedimientos podrían no funcionar para instancias que ejecutan otras distribuciones Linux. Para obtener información sobre los procedimientos específicos de Amazon Linux, consulte Crear una AMI desde una instancia de Amazon Linux con respaldo en el almacén de instancias.

Para prepararse para utilizar las herramientas de la AMI (solo instancias HVM)

Las herramientas de la AMI requieren GRUB Legacy para arrancar correctamente. No obstante, Ubuntu está configurado para utilizar GRUB 2. Debe verificar si la instancia utiliza GRUB Legacy y, si no fuera así, necesita instalarlo y configurarlo.

Las instancias HVM también requieren la instalación de herramientas de particiones para que las herramientas de la AMI funcionen correctamente.

  1. GRUB Legacy (versión 0.9x o inferior) debe estar instalado en la instancia. Verifique si dispone de GRUB Legacy e instálelo si fuera necesario.

    1. Verifique la versión de la instalación de GRUB.

      ubuntu:~$ grub-install --version grub-install (GRUB) 1.99-21ubuntu3.10

      En este ejemplo, la versión de GRUB es superior a la 0.9x, por lo que debe instalarse GRUB Legacy. Continúe en Paso 2. Si ya dispone de GRUB Legacy, puede pasar a Paso 2.

    2. Instale el paquete grub utilizando el siguiente comando.

      ubuntu:~$ sudo apt-get install -y grub
  2. Instale los siguientes paquetes de administración de particiones con el administrador de paquetes de la distribución.

    • gdisk (algunas distribuciones llaman a este paquete gptfdisk)

    • kpartx

    • parted

    Utilice el siguiente comando.

    ubuntu:~$ sudo apt-get install -y gdisk kpartx parted
  3. Verifique los parámetros del kernel de la instancia.

    ubuntu:~$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.2.0-54-virtual root=UUID=4f392932-ed93-4f8f-aee7-72bc5bb6ca9d ro console=ttyS0 xen_emul_unplug=unnecessary

    Observe las opciones que siguen a los parámetros del kernel y del dispositivo raíz: ro, console=ttyS0 y xen_emul_unplug=unnecessary. Sus opciones pueden ser diferentes.

  4. Verifique las entradas de kernel en /boot/grub/menu.lst.

    ubuntu:~$ grep ^kernel /boot/grub/menu.lst kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=hvc0 kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single kernel /boot/memtest86+.bin

    Tenga en cuenta que el parámetro console apunta a hvc0 en lugar de a ttyS0 y que falta el parámetro xen_emul_unplug=unnecessary. De nuevo, sus opciones pueden ser diferentes.

  5. Edite el archivo /boot/grub/menu.lst con el editor de texto que prefiera (por ejemplo, vim o nano) para cambiar la consola y añadir los parámetros que identificó anteriormente a las entradas de arranque.

    title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual (recovery mode) root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, memtest86+ root (hd0) kernel /boot/memtest86+.bin
  6. Verifique que las entradas de kernel contengan ahora los parámetros correctos.

    ubuntu:~$ grep ^kernel /boot/grub/menu.lst kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/memtest86+.bin
  7. [Solo para Ubuntu 14.04 y posterior] A partir de Ubuntu 14.04, las AMI de Ubuntu con respaldo en el almacén de instancias utilizan una tabla de partición GPT y una partición EFI independiente montada en /boot/efi. El comando ec2-bundle-vol no agrupará esta partición de arranque, por lo que necesita comentar la entrada /etc/fstab para la partición EFI tal y como se muestra en el siguiente ejemplo.

    LABEL=cloudimg-rootfs / ext4 defaults 0 0 #LABEL=UEFI /boot/efi vfat defaults 0 0 /dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Para crear una AMI desde una instancia de Ubuntu con respaldo en el almacén de instancias

En este procedimiento se presupone que ha satisfecho los requisitos previos que se indican en Requisitos previos.

En el siguiente ejemplo, reemplace cada marcador de posición del usuario con su propia información.

  1. Cargue las credenciales en la instancia. Estas credenciales se utilizan para garantizar que solo usted y Amazon EC2 pueden obtener acceso a la AMI.

    1. Cree un directorio temporal en la instancia para las credenciales del modo siguiente:

      ubuntu:~$ mkdir /tmp/cert

      Esto le permite excluir las credenciales de la imagen creada.

    2. Copie el certificado X.509 y la clave privada del equipo en el directorio /tmp/cert de la instancia utilizando una herramienta de copia segura como scp. La opción -i my-private-key.pem del comando scp es la clave privada que utiliza para conectarse a la instancia con SSH, no la clave privada X.509. Por ejemplo:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00

    Puesto que se trata de archivos de texto sin formato, también puede abrir el certificado y la clave con un editor de texto y copiar el contenido en nuevos archivos en /tmp/cert.

  2. Prepare el paquete a cargar en Amazon S3 ejecutando el comando ec2-bundle-vol desde la instancia. Asegúrese de especificar la opción -e para excluir el directorio en el que están almacenadas las credenciales. De forma predeterminada, el proceso de agrupación excluye los archivos que podrían contener información confidencial. Estos archivos incluyen *.sw, *.swo, *.swp, *.pem, *.priv, *id_rsa*, *id_dsa* *.gpg, *.jks, */.ssh/authorized_keys y */.bash_history. Para incluir todos estos archivos, use la opción --no-filter. Para incluir algunos de estos archivos, use la opción --include.

    importante

    De forma predeterminada, el proceso de agrupación de la AMI crea una serie de archivos comprimidos y cifrados en el directorio /tmp que representa el volumen raíz. Si no dispone de suficiente espacio libre en disco en /tmp para almacenar el paquete, necesita especificar una ubicación distinta para almacenar el paquete mediante la opción -d /path/to/bundle/storage. Algunas instancias tienen almacenamiento efímero montado en /mnt o en /media/ephemeral0 que puede utilizar, o también puede crear, asociar y montar un nuevo volumen de Amazon EBS para almacenar el paquete. Para obtener más información, consulte Creación de un volumen de Amazon EBS en la Guía del usuario de Amazon EBS.

    1. Debe ejecutar el comando ec2-bundle-vol necesario como raíz. Para la mayoría de comandos, puede utilizar sudo para obtener permisos elevados, pero en este caso debe ejecutar sudo -E su para mantener las variables de entorno.

      ubuntu:~$ sudo -E su

      Tenga en cuenta que la pregunta bash ahora le identifica como el usuario raíz y que el signo de dólar se ha sustituido por un hash tag, lo que indica que se encuentra en un shell raíz:

      root@ubuntu:#
    2. Para crear el paquete de la AMI, ejecute el comando ec2-bundle-vol del modo siguiente.

      root@ubuntu:# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u your_aws_account_id -r x86_64 -e /tmp/cert --partition gpt
      importante

      Para las instancias HVM de Ubuntu 14.04 y posterior, añada la marca --partition mbr para agrupar las instrucciones de arranque correctamente; de lo contrario, la AMI recién creada no arrancará.

      La creación de la imagen puede llevar unos minutos. Cuando el comando se complete, el directorio tmp contiene el paquete (image.manifest.xml, además de varios archivos image.part.xx).

    3. Salga del shell raíz.

      root@ubuntu:# exit
  3. (Opcional) Para añadir más volúmenes de almacén de instancias, edite los mapeos de dispositivos de bloques del archivo image.manifest.xml de la AMI. Para obtener más información, consulte Mapeos de dispositivos de bloques.

    1. Cree una copia de seguridad del archivo image.manifest.xml.

      ubuntu:~$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. Reformatee el archivo image.manifest.xml para que sea más fácil de leer y editar.

      ubuntu:~$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. Edite los mapeos de dispositivos de bloques en image.manifest.xml con un editor de texto. En el siguiente ejemplo se muestra una nueva entrada para el volumen de almacén de instancias ephemeral1.

      <block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping> <mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping> <mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping>
    4. Guarde el archivo image.manifest.xml y salga del editor de texto.

  4. Para cargar el paquete a Amazon S3, ejecute el comando ec2-upload-bundle del modo siguiente.

    ubuntu:~$ ec2-upload-bundle -b my-s3-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
    importante

    Si tiene previsto registrar la AMI en una región distinta a US East (N. Virginia), debe especificar tanto la región de destino con la opción --region como una ruta para el bucket que ya exista en la región de destino o bien una ruta para el bucket exclusiva que pueda crearse en la región de destino.

  5. (Opcional) Una vez que el bucket se ha cargado en Amazon S3, puede eliminar el paquete del directorio /tmp de la instancia utilizando el siguiente comando rm:

    ubuntu:~$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    importante

    Si ha especificado una ruta con la opción -d /path/to/bundle/storage en Paso 2, utilice la misma ruta a continuación, en lugar de /tmp.

  6. Para registrar la AMI, ejecute el comando register-image de la AWS CLI del modo siguiente.

    ubuntu:~$ aws ec2 register-image --image-location my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    importante

    Si ha especificado previamente una región para el comando ec2-upload-bundle, especifique la misma región de nuevo para este comando.

  7. [Ubuntu 14.04 y posterior] Elimine el comentario de la entrada EFI en /etc/fstab; de lo contrario, la instancia en ejecución no podrá reiniciarse.