¿Necesitas almacenamiento de alto rendimiento para tus instancias EC2?
Amazon EBS te permite crear volúmenes de almacenamiento persistente que se conectan fácilmente a tus instancias. Es ideal para bases de datos, aplicaciones críticas o cargas de trabajo que requieren durabilidad y velocidad. En este post te explico cómo funciona, sus tipos y buenas prácticas para optimizar costos y rendimiento en la nube.
Para que sirve? Tiene varios usos dependiendo del objetivo, sin embargo su principal uso es el almacenamiento en bloques escalables y de alto rendimiento que se pueden utilizar con instancias de Amazon Elastic Compute Cloud (Amazon EC2). Y esto que es? Bueno es simplemente un “Disco Duro Virtual”
Por otro lado tenemos las Instantáneas o snapshot, que no son mas que copias de seguridad de los volúmenes.
Son persistentes, es decir, se mantienen los datos incluso si la instancia EC2 se elimina si tiene la condición. Y también cuenta con alta disponibilidad ya que se replica automáticamente dentro de su zona de disponibilidad. También tiene cifrado con KMS, se puede cifrar en reposo o en transito y las instantáneas que se hagan de un volumen cifrado también estarán cifradas.
Supongamos que tienes datos almacenados en un volumen EBS adjunto a una instancia EC2, y el equipo de seguridad detecta actividad sospechosa en esa instancia. Te solicitan acceso al volumen para realizar una investigación, pero no puedes detener ni la instancia EC2 ni el volumen en uso.
¿Qué hacer en este caso?
Puedes crear un snapshot del volumen EBS, luego restaurar ese snapshot en un nuevo volumen y montarlo en una instancia EC2 aislada. Una vez hecho esto, habilitas el acceso para el equipo de seguridad, quienes podrán realizar su análisis forense sin afectar el entorno de producción.
Veremos como crear un volumen
Como aumentar la capacidad del volumen.
Crearemos un Snapshot de un volumen EBS existente
Adjuntaremos ese Snapshot a una instancia EC2.
AWS proporciona varios tipos de volúmenes EBS:
Una es de Propósito General y la otra es de IOPS Input and Output Intensive Operation.
Si se espera que las solicitudes a la instancia EC2 por ejemplo sean moderadas, lo normalito, usamos la de Propósito general que tiene 2 versiones: gp2 y gp3.
Si tenemos una Instancia Ec2 con cargas de entradas y salidas intensivas, seria conveniente usar los volúmenes de tipo io1/io2.
AWS en su pagina web tiene toda la información detallada sobre los tipos de volúmenes y sus casos de uso.
Para ver como funciona EBS debemos tener una instancia EC2 operativa.
Ingresamos a la terminal en linux y ejecutamos el comando lsblk que se utiliza para listar información sobre los dispositivos de bloques del sistema, como discos duros, particiones, volúmenes EBS, unidades USB, etc.

Este es el volumen EBS que trae la instancia EC2 por defecto.
Vamos a crear un volumen EBS nuevo, lo adjuntamos a la instancia EC2, ejecutamos nuevamente el comando lsblk y veamos que pasa.
Vamos a AWS -> Buscamos EC2 -> En el panel derecho ubicamos Elastic Block Storage -> Volumes -> Create Volume.
En Voume Settings: Volume Type: General Purpose SSD (gp3) -> bajamos hasta la parte de Availability Zone. Debemos tener en cuenta que los Volúmenes EBS se crear por Zona de disponibilidad. Seleccionamos la AZ donde se encuentre la Instancia EC2 que tenemos.
El esto de opciones las dejamos por defecto por ahora. -> Create Volume.
Mientras se crea podemos editar el nombre y colocarle uno: ebs-prueba-1.
Hemos creado un Volumen EBS de x capacidad. (30GB para este ejemplo)
A continuacion lo adjuntamos a la instancia EC2.
Para esto seleccionamos el volumen EBS que acabamos de crear, -> Actions -> Attach volume

Se nos mostrará las opciones para seleccionar una instancia EC2 y un punto de montaje donde nos gustaría asignar el volumen.
Amazon nos dice que los nombres de dispositivos recomendados para Linux: /dev /SDA1 para el volumen raíz. Y /dev/sdf hasta sdp para volúmenes de datos.

