En la era de la nube, la arquitectura sin servidores (Serverless) ha surgido como una solución revolucionaria para el desarrollo y la implementación de aplicaciones en la nube. Esta nueva forma de construir y desplegar aplicaciones elimina la necesidad de administrar servidores físicos o virtuales, permitiendo a los desarrolladores centrarse en la lógica empresarial y la funcionalidad de sus aplicaciones.
Amazon Web Services (AWS), uno de los principales proveedores de servicios en la nube, ha sido pionero en la adopción y desarrollo de la arquitectura Serverless a través de su servicio AWS Lambda. Con AWS Lambda, los desarrolladores pueden ejecutar código sin necesidad de aprovisionar o administrar servidores, lo que reduce la complejidad operativa y mejora la escalabilidad.
En este artículo vamos a proporcionarte los conocimientos básicos de arquitectura y desarrollo web para que puedas ejecutar una aplicación Serverless. Para ello, nos ayudaremos de un paso a paso con un sencillo ejemplo.
¿Qué es AWS?
Usaremos AWS (Amazon Web Services), un proveedor líder de servicios de computación en la nube. AWS ofrece una amplia gama de servicios que nos permitirán ejecutar nuestras aplicaciones en la nube de manera eficiente. Es considerada una de las opciones más sólidas tanto para empresas como para personas que deseen implementar aplicaciones de cualquier tipo en la nube.
Una de las ventajas destacables de AWS es que permite el uso personal de sus servicios sin costos iniciales, hasta un límite específico de procesamiento. Esto significa que puedes comenzar a desarrollar y desplegar aplicaciones sin incurrir en gastos significativos desde el principio. AWS ofrece un modelo de pago por uso, lo que te permite escalar tus recursos según las necesidades de tu aplicación y pagar solo por lo que realmente utilizas.
¿Qué es Serverless?
Serverless significa sin servidor, es una solución que permite crear y ejecutar aplicaciones con rapidez y menor coste total de propiedad, ya que no es necesario aprovisionar y administrar infraestructura. Aunque existen servidores en funcionamiento, es el proveedor de servicios en la nube quien se encarga de su administración. Esto significa que podemos dejar de preocuparnos por la gestión de servidores, sistemas operativos, software y demás recursos, y únicamente nos centramos en el código de la aplicación.
Con una arquitectura Serverless podemos procesar un gran volumen de solicitudes. Podemos atender miles e incluso millones de peticiones sin preocuparnos por la capacidad de recursos necesarios para que la aplicación funcione correctamente, la escalabilidad está garantizada.
Ahora bien, dentro de AWS tenemos muchos servicios que nos pueden ayudar, aunque los más sencillos para dar un ejemplo inicial son los siguientes:
- DynamoDB: Servicio de bases de datos no relacionales (noSQL).
- Lambda: Servicio informático que ejecuta código en respuesta a eventos.
- IAM: Servicio web que ayuda a controlar de forma segura el acceso a los recursos de AWS.
- API Gateway: Servicio que crea, pública, mantiene, y monitorea la protección de las API REST, HTTP y de WebSocket a cualquier escala.
- CloudWatch: Servicio que monitorea los recursos y las aplicaciones de AWS.
¿Cómo crear una aplicación sin servidores?
Desarrollaremos una aplicación simple, pero efectiva que nos ayudará a comprender el flujo de la información y entender el concepto de Serverless. Mediante una página web, capturaremos la dirección IP pública del cliente en el momento en que la página se cargue, y luego utilizaremos Lambda para almacenar esta información en nuestra base de datos.
Creación de la cuenta en AWS
El proceso de creación de una cuenta en AWS es muy sencillo. Simplemente, debes dirigirte a https://aws.amazon.com/es/console/ y proporcionar los datos que te solicitan. Te pedirán que proporciones, tu dirección de correo electrónico, un nombre de cuenta, confirmes tu número de teléfono y agregues una tarjeta de crédito o débito (sin realizar ningún cargo a menos que se exceda el límite, el cual puedes consultar en: Capa gratuita de AWS | Cloud computing gratis). Con estos pocos datos, estarás listo para comenzar a aprovechar los servicios de AWS y explorar las posibilidades que la plataforma ofrece.
Creación de instancia de base de datos NoSQL
En la barra de búsqueda de AWS, escribiremos «DynamoDB» y seleccionaremos el servicio correspondiente.
Una vez dentro del servicio de DynamoDB, procederemos a crear una nueva tabla directamente. Seleccionaremos la opción «Crear tabla» y completaremos los detalles necesarios, como el nombre de la tabla y la clave primaria.
Creación de función Lambda
Para crear la función encargada de recopilar los datos del API REST (que aún no ha sido creado) y guardar la información en la tabla previamente creada, vamos a utilizar la barra de búsqueda nuevamente. Introduciremos «Lambda» y seleccionaremos la opción «Crear función».
Una vez en el servicio de AWS Lambda, seleccionamos nuestro lenguaje preferido, en este caso, Python, aunque hay una variedad de opciones disponibles. A continuación, procedemos a crear la función.
Al crear la función, se mostrará una sección que nos permitirá ver las características de la función, incluyendo el código fuente editable. Para realizar una prueba, pegaremos el siguiente código fuente y seleccionaremos «Desplegar» o «Deploy», según corresponda.
La configuración que hemos realizado demuestra que podemos capturar la dirección IP a través del API y guardarla en la tabla de DynamoDB con un valor aleatorio como identificador. Además, la función devuelve un mensaje de éxito si todo ha funcionado correctamente, todo ello con un código conciso.
Configuración API Gateway y API REST
API Gateway actúa como el intermediario entre nuestra función Python y el cliente, proporcionando una ruta que se publicará automáticamente en internet y nos permitirá interactuar con lo que hemos programado hasta ahora.
Para comenzar, volvamos a la barra de búsqueda y escribamos «API Gateway». Una vez en el servicio de API Gateway, veremos un botón que dice «Crear API». Al hacer clic en él, se nos presentarán varias opciones. Para este ejemplo, utilizaremos un API REST no privado, ya que si se utiliza uno privado, sería necesario configurar una VPC (Virtual Private Cloud). A continuación, seleccionamos «Crear» y procedemos a completar los detalles necesarios:
Hacemos clic en crear API. Luego, en la nueva pantalla que nos aparece, seleccionamos Acciones → crear método, y usamos un GET.
Después de hacer clic en «Confirmar», se mostrarán las siguientes opciones que vamos a completar con los datos sugeridos a continuación:
En esta etapa, seleccionaremos los siguientes detalles para la configuración de nuestra API REST:
- Tipo de integración: Seleccionaremos «Función Lambda» para integrar nuestra API con la función Lambda.
- Integración de proxy: Utilizaremos la opción «Integración de proxy» para establecer una conexión directa entre la API y la función Lambda.
- Región de la función: Indicaremos la región en la que se encuentra ubicada nuestra función Lambda.
- Nombre de la función: Proporcionaremos el nombre de la función Lambda que hemos creado previamente.
Una vez que hayamos configurado estos detalles, se nos solicitará confirmar los permisos. En este punto, debemos aceptar la confirmación de permisos, lo que permitirá que el API Gateway interactúe con la función Lambda y acceda a los recursos necesarios.
Después, debemos desplegar este API yendo a Acciones → Implementar la API
Esto nos creará nuestra URL a la cual podemos acceder para ejecutar la Lambda:
Es importante destacar que la URL no funcionará correctamente hasta que hayamos otorgado los permisos necesarios a la función Lambda para escribir en DynamoDB.
Permisos IAM
Además de los permisos que hemos otorgado anteriormente al API Gateway, también debemos aplicar permisos adecuados sobre la base de datos de DynamoDB. Para hacer esto, ingresamos «IAM» en la barra de búsqueda y accedemos al servicio correspondiente. A continuación, seleccionamos «Roles» y buscamos el nombre del rol asociado a nuestra función Lambda:
Una forma de confirmar que estamos accediendo al rol correcto es verificar si comienza con el nombre de nuestra función Lambda. Al ingresar al rol, podemos observar que existe una política asociada. Al seleccionar esta política, notaremos que actualmente solo tiene permisos para escribir en CloudWatch, que es el sistema utilizado para monitorear aplicaciones y visualizar registros.
Para modificar los permisos de esta política, haremos clic en «Editar Política» y se nos presentará una vista similar a la siguiente:
Para realizar los cambios necesarios en la política, pulsamos en «Añadir permisos adicionales» y luego buscamos DynamoDB:
Luego, seleccionamos la opción que no menciona «Accelerator». A continuación, elegimos «Escritura» como nivel de acceso y hacemos clic en «Revisar política»:
Una vez realizados los cambios, guardamos los cambios y podemos observar el resultado de la siguiente manera:
Con estos pasos, estamos listos para acceder a la URL proporcionada por el API Gateway y obtener finalmente el resultado deseado.
Además, si consultamos la tabla de DynamoDB, podremos ver que se ha registrado la IP desde la cual se accedió a la URL, quedando almacenada de forma adecuada para su posterior uso o análisis.
De esta manera, podemos interactuar con una aplicación Serverless en la nube utilizando AWS. Sin embargo, es importante destacar que el catálogo de servicios que ofrece AWS es muy extenso. Estas aplicaciones Serverless pueden ser utilizadas como disparadores en diferentes escenarios, como al guardar archivos en un bucket, al realizar un inicio de sesión, e incluso se pueden programar para ejecuciones temporales. Además, también es posible llamar a estas aplicaciones como funciones auxiliares desde otras aplicaciones en un servidor.
¿Sigues teniendo dudas sobre cómo puedes ejecutar tu propia aplicación sin servidores? ¡Rellena el formulario y nuestros expertos resolverán todas tus preguntas!