4 minuto(s) de lectura

Event Sourcing

Qué es AWS EC2

AWS EC2 es un servicio de Amazon que permite a los usuarios alquilar máquinas virtuales en las que poder instalar un sistema operativo.

EC2 permite seleccionar imágenes de sistemas operativos predefinidas en forma de AMI. En este ejemplo vamos a utilizar una imagen de Ubuntu Server 20.04 LTS.

Crear EC2

Crear una máquina virtual es sencillo a través de la consola de AWS. Elige el hardware (e.g: t2.medium de 2 vCPU) con la memoria RAM (al menos 4GB) y capacidad de disco deseada (se recomienda al menos 25GB).

Esta instancia debe ser accesible desde internet y, por lo tanto, debe asignársele una dirección IP pública.

Acceso SSH

Para acceder, se va a utilizar SSH, por lo tanto necesitamos asegurarnos de que el grupo de seguridad tiene el puerto TCP 22 abierto para aceptar conexiones desde cualquier lugar (0.0.0.0/0) o desde nuestra IP o red en concreto si queremos ser más restrictivos.

También, EC2 creará una clave pública y nos ofrecerá guardar la clave privada. Si la descargamos, la podemos colocar en un archivo my-key.pem, o similar, y restringir permisos con

chmod 400 my-key.pem

Ya estamos listos para conectar. Copia la dirección IP pública (i.e: el nombre DNS de la instancia de EC2), abre una terminal y conecta con SSH. Por ejemplo:

ssh -i my-key.pem ubuntu@ec2-54-170-18-162.eu-west-1.compute.amazonaws.com

Ten en cuenta que la dirección IP será diferente en cada caso y el hostname dependerá también de la región en la que se haya creado la instancia.

También ten en cuenta que en este caso el usuario es ubuntu, pero si utilizas otra AMI tendrás que leer la descripción para conocer qué usuario tiene configurado.

Instalar Desktop y VNC

Para acceder, se va a utilizar VNC, por lo tanto necesitamos asegurarnos de que el grupo de seguridad también tiene el puerto TCP 5901 abierto para aceptar conexiones desde cualquier lugar (0.0.0.0/0) o desde nuestra IP o red en concreto si queremos ser más restrictivos.

Una vez dentro de la instancia, y opcionalmente si necesitamos una GUI, podemos ejecutar lo siguiente para instalar el GUI y el servidor VNC. Por simplicidad se omite el sudo en los comandos y se asume que todo se está haciendo como super administrador sudo su. Si se está ejecutando como el usuario ubuntu, no olvides utilizar sudo cuando haga falta.

También asumimos que la variable de entorno $HOME está configurada como HOME=/home/ubuntu.

apt update
apt install ubuntu-desktop -y
apt install tigervnc-standalone-server -y
apt install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal xterm -y

Lo primero que hace es actualizar dependencias en base a los repositorios apt actuales. Instala ubuntu-desktop, un servidor de VNC y unas herramientas como explorador de archivos, terminal, etc.

Vamos a configurar ahora VNC. Se puede hacer de forma manual, o programática. Vamos a verlo de la forma más programática posible porque la mayoría de tutoriales en internet muestran la forma manual. De esta forma podríamos automatizar todo fácilmente.

Creamos una carpeta .vnc

mkdir $HOME/.vnc/

Si quisieramos setear las cosas manualmente ejecutaríamos vncserver y esto lanzaría una serie de pasos para configurar credenciales y crearía archivos de configuración. Pero de forma programática sería como se describe a continuación.

Hay que setear una contraseña por consola. Ten en cuenta que solamente se tendrán en cuenta los 8 primeros caracteres de la contraseña elegida.

echo "sasw" | vncpasswd -f > $HOME/.vnc/passwd

Y restringimos permisos en este fichero

chmod 600 $HOME/.vnc/passwd

Si el servidor VNC está en ejecución, aunque no debería, se puede parar con

vncserver -kill :1

Ahora debemos crear la configuración xstartup para el servidor VNC. Se puede editar el archivo con vim o cualquier otro editor. O también podemos hacerlo de forma programática redirigiendo cada una de las siguientes líneas al final del archivo con echo "lo que sea" >> $HOME/.vnc/xstartup. El archivo debería quedar así

#!/bin/sh
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

Ahora le damos permisos de ejecución

chmod +x $HOME/.vnc/xstartup

y, si hicera falta, si lo hemos creado como super administrador, podríamos cambiarle el ownership para asignárselo al usuario ubuntu

chown -R ubuntu $HOME/.vnc

Podemos ejecutar ahora el servidor VNC que debería utilizar la contraseña y la configuración establecida.

vncserver -localhost no :1

e incluso añadirlo al script inicial para que se ejecute siempre que ubuntu inicie sesión

echo "vncserver -localhost no :1" >> $HOME/.bashrc 

Si estuviésemos con otro usuario, como el super administrador, podríamos ejecutar lo anterior como el usuario ubuntu con

su - ubuntu -c "vncserver -localhost no :1"

Si todo ha ido bien, deberíamos ser capaces de abrir Remmina u otro cliente VNC (de Windows o Linux) y conectarnos al hostname en el display :1 con la contraseña de VNC establecida.

Conectar a: ec2-54-170-18-162.eu-west-1.compute.amazonaws.com:1

Troubleshooting

Si la conexión por VNC no funciona asegúrate de lo siguiente

  1. Comprueba que puedes conectar por SSH. Si la conexión se establece, significará que el problema no es de la conectividad de EC2.
  2. Comprueba que el grupo de seguridad o security group asociado a la instancia de EC2 permite conexiones al puerto 5901, que es el que utiliza VNC.
  3. Comprueba que la contraseña para conectar a VNC es la misma que se había configurado en el paso de vncpasswd -f