Luego click en Attach Volume.
Debemos esperar un par de minutos.
Volvamos a nuestra instancia EC2
Ejecutamos el comando lsblk

Esta vez nos muestra el volumen root de 20GB y otro de 30GB que es el volumen que acabamos de adjuntar.
En este punto el volumen EBS esta disponible pero en linux aun no se puede usar.
Como el volumen esta vacío debemos darle formato. Ejecutamos el comando
sudo mkfs -t ext4 /dev/xvdf

No hagas esto si el volumen contiene datos (por ejemplo, si viene de un snapshot), porque lo borrarías.
Si no logras identificar tu volumen EBS puedes ejecutar el comando:
sudo fdisk -l y te ayudará a identificar el volumen por el tamaño.
Dependiendo de la distribución de linux el volumen puede llamarse xvdf
, nvme1n1
, sdf
, etc
Luego de ejecutar el comando fdisk creamos un punto de montaje:
sudo mkdir /mnt/ebs
Ahora si montamos el volumen:
sudo mount /dev/xvdf /mnt/ebs
Verificamos con lsblk
Podemos hacer que automáticamente se monte al iniciar editando el archivo
sudo nano /etc/fstab
Y agregamos esta línea:
/dev/xvdf /mnt/ebs ext4 defaults,nofail 0 2
Usamos nofail para evitar que un error en el montaje impida el arranque de la instancia.
El comando df -h en Linux sirve para ver el uso del espacio en disco de forma legible para humanos.
Listo.
Asi es como se adjunta o se conecta un volumen EBS a una Instancia EC2.
Aprovechemos de que hemos llegado hasta aquí para ver como podemos incrementar el tamaño del volumen EBS.
Para esto nos dirigimos a la consola de AWS, ubicamos el volumen que queremos aumentar de tamaño, -> click en Modify.

Y simplemente en la parte de Size cambiamos a un tamaño superior. AWS no permite disminuir el tamaño de un volumen EBS ya existente.

Y click en Modify. Confirmamos y listo. Esperamos un par de minutos.

Recordemos hacer clic en el botón de actualizar.

Volvemos a la terminal y ejecutamos el comando
sudo fdisk -l
Podemos ver que el tamaño del volumen ha aumentando.
Frecuentemente debemos hacer un snapshot o copia de seguridad. Normalmente esto deberíamos tenerlo automatizado. Aun así, vamos a crear un snapshot manualmente.
Primeramente usaremos el volumen EBS con el que hemos venido trabajando.
Le agregamos una carpeta y creamos un par de archivos dentro de esa carpeta.
Recordemos que hemos montado el volumen en /mnt/ebs
cd /mnt/ebs
mkdir folder1
cd folder1
touch file1.txt
nano file1.txt
Escribimos cualquier cosa.
Guardamos.

Vamos a la consola de AWS. Ubicamos el volumen al que queremos hacerle el snapshot.
Lo seleccionamos, y vamos Actions -> Create Snapshot.

Le damos un nombre al snapshot -> Crear.
Nos dirigimos a snapshot en el menu derecho.

Y podemos ver el snapshot.
Lo siguiente será crear un volumen a partir de nuestra snapshot.
Seleccionamos la snapshot -> Actions -> Create Volume from snapshot.

Dejamos los valores que tiene. Aseguramos que este en la misma AZ que la instancia EC2 -> Create volume.
Nos vamos a Volumes y deberá estar disponible nuestro nuevo volumen EBS creado a partir de la snapshot.
Le podemos dar un nombre propio para identificarlo.
Creamos una nueva instancia EC2 o usaremos una que ya tengamos creada para adjuntarle el nuevo volumen.
Volvemos a volumes -> Seleccionamos nuestro volumen -> Actions Attach Volume.


Crear.
Esperamos unos minutos.
Ingresamos a la Instancia EC2.
Ejecutamos los comandos para montar el volumen.
lsblk

Esta vez elegí xvdg
Creamos un puento de Montaje
sudo mkdir /mnt/ebs-prueba-2
Montamos el Volumen
sudo mount /dev/xvdg /mnt/ebs-prueba-2
Ingresamos a la carpeta /mnt/ebs-prueba-2 y podemos ver nuestros archivos

Recuerda borrar los snapshot que ya no vayas a utilizar.