Conversión de la AMI basada en el almacén de instancias a una AMI basada en EBS
Puede convertir una AMI de Linux con respaldo en el almacén de instancias de la que sea propietario a una AMI de Linux respaldada por Amazon EBS.
importante
No puede convertir una AMI que no le pertenece.
Para convertir una AMI con respaldo en el almacén de instancias a una AMI respaldada por Amazon EBS
-
Lance una instancia de Amazon Linux desde una AMI respaldada por Amazon EBS. Para obtener más información, consulte Inicialización de una instancia de EC2 mediante el asistente de inicialización de instancias de la consola. Las instancias de Amazon Linux tienen las herramientas de la AMI y la AWS CLI preinstaladas.
-
Cargue la clave privada X.509 que utilizó para agrupar la AMI con respaldo en el almacén de instancias a la instancia. Esta clave se utiliza para garantizar que solo usted y Amazon EC2 pueden obtener acceso a la AMI.
-
Cree un directorio temporal en la instancia para la clave privada X.509 del modo siguiente:
[ec2-user ~]$
mkdir /tmp/cert
-
Copie la clave privada X.509 del equipo en el directorio
/tmp/cert
de la instancia utilizando una herramienta de copia segura como scp. El parámetromy-private-key
del siguiente comando es la clave privada que utiliza para conectarse a la instancia con SSH. Por ejemplo:you@your_computer:~ $
scp -i
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00my-private-key
.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com
:/tmp/cert/
-
-
Configurar las variables de entorno para usar el AWS CLI. Para obtener más información, consulte Environment variables.
-
(Recomendado) Configure las variables de entorno para la clave de acceso, la clave secreta y el token de acceso de AWS.
[ec2-user ~]$
export AWS_ACCESS_KEY_ID=
your_access_key_id
[ec2-user ~]$
export AWS_SECRET_ACCESS_KEY=
your_secret_access_key
[ec2-user ~]$
export AWS_SESSION_TOKEN=
your_session_token
Configure las variables de entorno para la clave de acceso y la clave secreta de AWS.
[ec2-user ~]$
export AWS_ACCESS_KEY_ID=
your_access_key_id
[ec2-user ~]$
export AWS_SECRET_ACCESS_KEY=
your_secret_access_key
-
-
Prepare un volumen de Amazon Elastic Block Store (Amazon EBS) para la nueva AMI.
-
Cree un volumen de EBS vacío en la misma zona de disponibilidad que la instancia con el comando create-volume. Observe el ID de volumen en el resultado del comando.
importante
Este volumen de EBS debe tener el mismo tamaño o un tamaño mayor que el del volumen raíz del almacén de instancias original.
[ec2-user ~]$
aws ec2 create-volume --size 10 --region
us-west-2
--availability-zoneus-west-2b
-
Asocie el volumen a la instancia respaldada por Amazon EBS utilizando el comando attach-volume.
[ec2-user ~]$
aws ec2 attach-volume --volume-id
volume_id
--instance-idinstance_id
--device /dev/sdb --regionus-west-2
-
-
Cree una carpeta para el paquete.
[ec2-user ~]$
mkdir /tmp/bundle
-
Descargue el paquete para la AMI basada en almacén de instancias en
/tmp/bundle
utilizando el comando ec2-download-bundle.[ec2-user ~]$
ec2-download-bundle -b
amzn-s3-demo-bucket
/bundle_folder
/bundle_name
-m image.manifest.xml -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY --privatekey/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-d /tmp/bundle -
Reconstituya el archivo de imagen desde el paquete utilizando el comando ec2-unbundle.
-
Cambie los directorios a la carpeta del paquete.
[ec2-user ~]$
cd /tmp/bundle/
-
Ejecute el comando ec2-unbundle.
[ec2-user bundle]$
ec2-unbundle -m image.manifest.xml --privatekey
/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-
-
Copie los archivos de la imagen desagrupada al nuevo volumen de EBS.
[ec2-user bundle]$
sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
-
Sondee el volumen por si existiera alguna partición nueva sin agrupar.
[ec2-user bundle]$
sudo partprobe /dev/sdb1
-
Muestre los dispositivos de bloques para encontrar el nombre de dispositivo a montar.
[ec2-user bundle]$
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/sda 202:0 0 8G 0 disk └─/dev/sda1 202:1 0 8G 0 part / /dev/sdb 202:80 0 10G 0 disk └─/dev/sdb1 202:81 0 10G 0 partEn este ejemplo, la partición a montar es
/dev/sdb1
, pero el nombre de dispositivo probablemente será diferente. Si el volumen no está particionado, el dispositivo a montar será similar a/dev/sdb
(sin el dígito final de la partición del dispositivo). -
Cree un punto de montaje para el nuevo volumen de EBS y monte el volumen.
[ec2-user bundle]$
sudo mkdir /mnt/ebs
[ec2-user bundle]$sudo mount
/dev/sdb1
/mnt/ebs -
Abra el archivo
/etc/fstab
del volumen de EBS con el editor de texto que prefiera (por ejemplo vim o nano) y elimine cualquier entrada para volúmenes (efímeros) de almacén de instancias. Puesto que el volumen de EBS está montado en/mnt/ebs
, el archivofstab
se ubica en/mnt/ebs/etc/fstab
.[ec2-user bundle]$
sudo nano /mnt/ebs/etc/fstab
# LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0/dev/sdb /media/ephemeral0 auto defaults,comment=cloudconfig 0 2
En este ejemplo se debe eliminar la última línea.
-
Desmonte el volumen y sepárelo de la instancia.
[ec2-user bundle]$
sudo umount /mnt/ebs
[ec2-user bundle]$
aws ec2 detach-volume --volume-id
volume_id
--regionus-west-2
-
Cree una AMI desde el nuevo volumen de EBS del modo siguiente.
-
Cree una instantánea del nuevo volumen de EBS.
[ec2-user bundle]$
aws ec2 create-snapshot --region
us-west-2
--description "your_snapshot_description
" --volume-idvolume_id
-
Verifique que la instantánea esté completa.
[ec2-user bundle]$
aws ec2 describe-snapshots --region
us-west-2
--snapshot-idsnapshot_id
-
Identifique la arquitectura del procesador, el tipo de virtualización y la imagen del kernel (
aki
) utilizados en la AMI original con el comando describe-images. Para este paso, necesita el ID de AMI de la AMI original con respaldo en el almacén de instancias.[ec2-user bundle]$
aws ec2 describe-images --region
IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3
--image-idus-west-2
ami-id
--output textami-8ef297be
amazon available public machine aki-fc8f11cc instance-store paravirtual xenEn este ejemplo, la arquitectura es
x86_64
y el ID de la imagen del kernel esaki-fc8f11cc
. Utilice estos valores en el siguiente paso. Si el resultado del comando anterior también muestra unari
ID, anótelo también. -
Registre la nueva AMI con el ID de la instantánea del nuevo volumen de EBS y los valores del paso anterior. Si el resultado del comando anterior mostró un ID
ari
, inclúyalo en el siguiente comando con--ramdisk-id
.ari_id
[ec2-user bundle]$
aws ec2 register-image --region
us-west-2
--nameyour_new_ami_name
--block-device-mappings DeviceName=device-name
,Ebs={SnapshotId=snapshot_id
} --virtualization-type paravirtual --architecture x86_64 --kernel-idaki-fc8f11cc
--root-device-namedevice-name
-
-
(Opcional) Una vez que haya probado que puede iniciar una instancia desde la nueva AMI, puede eliminar el volumen de EBS que creó para este procedimiento.
aws ec2 delete-volume --volume-id
volume_id