En este artículo se abarcará de forma práctica - teórica cómo realizar el despliegue de una aplicación de NodeJS en una instancia EC2 (Elastic Computed Cloud) de AWS independientemente de si el sistema operativo que se esté usando es Windows, o Linux.
Creación de cuenta en AWS
Cree su cuenta como usuario raíz, pero tenga en cuenta que, por buenas prácticas se aconseja crear usuarios IAM asociados a esta para respetar las buenas prácticas de AWS que sugieren reiteradamente utilizar políticas de mínimo privilegio.
Para crear su cuenta, ingrese a AWS.
Creación de instancia EC2
Una vez tenga su cuenta creada, procedemos a la creación de nuestra instancia.
Para ello, damos clic en la esquina superior izquierda donde dice “Servicios”. Este nos despliega un filtro de búsqueda a su lado en el cual podemos filtrar por “ec2”. Al ingresar, nos encontraremos con el panel de administración de dicho servicio.
Nos dirigimos al panel lateral situado a la izquierda de nuestra pantalla (es desplegable). Y clickeamos en “Instancias”.
Si no tenemos ninguna instancia creada, aparecerá un listado vacío, de tener alguna se nos mostrará de la siguiente manera.
De clic ahora en “Lanzar instancia”, elija un nombre adecuado (relacionado a lo que esté haciendo en lo posible), elija un sistema operativo de preferencia (en mi caso suelo optar por Ubuntu). Y aquí, se le pedirá crear una nueva clave par.
Tener en cuenta que si estás en Linux, deberá descargar el archivo .pem, mientras que si está en Windows, sugiero descargar el archivo en formato .ppk para evitar un paso de conversión.
Una vez creado nuestro clave par, podemos simplemente dar en crear instancia.
Conexión vía SSH
Recordar que, la primera vez que realizamos este proceso, debemos darle permisos a nuestro archivo clave par. Por lo que, si estás en Linux bastaría con ejecutar:
chmod 400 node_app.pem
Y nos conectamos desde consola:
ssh -i "node_app.pem" user@ec0-00-000-000-00.compute-1.amazonaws.com
Mientras que si estás en Windows, deberá realizar la siguiente secuencia:
Right click on the file > properties > security > advanced > disable inheritance > 'Convert inherited permissions into explicit permission on this object'
Click on "allow | everyone | Full Control" > edit > 'select a principal' > type your username > 'check names' > select your username > ok > ok > ok (ok until all windows are closed)
Este 400, o su equivalente en Windows, corresponde a permisos para:
4 = Propietarios
0 = Grupos de usuarios
0 = Resto de usuarios
Posteriormente nos conectamos utilizando el software PUTTY.
Agregue su IP Host. Este es su IPv4 público de su instancia de AWS.
Agregue su usuario a la configuración.
Por último, cargue su archivo .ppk
Y dé click en Open, esto le conectará a su instancia via SSH.
Si aparece un mensaje de error, simplemente de click en aceptar.
Se encontará con una consola como la siguiente:
La magia de bash
En este punto, habremos logrado una conexión exitosa. Por lo que podemos comenzar con nuestros scripts de bash para automatizar la tarea.
El siguiente script hará lo siguiente:
- Verificar si su sistema de AWS es Debian o Ubuntu.
- Instalará Docker y docker-compose según la verificación anterior.
- Descargará el repositorio de github para éste ejemplo.
- Se moverá dentro del repositorio, buildeará y pondrá en marcha los contenedores.
Nota: Mi aporte al script solo es la descarga del repositorio e instalación de los contenedores. En la sección de agradecimientos verán a quién se lo robé.
#!/bin/bash
sudo apt-get update
sudo apt-get install -y \
linux-image-extra-$(uname -r) \
linux-image-extra-virtual
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
if [ -n "$(uname -a | grep Ubuntu)" ]; then
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
else
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
fi
sudo apt-get update
sudo apt-get install -y docker-ce
sudo groupadd docker
sudo usermod -aG docker $USER
# Logout and In again
docker --version
docker run hello-world
# Install Docker Compose on Ubuntu
DC_VERSION=$(curl -L -s -H 'Accept: application/json' https://github.com/docker/compose/releases/latest | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
sudo curl -L "https://github.com/docker/compose/releases/download/$DC_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
# Download repository, build and run containers
git clone https://github.com/brahianpdev/tryhard-devops
cd tryhard-devops
docker-compose build --no-cache
docker-compose up -d
docker ps
echo "Finish!"
Copie el script anterior en un portapapeles, o téngalo a mano. Desde su consola de AWS, cree un archivo con el nombre que desee y dele permisos de ejecución.
touch automation.sh
chmod +x automation.sh
Luego, abra dicho archivo en nano:
nano automation.sh
Pegue el script, guarde y salga del editor.
Por último, ejecute el script:
./automation.sh
En algún momento de este proceso, se le pedirá que presione la tecla ENTER.
Una vez finalizado, escribimos exit
para desconectarnos de SSH.
Grupos de seguridad Nota al margen, es que, dado que nuestra aplicación de Node está corriendo en el puerto 3000, debemos habilitar dicho puerto en los grupos de seguridad de nuestra instancia.
Para ello, nos vamos a Instancias > Seguridad > Grupos de seguridad.
Por último, debemos comprobar el deploy de nuestra aplicación de Node en AWS.
Para hacerlo, seleccionamos nuestra instancia, y copiamos la Dirección IPv4 pública, a la cual le agregaremos después de dos puntos :
el puerto 3000 de nuestra aplicación de Node, de la siguiente manera:
00.000.000.00:3000
Si puedes apreciar el mensaje que responde tu aplicación de Node, el deploy se ha realizado de forma exitosa.
Agradecimientos
Un especial agradecimiento a Rosana Suárez alias Roxross, DevSecops en Naranja X, quien dictó el bootcamp gratuito de DevOps abarcando fuertes pilares de forma práctica.
¡Hasta pronto 👋!
Si deseas colaborar con el contenido, regalame un cafecito ☕