Desplegar Node.js en AWS EC2

Desplegar Node.js en AWS EC2

¡Hola! En esta ocasión hablaremos de AWS y EC2. Si aún no has oído hablar de él, ¡prepárate para ingresar a un mundo de posibilidades en la nube! Hoy vamos a analizar estas dos grandes tecnologías y cómo están revolucionando la forma en que desarrollamos e implementamos nuestras aplicaciones.

Primero, aclaremos algunos términos. AWS es el acrónimo de Amazon Web Services, la plataforma de computación en la nube del gigante del comercio electrónico Amazon. EC2 es Elastic Compute Cloud, uno de los servicios que ofrece AWS, que nos permite crear y administrar instancias de servidores virtuales. Es como tener un ordenador virtual en la nube, totalmente configurable y escalable.

¿Por qué debes saber más sobre AWS y EC2?

La respuesta es sencilla: la computación en la nube es el futuro y las empresas están migrando cada vez más sus aplicaciones e infraestructuras a la nube. Dominar estas tecnologías es una habilidad extremadamente relevante y valorada en el mercado laboral.

Al aprender sobre AWS y EC2, tendrá el poder de implementar sus aplicaciones de manera rápida y eficiente, sin preocuparse por comprar y mantener servidores físicos. Además, la escalabilidad que ofrece la nube permite aumentar o disminuir recursos según la demanda, ahorrando tiempo y dinero.

Ahora debes preguntarte qué empresas de renombre utilizan AWS y EC2, ¿verdad? Bueno, ¡la lista es larga! Gigantes como Netflix, Airbnb, Spotify, la NASA e incluso la propia Amazon confían en estas tecnologías para impulsar sus negocios. Estas empresas reconocen los beneficios de tener una infraestructura escalable y confiable que les permita manejar un número creciente de usuarios y ofrecer una experiencia de alta calidad.

Por lo tanto, crearemos una aplicación Node.js muy simple y la haremos disponible en una instancia EC2.

Creando una aplicación simple

Comience creando el proyecto Node con el siguiente comando en la terminal:

npm init -y

npm install express

Con eso, podemos crear el archivo app.js.


A continuación, altera la propiedad start del package.json:


El código presentado es una aplicación en Node.js que utiliza el framework Express para crear un servidor web. Él define varias rutas, siendo la ruta principal configurada para el método GET y mapeada para la raíz ("/") del servidor. Cuando un cliente hace una requisición GET para esa ruta, el servidor responde con el mensaje "Hello World!". Esta es una forma común de comprobar si el servidor funciona correctamente.


Además de la ruta GET, el código también posee rutas para los métodos DELETE, PUT y POST. Estas rutas se utilizan para realizar operaciones de manipulación de datos, como eliminar, actualizar y crear usuarios. Sin embargo, las implementaciones específicas para estas operaciones no están incluidas en el código proporcionado. Es necesario agregar la lógica necesaria para manipular los datos, según las necesidades de la aplicación.

Finalmente, el código utiliza el método listen() para iniciar el servidor en el puerto 3000. De esta manera, el servidor está listo para recibir solicitudes HTTP de los clientes y responder de acuerdo con las rutas configuradas. En resumen, el código proporciona una base para crear un servidor web simple, utilizando Node.js y Express, permitiéndole definir diferentes rutas y responder a solicitudes según las necesidades de la aplicación.


Es importante señalar que el código proporcionado no está completo, ya que no incluye la conexión a una base de datos. En una aplicación real, es común que exista la necesidad de almacenar y recuperar datos persistentes, y esto generalmente se hace a través de una base de datos. En este código en particular, las rutas para las operaciones de eliminación, actualización y creación de usuarios están presentes, pero no se ha implementado la lógica para interactuar con una base de datos. Para que esta aplicación sea funcional en un entorno de producción, sería necesario agregar integración con una base de datos, como MongoDB o MySQL, por ejemplo, para garantizar la persistencia y manipulación adecuada de los datos.

