Conversión de la AMI basada en el almacén de instancias a una AMI basada en EBS - Amazon Elastic Compute Cloud

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
  1. 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.

  2. 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.

    1. Cree un directorio temporal en la instancia para la clave privada X.509 del modo siguiente:

      [ec2-user ~]$ mkdir /tmp/cert
    2. 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ámetro my-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 my-private-key.pem /path/to/pk-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
  3. Configurar las variables de entorno para usar el AWS CLI. Para obtener más información, consulte Environment variables.

    1. (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
    2. 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
  4. Prepare un volumen de Amazon Elastic Block Store (Amazon EBS) para la nueva AMI.

    1. 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-zone us-west-2b
    2. 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-id instance_id --device /dev/sdb --region us-west-2
  5. Cree una carpeta para el paquete.

    [ec2-user ~]$ mkdir /tmp/bundle
  6. 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
  7. Reconstituya el archivo de imagen desde el paquete utilizando el comando ec2-unbundle.

    1. Cambie los directorios a la carpeta del paquete.

      [ec2-user ~]$ cd /tmp/bundle/
    2. Ejecute el comando ec2-unbundle.

      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
  8. 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
  9. Sondee el volumen por si existiera alguna partición nueva sin agrupar.

    [ec2-user bundle]$ sudo partprobe /dev/sdb1
  10. 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 part

    En 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).

  11. 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
  12. 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 archivo fstab 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.

  13. 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 --region us-west-2
  14. Cree una AMI desde el nuevo volumen de EBS del modo siguiente.

    1. 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-id volume_id
    2. Verifique que la instantánea esté completa.

      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snapshot_id
    3. 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 us-west-2 --image-id ami-id --output text IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3 ami-8ef297be amazon available public machine aki-fc8f11cc instance-store paravirtual xen

      En este ejemplo, la arquitectura es x86_64 y el ID de la imagen del kernel es aki-fc8f11cc. Utilice estos valores en el siguiente paso. Si el resultado del comando anterior también muestra un ari ID, anótelo también.

    4. 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 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snapshot_id} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
  15. (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