Amazon ElastiCache es un servicio administrado, compatible con Memcached y Redis, que permite configurar, ejecutar y escalar almacenamientos de datos en-memoria en la nube. Es un servicio construido para aplicaciones de datos intensivos, o para mejorar el performance de nuestras aplicaciones al poder extraer los datos desde este almacenamiento, y no directamente desde las bases de datos. Algunos de los casos de uso para ElastiCache son el almacenamiento de datos de sesión, analítica en tiempo real, gaming o servicios geo-espaciales.
Para aplicaciones basadas en AWS es muy común que sea una función Lambda la que procesa la lógica detrás de las peticiones del usuario, por lo que integrarla con ElastiCache es muy útil en la búsqueda de agilizar el tiempo de respuesta y mejorar la experiencia del usuario.
Lo primero que se necesita es levantar un clúster de ElastiCache con Redis. Para ello nos dirigimos a la consola y buscamos el servicio de ElastiCache.
Posteriormente en la parte izquierda de la pantalla del servicio, hacemos click donde dice “Redis clusters” y luego sobre el botón de “Create Redis cluster”.
Nos aparecerá una pantalla para definir las variables de configuración del clúster que queremos crear, las cuales llenaremos de la siguiente forma:
Esperamos a que se cree nuestro clúster y se encuentre disponible para ser utilizado.
Ahora, podemos crear una función lambda que haga consultas sobre ese clúster. Además de crear la función, necesitamos tener alguna librería o paquete que nos permita interactuar con Redis. En este ejemplo, utilizaremos Nodejs, por lo que podemos hacer uso de https://www.npmjs.com/package/redis-cli y crear una lambda layer o subirlo junto con el código en un zip.
Para más referencias sobre lambda layers o hacer deploy de funciones lambda con archivos zip, puede revisarse la documentación de AWS
https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
Adicionalmente, los clústeres de ElastiCache corren dentro de una VPC, y no son accesibles desde fuera de ella, por lo que la función lambda debe existir dentro de la misma VPC que nuestro clúster. Para esto, debemos seguir los pasos indicados dentro de la documentación, en la sección de Configuring VPC Access.
https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html
Para interactuar entonces con nuestro clúster, crearemos una nueva función utilizando Node.js 14.x, y copiaremos el siguiente código
Modificando REDIS_URL por el endpoint que corresponde a nuestro clúster. Este endpoint tiene el formato de clusterName.xxxxxx
.nodeId
.regionAndAz
.cache.amazonaws.com:port
En el código se hace una conexión al clúster de ElastiCache desde lambda, se consulta por la existencia de una key, si la key no existe, esta se crea con un valor inicial y con un TTL de 60 segundos, y si la key sí existe, simplemente se retorna el valor.
¡Listo! Ya hemos creado un clúster de ElastiCache con Redis, y también hemos creado una función Lambda que interactúa con él.
Autor: Andrea Monzón / Cloud Engineer