Con esto ya tenemos nuestra aplicación. Ahora crea un repositorio en GitHub y coloca el proyecto en el repositorio, esto será necesario para que podamos acceder a la aplicación cuando estemos dentro de la aplicación EC2.

Hecho eso, entra al site de AWS: https://aws.amazon.com/pt/free

Haga clic en EC2, luego inicie la instancia y verá la pantalla de creación. El primer paso es crear una clave.


Ahora ve a detalles avanzados y al final pega los comandos de instalación:


#!/bin/bash

# Install Docker

sudo yum update -y

sudo yum install -y docker

sudo yum install -y git

sudo yum install libxcrypt-compat-4.4.33-7.amzn2023.x86_64

# Start the Docker service

sudo service docker start

# Add the current user to the "docker" group

sudo usermod -a -G docker $USER

# Install Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

# Install PM2

sudo npm install -g pm2

sudo pm2 startup systemd -u $USER --hp /home/$USER

pm2 completion install

Ahora haz clic en Iniciar instancia. Después de un tiempo se iniciará y podremos hacer clic en él en el panel de instancias.


Haz clic en el id de la instancia y ve a Seguridad.



Vaya al grupo de seguridad agregado y agregue nuevas reglas de seguridad:



Ahora que hemos agregado todas las reglas de seguridad podemos ingresar a la instancia, clonar el repositorio y finalmente ejecutar la aplicación en deploy.

Vuelve al panel de instancias, seleccione la instancia que creó y ve a Conectar. Ahí verás algunas opciones:


Hay dos formas principales de conectarse a una instancia de AWS: directamente a AWS o mediante el cliente SSH en su punto final local. La opción de conectarse directamente a AWS la proporciona el servicio de acceso a la instancia, donde puede acceder a la instancia a través de un navegador web. Esto es conveniente para acceder rápidamente a la instancia sin tener que configurar el cliente SSH en el terminal local. Por otro lado, usar el cliente SSH en el punto final local requiere configurar correctamente el cliente SSH, así como obtener información de conexión, como la dirección IP de la instancia y la clave de acceso.

Si bien conectarse directamente a AWS es más sencillo en términos de configuración inicial, puede tener características y funcionalidades más limitadas que usar el cliente SSH en su punto final local. Al utilizar el cliente SSH, se tiene más control sobre la conexión y se pueden ejecutar comandos más avanzados desde la terminal de la instancia. Además, conectarse a través de SSH también es útil cuando es necesario automatizar tareas o ejecutar scripts de forma remota en la instancia.

En resumen, la elección entre conectarse directamente a AWS o utilizar el cliente SSH en el punto final local depende de las necesidades y preferencias individuales. La opción de conectarse directamente a AWS es más conveniente para acceder rápidamente a la instancia, mientras que usar el cliente SSH en el endpoint local ofrece mayor control y flexibilidad en términos de recursos y automatización.

Cuando inicies sesión en la instancia, verás algo similar a esto:


Crea una clave de GitHub dentro de la instancia y clona tu repositorio. Con el proyecto dentro de la instancia, podemos ejecutarlo con el comando:

sudo su

pm2 start app.ja

Ahora tenemos nuestra aplicación en ejecución y disponible en línea para solicitudes. Y aún podemos encontrar la IP haciendo clic en la ID en el panel de instancia. En el ejemplo que creamos al ejecutar ip 3.129.12.133:3001, veríamos el Hello world! en el GET de la aplicación.



Conclusión

En este artículo exploramos las tecnologías AWS y EC2, que están transformando la manera en que desarrollamos e implementamos aplicaciones en la nube. Aprendimos que AWS es la plataforma de computación en la nube de Amazon y EC2 es un servicio dentro de esa plataforma que le permite crear y administrar instancias de servidores virtuales.

Aprender sobre AWS y EC2 es sumamente relevante para los programadores, ya que la computación en la nube es el futuro y las empresas migran cada vez más sus aplicaciones a esta infraestructura. Dominar estas tecnologías nos permite implementar nuestras aplicaciones de manera rápida, eficiente y escalable, sin la necesidad de lidiar con la complejidad de la infraestructura física.

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.