Administración de instancias EC2, volumenes y snapshots

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

EC2 (computación elástica) es la capa de AWS que permite el aprovisionamiento de servidores virtuales de forma casi inmediata. Xen es el hypervisor utilizado en esta infraestructura y posibilita el cambiar la talla de los servidores virtuales, según nuestras necesidades de rendimiento.

Para modificar el tamaño de una instancia es necesario pararla antes.

Tipos de instancias

  • A demanda: Podemos crear o destruir instancias en el momento que queramos a un bajo coste y sin compromisos contractuales que nos obliguen a mantener una instancia por un largo periodo de tiempo o a pagar por ellas por adelantado. Pagaremos en función de la talla y hora de uso.
  • Reservadas: Conocemos de antemano el tiempo que vamos a utilizar las instancias. Por ejemplo, sabemos que las vamos a utilizar seguro durante uno o tres años. Estas instancias se pagan por anticipado y ofrecen un gran descuento en comparación con las distancias a demanda.

IMPORTANTE: No se pueden convertir instancias a demanda a reservada. Es decir, una instancia reservada o a demanda es un concepto de facturación. El sistema de Amazon revisa cuántas instancias reservadas hemos comprado por contrato y de qué tipo y lo compara con las instancias que estamos ejecutando para realizar la facturación de manera correcta.

  • Subasta: Indicamos el precio máximo que pagaríamos por ella en una hora. Si hay instancias disponibles al precio que nos interesa, podremos comprar esa instancia por una hora. En cambio, como los precios suben y bajan constantemente, si el precio de nuestra instancia ha subido, Amazon la terminará dándonos una hora de preaviso sin cobrarnos por esa hora. Obviamente, este tipo de instancias son las más baratas.

Por ejemplo, tenemos una aplicación de venta de entradas que, habitualmente, utiliza dos servidores WEB. Sin embargo, en el periodo de Navidad o en el de venta de entradas para un evento especial (concierto), se necesitan nuevas instancias que ayuden a soportar la carga puntual. En este caso, añadiremos un par de nuevas instancias a demanda que podremos terminar una vez finalizado el periodo crítico.

Las instancias a subasta se pueden utilizar, por ejemplo, para aplicaciones que necesitan potencia de cálculo. Es decir, a más instancias, más rápido resolveremos un cálculo.

Familias de  instancias

Creación de instancias EC2

Amazon siempre recomienda crear instancias que utilicen volúmenes EBS en el disco de sistema operativo debido a la flexibilidad de este tipo de discos, tal y como se detalla en este documento.

Si una instancia con disco EBS falla, podemos:

  • Reiniciarla de nuevo.
  • Crear un snapshot automáticamente de todos los volúmenes EBS y crear una nueva AMI.
  • Reasignar los volúmenes EBS a otra instancia para hacer troubleshooting y luego volverlos a asignar a la instancia original.

Para crear una instancia vamos a la consola de AWS y EC2:

En la siguiente pantalla podemos ver el estado de salud de las diferentes zonas de disponibilidad.

Si le damos al botón “Launch instance”, comenzaremos el proceso de creación de una nueva instancia.

Si no nos gustan los sistemas operativos que aparecen por defecto, podemos ir al botón “Marketplace” y utilizar el buscador para encontrar otro que nos interese. A mi, personalmente, me gusta CentOS porque es libre y está basado en RedHat.

Comentar que la versión de Linux de Amazon también está basada en RedHat y trae instaladas por defecto ciertas herramientas de la infraestructura de Amazon. No obstante, voy a elegir CentOs.

A continuación, elegiré la talla T2 Nano, ya que la utilizaremos para crear estos apuntes.

Seguidamente, podemos configurar el VPC donde queremos ubicar nuestra instancia, la zona de disponibilidad, asignar una IP pública automáticamente, asignar un rol de IAM, decidir si queremos apagar o terminar la instancia al pararla (terminarla la elimina), protegerla ante una terminación accidental, habilitar el rendimiento con Cloudwatch, ubicarla en hardware dedicado o en uno compartido.

En “Advanced details” podemos escribir los comandos que queramos cuando arranque la instancia. Por ejemplo, yum update -y.

Para el ejemplo, lo dejaremos todo por defecto.

Luego, asignaremos 8GB de disco magnético.

Seguidamente, añadiremos etiquetas personalizadas a la instancia:

Asignaremos o crearemos un grupo de seguridad para esta instancia. Un grupo de seguridad son reglas de firewalls:

Obviamente, no es una buena práctica abrir el puerto 22 para los servidores de la DMZ, pero ya nos sirve para este ejemplo.

Como es la primera vez que creo una instancia, he de crear un fichero de clave privada que me servirá para poder conectarme por SSH a mis instancias:

Esperamos 5 minutos a que se cree la instancia para podernos conectar a ella.

En las distribuciones CentOs, el proceso de instalación crear automáticamente el usuario centos, así que utilizaremos nuestro fichero de llaves para conectarnos a la instancia:

