020 – AWS Lambda y la arquitectura serverless

En este episodio les comparto de mi experiencia con AWS Lambda y unos tips para los que están pensando adoptar la tecnología para el 2019.

Hasta principios del 2018 trabajé desarrollando la plataforma como servicio Cloud Foundry. Para expandir un poco mi experiencia en cuanto a funciones como servicio, decidí trabajar en un proyecto con AWS Lambda. Después de haber utilizado Lambda durante casi 8 meses, ésta es mi reseña.

AWS Lambda es una plataforma para tecnología serverless. El concepto de estos servicios es que los programadores se preocupan únicamente por su código y no tienen que dar ningún mantenimiento a la infraestructura, ni preocuparse por problemas de escalabilidad.

En la realidad esto no es del todo cierto. En la mayoría de equipos que he trabajado el concepto de devops es tan fuerte que aun si no tienes que preocuparte por el mantenimiento de un servidor igual tienes que preocuparte por el mantenimiento del servicio y entender bien cómo funciona para poder debuggear y eventualmente repararlo.

Uno de los problemas que vi a la hora de debuggear sistemas en AWS Lambda, es que muchos proyectos tienen una versión para desarrollo local que difiere de la versión en producción. Esto para mi se siente como un paso atrás en cuanto a la adopción de integración continua y despliegue continuo. Si piensas adoptar AWS Lambda en el 2019, te recomiendo que le eches un vistazo a localstack para que no caigas en este antipatrón de diseño.

Otro problema de arquitectura que pude presenciar, fue el desarrollo de Lambdas que parecen más monolitos. En estos casos te verás constantemente batallando contra la plataforma ya que no fue diseñada para este tipo de arquitectura. Para cosechar los beneficios de AWS Lambda es importante diseñar un sistema dirigido por eventos.

Un último factor que me pareció negativo es que, a la hora de procesar información en una cadena de lambdas, los datos deben de ser guardados en otro sistema ya que Lambda no guarda un estado. AWS ofrece soluciones como S3 y DynamoDB las cuales se integran muy bien al sistema, sin embargo en el caso de sistemas que mueven grandes cantidades de datos esto será más perjudicial que una arquitectura tradicional con acceso al sistema de archivos o una base de datos local.

Lo que más me preocupa, es que muchos programadores están aprendiendo a utilizar estos servicios sin comprender cómo funciona la arquitectura detrás de ellos pues no han tenido la experiencia de mantener servicios similares en su forma tradicional.

Hasta ahora he sido bastante negativo en esta reseña, sin embargo hay cosas muy positivas que experimenté utilizando AWS Lambda. La primera ya la mencioné cuando dije que Lambda se puede conectar fácilmente a otros servicios de AWS, como es el caso S3, DynamoDB y muchos más. Lo que más me gusta de este modelo es que también es posible limitar el acceso a dichos servicios dependiendo de rol que le pongamos nuestras lambdas. Esto puede ser muy beneficioso a la hora de que una lambda se vea comprometida, ya que limita el acceso a los demás servicios dentro de tu infraestructura.

Otro punto que me gustó bastante de AWS Lambda es la escalabilidad del sistema. Esto no se sintió diferente a lo que ya estaba acostumbrado al utilizar una plataforma como servicio pero fue bueno ver que se mantiene en la arquitectura serverless y que funciona siempre y cuando esté dentro de tu presupuesto.

Al final del 2018 AWS compartió en una nota que ahora puedes correr tu propio runtime en AWS Lambda. Esto quiere decir que ya no estarás limitado por el puñado de lenguajes oficiales que AWS soporta sino que podrás utilizar el lenguaje de tu preferencia. Esto permitirá que sin importar el stack que tengas, puedes migrar tus aplicativos a AWS Lambda. Solo ten en mente que sólo porque puedas hacer algo no quiere decir que debas, es importante que entiendas los cambios arquitectónicos que deberás hacer si quieres migrar a este servicio.

En el 2019 estoy seguro que veremos más empresas y por ende desarrolladores subirse al tren de AWS Lambda. Así mismo veremos un crecimiento en herramientas para debuggear y desarrollar localmente para plataformas serverless. Esto dará también un mayor crecimiento a arquitecturas orientadas a servicios y microservicios. La ventaja sobre esta plataforma la tendrán aquellos con experiencia en dichas arquitecturas así como también en programación dirigida por eventos y lenguajes funcionales.

Si estás considerando utilizar AWS Lambda pero tu arquitectura actual es de tipo monolito, te recomiendo que comiences extrayendo un pequeño servicio y poco a poco vayas agregando más de tal manera que puedas entender cómo desarrollar, integrar y distribuir los diferentes servicios de una manera pragmática.