Introducción a Serverless (AWS)
Con la popularización de los servicios en la nube surgen algunos nuevos modelos que prometen hacer los desarrollos más rápidos, eficientes y efectivos. Uno de los modelos más populares y prometedores es Serverless Compute o computación sin servidores. Antes de profundizar sobre los beneficios de esta tecnología, es útil realizar una breve introducción a “La nube”
Computación en la nube (Cloud Computing)
La computación en la nube es la entrega bajo demanda de poder de cómputo, almacenamiento, aplicaciones y otros recursos. La nube son básicamente servicios a los que podemos acceder a través de internet. Existen principalmente 3 tipos de nube:
- Nubes públicas: Infraestructura utilizada a nivel general que podemos alquilar por el periodo de tiempo que necesitemos.
- Nubes privadas: Nube que está dedicada únicamente a una empresa u organización.
- Nubes híbridas: Combinan características de nubes públicas y privadas.
Hay muchas ventajas que podemos obtener de la computación en la nube, las principales son:
- Cambiar los costos de capital por costos operativos al no tener que comprar servidores.
- Beneficiarse de las economías de escala obteniendo precios menores.
- Dejar de adivinar la capacidad y provisionar únicamente los recursos necesarios.
- Aumentar la velocidad y agilidad de los despliegues.
- Eliminar el costo de mantenimiento de los data centers.
- Volver una aplicación global en solo minutos.
Durante este artículo se hace referencia a servicios que corresponden a la nube pública provista por AWS.
¿Qué es Serverless?
Serverless es un modelo de desarrollo que permite ejecutar el código de tu aplicación sin tener que preocuparte por administrar servidores. Esto no significa que no existan servidores detrás, si los hay, es solo que el proveedor de nube se encarga de administrar toda la infraestructura para que nosotros podamos enfocarnos en el código.
Normalmente lo mínimo necesario para una aplicación con arquitectura cliente-servidor es un lugar donde desplegar el FrontEnd , el Backend y la base de datos. Dependiendo del proveedor que utilicemos, cada uno posee sus propios servicios con nombres específicos.
Los servicios necesarios mínimos para desarrollar una aplicación Serverless en AWS son:
Lambda
Permite ejecutar el código como funciones sin tener que proporcionar servidores. Las funciones son ejecutadas en base a eventos y pueden ser invocadas desde distintos servicios de AWS o por solicitud del usuario. Un ejemplo funcional de Lambda son los dispositivos Alexa, las funciones son activadas por la voz y los Skills se ejecutan desde Lambda.
API Gateway
API son las iniciales de “Application Programming Interface” y son utilizadas generalmente para interactuar con aplicaciones web. Una API es como una puerta a la aplicación para acceder a los datos y a la lógica del negocio.
API Gateway permite crear, publicar, monitorear y asegurar API´s y es comúnmente utilizada con Lambda para desarrollar el backend de una aplicación.
Los tipos de API soportados son:
- HTTP API
- WebSocket API
- REST API
DynamoDB
DynamoDB es una base de datos NO-SQL de clave-valor. Provee latencias menores a 10 milisegundos a cualquier escala, además de tener soporte para realizar transacciones ACID (Atomic, Consistent, Isolated, Durable)
Cada tabla en DynamoDB debe tener una llave primaria. Las llaves primarias pueden ser de dos tipos:
- Llave de partición: Un valor único, por ejemplo, un número de cliente, un correo electrónico, entre otros.
- Llave compuesta: Una llave de partición con una llave de ordenamiento. Podríamos utilizar un id de usuario combinado con una fecha de publicación para identificar de forma única las entradas de un blog.
S3 (Simple Storage Service)
Provee funcionalidades de almacenamiento ilimitado de objetos, es posible cargar cualquier tipo de archivo desde 0 bytes hasta 5 terabytes. Los archivos son almacenados en Buckets, que son similares a carpetas.
Aspectos a tener en cuenta:
- Los nombres de buckets son globales, no se pueden repetir globalmente.
- Los url de los objetos se forman como https://BUCKET_NAME.s3.REGION.amazonaws.com/FILE_NAME
- Existen diferentes clases para almacenar los objetos dependiendo de la durabilidad y disponibilidad deseada.
- Provee características de encriptación de los objetos, tanto en reposo como en transporte.
- Cada objeto consiste de:
- Llave: Nombre del objeto
- Valor: Los datos del objeto
- ID de versión: Versión del objeto que se está cargando (Si se usa control de versiones)
- Metadata: Datos sobre los datos
Uno de los casos de uso mas comunes para S3 es que permite configurar un bucket como un servidor web por lo que podemos alojar nuestro sitio web estático directamente.
SNS (Simple Notification Service)
SNS es un servicio de notificaciones para enviar mensajes de texto, notificaciones push y correos electrónicos desde la nube. SNS utiliza un modelo de publicación-subscripción, las aplicaciones pueden publicar mensajes hacia un tema, y todos los subscriptores a ese tema recibirán el mensaje.
Diagrama de una aplicación Serverless simple.
Con los servicios antes mencionados es posible crear una aplicación con arquitectura cliente-servidor que escale automáticamente en la que no tenemos que provisionar servidores. Es muy común ver aplicaciones básicas que utilizan S3 como alojamiento para su sitio web estático desarrollado con HTML, CSS y Javascript. El Backend de la aplicación se construye utilizando funciones Lambda para desplegar el código y se crea una API con API Gateway para poder acceder al código de la función.
Si es necesario el envío de notificaciones dentro de la aplicación, se pueden conectar una función lambda a SNS para enviar mensajes de texto, correos o notificaciones push. Por último, la función lambda, utilizando el SDK del lenguaje de programación, se conecta a la base de datos en DynamoDB en donde se realiza el CRUD de los datos.
El siguiente diagrama ejemplifica la arquitectura explicada.
Conclusión
Serverless es un modelo que resuelve muchos de los problemas que las empresas podrían tener al desarrollar una aplicación, sim embargo, al ser una tecnología no tan popular aún, es común que muchos equipos de desarrollo tengan dificultades al momento de implementar su primera aplicación, sobre todo si siempre han trabajado sobre servidores On-Premises o soluciones de Infraestructura como servicio.
En mi opinión, a pesar de la curva de aprendizaje que representa, la adopción de esta metodología conlleva una serie de beneficios, tanto en tiempo como en costos, que con una vista a futuro es preferible comenzar a construir las nuevas aplicaciones de esta manera y dejar de preocuparnos por los factores que no generan valor al usuario final.
Introducción a Serverless (AWS)
http://luislizama.com/2022/09/13/Introduccion-a-Serverless-AWS/