Como podemos comprobar, este usuario tiene, por defecto, acceso a root mediante sudo.

Para apagar la instancia, iremos a la consola de AWS –>  EC2 y elegiremos parar.

IMPORTANTE: Terminar destruye la instancia.

Al parar la instancia también estoy deteniendo el consumo, ya que Amazon cobra por tiempo de uso de los recursos de CPU, disco, etc.

He visto que todas las instancias de diferentes tallas que he utilizado no usan LVM en el disco de root.

Si eres administrador de Amazon AWS en una gran empresa, te interesará automatizar la creación de instancias EC2 y otros recursos de AWS con CloudFormation.

Asignación de roles a instancias EC2 de Amazon AWS

La asignación de un rol a una instancia es una mejora en la seguridad de Amazon AWS porque permite ejecutar la línea de comandos de AWS sin que tengamos que almacenar nuestro Access Key ID y su contraseña en cada una de nuestras instancias.

Por ejemplo, podemos crear una instancia con un rol de administración de S3 y ejecutar comandos de S3 por la línea de comandos sin solicitud de contraseña porque el rol S3 nos da permisos de administración de S3.

Los roles se pueden asignar a las instancias en el momento de su creación. Una vez creada no se puede asignar ningún rol pero sí pueden ser modificadas las políticas del que se le asignó en un principio.

Para asignar un rol a una instancia, primero tenemos que crearlo desde IAM.

Cuando creemos una instancia nueva, podremos elegir el rol que hemos creado. Desde esa instancia tendremos privilegios para ejecutar comandos de AWS (por la línea de comandos) sin tener que almacenar el Access Key ID y su contraseña.

Modificar la talla de una instancia

Para poder modificar la talla de una instancia, primero tendremos que pararla desde la consola de EC2. Luego, vamos al siguiente menú para aplicar el cambio y volvemos a arrancar la instancia:

Utilizar putty para conectarnos a una instancia EC2

Con el programa puttygen, abrimos el fichero .pem que habíamos creado anteriormente durante la creación de la instancia.

Seguidamente, lo guardamos con el botón “Save private key”.

Ahora, abrimos el programa putty y utilizamos la clave privada en formato putty:

Conectarnos a una instancia EC2 sin utilizar el sistema de clave pública y primaria (fichero .pem)

Si nos interesa conectarnos por SSH o SFTP a los servidores de AWS, configuraremos SSH para que acepte la autentificación por usuario y contraseña.

Esto se hace modificando la siguiente directiva en el fichero /etc/ssh/sshd_config:

PasswordAuthentication yes

Y luego reiniciamos el servicio SSH (systemctl restart sshd).

Modificar el hostname de una instancia

Modificaremos el fichero /etc/hostname, tal y como se indica en el siguiente ejemplo:

Grupos de seguridad

Desde los grupos de seguridad configuramos las reglas de firewalls. Por defecto, está bloqueado todo el tráfico entrante y está permitido todo el tráfico saliente, pero lo podemos modificar según nuestras necesidades.

Acceso a los metadatos de una instancia EC2

Consultaremos los metadatos de nuestra instancia accediendo a la URL http://169.254.169.254/latest/meta-data.

Ejemplo de acceso con curl:

[[email protected] ~]# curl http://169.254.169.254/latest/meta-data/

ami-id

ami-launch-index

ami-manifest-path

block-device-mapping/

hostname

instance-action

instance-id

instance-type

local-hostname

local-ipv4

mac

metrics/

network/

placement/

product-codes

profile

public-hostname

public-ipv4

public-keys/

reservation-id

security-groups

services/[[email protected] ~]#

[[email protected] ~]# curl http://169.254.169.254/latest/meta-data/public-ipv4

52.214.83.49[[email protected] ~]#

Consulta de tags personalizados de recursos de Amazon EC2

Es una buena práctica personalizar algunos tags sobre los recursos de EC2 que vamos creando como, por ejemplo, el cliente, hostname del servidor, si es de producción, desarrollo o test, el servicio que presta un servidor (base de datos, webserver, etc.), zona de red (MZ o DMZ), etc.

Con esto, luego es mucho más fácil obtener un inventario de servicios o, incluso, un script para parchear, por ejemplo, todos los servidores de producción.

Adjunto un ejemplo para obtener las consultas:

# aws ec2 describe-instances --query 'Reservations[].Instances[].[Tags[?Key==Hostname] | [0].Value,Tags[?Key==Environment] | [0].Value,Tags[?Key==<strong>Customer</strong>] | [0].Value,InstanceId]' --output text |column -t

En este caso, he obtenido una lista de los servidores que contienen las etiquetas personalizadas Hostname y Customer más la etiqueta predefinida en Amazon AWS, InstanceId.

Añadir un nuevo volumen a una instancia EC2

