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.
Temas
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)
-
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
-
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.
-
Cargue las credenciales en la instancia. Estas credenciales se utilizan para garantizar que solo usted y Amazon EC2 pueden obtener acceso a la AMI.
-
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.
-
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
del comando scp es la clave privada que utiliza para conectarse a la instancia con SSH, no la clave privada X.509. Por ejemplo:my-private-key
.pemyou@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
. -
-
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
. Algunas instancias tienen almacenamiento efímero montado en/path/to/bundle/storage
/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.-
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]#
-
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
-u123456789012
-r x86_64 -e /tmp/cert --partitiongpt
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 archivosimage.part.
xx
). -
Salga del shell raíz.
[root ec2-user]#
exit
-
-
(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.-
Cree una copia de seguridad del archivo
image.manifest.xml
.[ec2-user ~]$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
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
-
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 instanciasephemeral1
.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> -
Guarde el archivo
image.manifest.xml
y salga del editor de texto.
-
-
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 -ayour_access_key_id
-syour_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. -
(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
en Paso 2, utilice dicha ruta en lugar de/path/to/bundle/storage
/tmp
. -
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 --nameAMI_name
--virtualization-typehvm
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.
-
GRUB Legacy (versión 0.9
x
o inferior) debe estar instalado en la instancia. Verifique si dispone de GRUB Legacy e instálelo si fuera necesario.-
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.9
x
, por lo que debe instalarse GRUB Legacy. Continúe en Paso 2. Si ya dispone de GRUB Legacy, puede pasar a Paso 2. -
Instale el paquete
grub
utilizando el siguiente comando.ubuntu:~$
sudo apt-get install -y grub
-
-
Instale los siguientes paquetes de administración de particiones con el administrador de paquetes de la distribución.
-
gdisk
(algunas distribuciones llaman a este paquetegptfdisk
) -
kpartx
-
parted
Utilice el siguiente comando.
ubuntu:~$
sudo apt-get install -y gdisk kpartx parted
-
-
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
yxen_emul_unplug=unnecessary
. Sus opciones pueden ser diferentes. -
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 ahvc0
en lugar de attyS0
y que falta el parámetroxen_emul_unplug=unnecessary
. De nuevo, sus opciones pueden ser diferentes. -
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 singleconsole=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 -
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
-
[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.
-
Cargue las credenciales en la instancia. Estas credenciales se utilizan para garantizar que solo usted y Amazon EC2 pueden obtener acceso a la AMI.
-
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.
-
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
del comando scp es la clave privada que utiliza para conectarse a la instancia con SSH, no la clave privada X.509. Por ejemplo:my-private-key
.pemyou@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
. -
-
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
. Algunas instancias tienen almacenamiento efímero montado en/path/to/bundle/storage
/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.-
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:#
-
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
-uyour_aws_account_id
-r x86_64 -e /tmp/cert --partitiongpt
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 archivosimage.part.
xx
). -
Salga del shell raíz.
root@ubuntu:#
exit
-
-
(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.-
Cree una copia de seguridad del archivo
image.manifest.xml
.ubuntu:~$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
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
-
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 instanciasephemeral1
.<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> -
Guarde el archivo
image.manifest.xml
y salga del editor de texto.
-
-
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 -ayour_access_key_id
-syour_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. -
(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
en Paso 2, utilice la misma ruta a continuación, en lugar de/path/to/bundle/storage
/tmp
. -
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 --nameAMI_name
--virtualization-typehvm
importante
Si ha especificado previamente una región para el comando ec2-upload-bundle, especifique la misma región de nuevo para este comando.
-
[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.