Sube tu API de nodeJS a la nube de AWS
Ya tengo mi flamante API hecha con nodeJS ahora la quiero publicar en la nube con AWS, ¿qué hago? Aquí te lo explico

En este post estimado lector te mostraré como subir tu API a la nube con AWS 🚀, voy a suponer que ya tienes una cuenta en AWS, en un post futuro te mostraré cómo crearte una cuenta gratuita.

Una vez iniciaste la sesión en la consola de AWS, se nos muestra la pantalla inicial donde podemos observar los servicios disponibles que nos ofrece:

EC2

Arrancamos por EC2, es un servicio de AWS que nos permite tener un servidor en la nube, al cual se le llama instancia. Le damos clic para ingresar a él. Una vez dentro, se nos muestran varias opciones propias de este servicio, nos dirigimos a la parte inferior y le damos clic al botón Lanzar la instancia:

Se nos muestra un asistente en el cual tendremos que ir configurando nuestra instancia o servidor, el primer paso es el que nos pide seleccionar que sistema operativo tendremos, y podemos apreciar en la siguiente imagen:

En mi caso seleccionaré Ubuntu, clic en seleccionar. Continuamos y ahora se nos pide seleccionar un tipo de instancia, seleccionamos la que viene seleccionada por defecto, la cual además es gratuita, hay que tener en cuenta que no todas las opciones en cada uno de los pasos son gratuitas, tener cuidado para evitar cargos a nuestra tarjeta de crédito no deseadas.

Dejamos los valores por defecto en el paso 3 y damos clic a siguiente:

En el siguiente paso se nos muestra las opciones de almacenamiento, para este API 8 Gb son suficientes además se apega a nuestra capa gratuita, también es de resaltar que tenemos varios tipos de volumen, en nuestro caso utilizaremos un SSD de uso general el cual tiene un rendimiento aceptable, clic en siguiente:

En el paso 5 tenemos la oportunidad de agregar tags a nuestra instancia, son sencillamente pares clave-valor, en nuestro caso agregamos una:

En el paso siguiente tenemos que configurar las opciones de seguridad para las conexiones que haremos desde internet hacia nuestra instancia, viene con una regla por defecto, agregaremos una más, para hacer nuestras pruebas, para ello usaremos el puerto 3000 y el origen lo dejaremos como 0.0.0.0 que en otras palabras permite conexiones de cualquier lugar del mundo, esto no es una práctica recomendada en producción, en donde se recomienda lo siguiente "bloquea todo primero, permite sólo lo necesario después", en este caso permitiremos conexiones de cualquier lado por ser una práctica:

Clic en revisar y lanzar

Se nos mostrará la siguiente ventana en donde debemos crear un nuevo par de claves, que viene a ser un archivo con extensión .pem el cual nos permitirá conectarnos a nuestro servidor, debemos descargarlo y guardarlo en un lugar seguro porque si lo extraviamos no habrá forma de recuperarlo ni descargarlo de nuevo, en mi caso yo ya tengo un par de claves, por eso utilizaré uno existente:

Lanzamos nuestra instancia, y nos aparece un mensaje como el siguiente:

Pasos previos a la conexión

Nos dirigimos al servicio EC2 y vemos que en instancias en ejecución tenemos la que acabamos de crear, estupendo!

Damos clic al ID de la instancia para entrar en ella y ver su información detallada:

En el caso que estés en una mac o en un sistema linux lo puedes hacer directamente desde la terminal, en el caso de Windows utilizaremos un programa gratuito llamado putty, lo podemos descargar desde aquí.

Como nuestro servidor no tiene una contraseña para conectarnos por terminal sino más bien un archivo .pem entonces será necesario utilizarlo, pero putty no acepta este formato, sino .ppk, no te desesperes, podemos generar uno a partir del .pem, para ello abrimos puttygen (si no lo encuentras, búscalo en archivos de programa > putty) seleccionamos y generamos un archivo ppk.

Primero seleccionamos el archivo pem desde el botón load y finalmente guardamos. No es necesario pulsar Load. Para más información de cómo generar un archivo ppk a partir de un pem click aquí.

Conectándonos por SSH

Abrimos putty y configuramos la autenticación SSH seleccionando nuestro archivo ppk antes generado:

En las opciones de Session ingresamos la IP pública de nuestra instancia que podemos obtener desde la información del servicio EC2 > instancia y nuestro putty quedaría de esta forma:

Más fácil imposible eh? 😁

Nos conectamos con el usuario ubuntu (es el usuario que por defecto usa el sistema operativo que elegimos)

Genial! Ya tenemos una conexión a la terminal de nuestra instancia en AWS, esto es un servidor en la nube listo para hacer lo que querramos dev, felicidades 😎

Primeros pasos en nuestro servidor

Ya estamos conectados a nuestro servidor, brillante como una moneda nueva, ¿qué debemos hacer? actualizarlo para que tenga todos los últimos parches de seguridad, eso lo haces con el siguiente comando:

sudo apt update && sudo apt upgrade

El proyecto que vamos a levantar en el servidor debe estar en un repositorio en la nube como por ejemplo Github, para este proyecto trabajaremos con https://github.com/GeaSmart/ApiRestNode

Una vez que se terminó de actualizar nuestro servidor crearemos una nueva carpeta llamada projects con el siguiente comando:

mkdir projects

y entramos a la carpeta con el comando:

cd projects

Ahora clonamos el proyecto dentro de la carpeta projects con:

git clone https://github.com/GeaSmart/ApiRestNode

ingresamos a la carpeta con el comando cd y listamos lo que contiene con el comando ls y vemos lo siguiente:

Allí están ahora los archivos del proyecto, entonces ahora tenemos que instalar un gestor de paquetes y versiones, porque recordemos que el servidor vino sólo con sistema operativo, para ello usaremos nvm, puedes encontrar más información en este enlace.

Ejecutamos este comando para instalar nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

Para poder usar nvm tendremos que reiniciar el servidor, pero hay otra manera y es ejecutando el comando siguiente:

source ~/.bashrc

Ahora si podemos ver que se detecta la versión de nvm y notemos también que nos encontramos en la carpeta raiz del proyecto, vamos bien! 🤠

Ahora podemos instalar la última versión estable de NodeJS con el siguiente comando:

nvm install --lts

Lo que tenemos que hacer ahora es instalar todas las dependencias del proyecto y ya que nvm nos instaló node, npm y npx. Para hacerlo debemos estar en la carpeta raiz del proyecto (de hecho ya lo estamos) y ejecutamos este comando:

npm install

Ya tenemos todos los prerequisitos instalados, nuestro proyecto también así como todas sus dependencias, entonces "corremos nuetro proyecto" con el script: (el ampersand es para que la ejecución persista aunque cerremos sesión o cancelemos el comando)

npm start &

Si más adelante quisiéramos terminar el proceso node ejecutaríamos los siguientes comandos:

ps -a

kill X

(donde X es el numero de proceso extraído del comando anterior)

Como vemos nuestro servidor está configurado para el puerto 8080, entonces tenemos que ir a los grupos de seguridad de AWS y añadir ese puerto y también el 80, quedando el grupo de seguridad como se muestra:

Y ahora sí, si vamos a la dirección IP pública (o a la DNS de IPv4 pública) de nuestro servidor en AWS con el puerto 8080 tenemos:

Wow, lo estás logrando dev! Ya falta poco 😉

Y qué pasa si queremos ver nuestro webservice en el puerto por defecto del navegador, es decir el 80? Eso lo podemos hacer con re-direccionamiento con Iptables mediante el siguiente comando:

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Con ese comando lo que estamos diciéndole a nuestro servidor es que todo lo que llegue al puerto 80 redireccionalo al 8080. Ahora si vamos al navegador vemos que sin especificar puerto vemos nuestro json que devuelve nuestro web service! En esta ocasión hemos ingresado a través de nuestro DNSpúblico, recuerda dev que puedes usar la dns o la ip, es indistinto.

Recuerda detener tu instancia y verificar que el volumen también no esté generando cargos, porque podrías llevarte una cuenta difícil de pagar si dejas corriendo los servicios de AWS exponiéndote a que sobrepase la capa gratuita.

Pues ya lo tienes 🤠, por fin lo logramos, tenemos nuestro API corriendo en la nube de AWS, esto es genial, más adelante iremos descubriendo más servicios de AWS, acompáñame en los siguientes entradas, y comparte el conocimiento en tus redes sociales 🚀

Deja una respuesta

Tu dirección de correo electrónico no será publicada.