Añadir un nuevo volumen se refiere a añadir más espacio de disco. Y se puede hacer en caliente, tal y como podemos observar en las siguientes capturas de pantalla:

Elegimos el tamaño del volumen, el tipo y la zona de disponibilidad

A continuación, asignamos el volumen que acabamos de crear a una instancia.

Si nos conectamos al servidor, veremos que el volumen ya aparece. En este caso, es un sistema Linux Centos 7.

Podemos utilizar el volumen con normalidad:

Crear un snapshot de un volumen

Un snapshot de una copia de seguridad de un volumen. Antes de hacer un cambio en el sistema operativo como, por ejemplo, actualización de parches o de kernel, es conveniente hacer un snapshot por si tuviésemos que hacer marcha atrás del cambio. Documentación oficial de Amazon.

Los snapshots de los discos de sistema operativo hay que hacerlos con el sistema parado para asegurarnos de que la copia es consistente. Ocurre lo  mismo si queremos hacer un snapshot de un disco EBS aunque, en este caso, sólo debemos asegurarnos de que las aplicaciones no están escribiendo.

Para crear un snapshot, lo haremos de la siguiente manera:

Simular una incidencia y recuperar el servicio con el snapshot creado anteriormente

Ahora voy a la instancia y desasigno el volumen.

Comprobamos que ya no lo vemos en el sistema operativo:

A continuación, vuelvo a crear un volumen basado en el snapshot creado anteriormente:

El volumen basado en el snapshot, incluso lo podemos crear de otro tipo (SSD, por ejemplo):

Una vez que tenemos el volumen disponible, lo asignamos de nuevo a la instancia:

Como podemos comprobar, seguimos viendo el fichero que habíamos creado anteriormente:

Parada y arranque de instancias EC2 por línea de comandos

Últimamente estoy jugando con la línea de comandos de Amazon AWS y voy posteando algunos de los comandos que encuentro más útiles. Esta vez vamos a parar y a arrancar una instancia EC2 por la línea de comandos.

Parada de la instancia

# aws ec2 stop-instances --instance-ids i-0093481eeaab71526
{
"StoppingInstances": [
{
"InstanceId": "i-0093481eeaab71526",
"CurrentState": {
"Code": 64,
"Name": "stopping"
},
"PreviousState": {
"Code": 16,
"Name": "running"
}
}
]
}
#

Si vamos a la consola, la veremos en estado «stopping» hasta que, definitivamente, la veamos en «stopped».

Arranque

# aws ec2 start-instances --instance-ids i-0093481eeaab71526
{
"StartingInstances": [
{
"InstanceId": "i-0093481eeaab71526",
"CurrentState": {
"Code": 0,
"Name": "pending"
},
"PreviousState": {
"Code": 80,
"Name": "stopped"
}
}
]
}
#

Troubleshooting de instancias EC2 de Amazon AWS

Las instancias de Amazon AWS no disponen de una consola como el hardware dedicado o los servidores de VMWare, por lo que no es posible acceder en modo rescate o con el boot.iso de RedHat, por ejemplo, tal y como se detalla en la documenación oficial de Amazon.

Lo que sí podemos hacer es consultar los logs del sistema:

En el caso anterior, está todo bien pero ahora voy a eliminar el kernel del sistema y rebotaré el servidor.

Vemos que las instancias contienen errores

Vamos a revisar el log del sistema operativo:

Según el tipo de error que sea, podemos hacer varias cosas:

  • Abrir un caso al soporte de Amazon.
  • Asignar el disco de boot a otra instancia en la misma zona de disponibilidad que el servidor con la incidencia para tratar de arreglar el problema y volverlo a asignar luego a la instancia original.
  • Recrear la máquina virtual desde cero.

Por lo tanto, es muy recomendable lanzar snapshots periódicos del disco de boot o antes de algún cambio importante para poder hacer marcha atrás en caso de problemas. Los snapshots requieren parada del servidor.

¿Qué ocurre cuando finaliza el contrato de una instancia reservada EC2?

Cuando contratamos instancias reservadas en Amazon EC2, las podemos contratar durante un año o tres años, pagando mes a mes, pago parcial o pago íntegro, teniendo diferentes descuentos cada una de las modalidades.

Desde la consola EC2, se puede obtener el estado del contrato y cuántos días quedan para que expire. Cuando llega ese momento, NO se autorenueva, queda en estado retired y tenemos que volver a contratar las instancias reservadas.

Si no renuevas el contrato y la instancia sigue corriendo, deberás tener en cuenta de que se estará cobrando con el precio a demanda.

Cuando contratas una nueva instancia se queda en estado payment-pending hasta que queda en estado activo cuando se formaliza el pago.

Fuente oficial: https://aws.amazon.com/es/premiumsupport/knowledge-center/ec2-ri-retired/

Te puede interesar

¿Te ha gustado? Compártelo

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email
About Author

Contenido Relacionado

Artículos Recientes

Deja un comentario