Correo electrónico | nube@criptonube.com

Integrando ElastiCache Redis en una función Lambda

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.

Consola AWS

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:

  • Choose a cluster creation method: Nos permite seleccionar si queremos crear un clúster completamente nuevo, o si queremos restaurar uno a partir de un backup. Este lo crearemos desde cero, por lo que seleccionamos “Configure and create a new cluster”
  • Cluster mode: Nos permite seleccionar el modo de nuestro clúster, ya sea Disabled (un único shard, sin particiones) o Enabled (múltiples shards, particiones). En este caso, seleccionamos “Disabled”
  • Nombre y descripción: Elegimos un nombre para nuestro clúster, y colocamos una descripción (opcional)
  • Location: Podemos elegir dónde hostear nuestro clúster de Redis, ya sea On-Premise o en AWS, en este caso seleccionamos “AWS Cloud”, y dejamos activo la opción de Multi-AZ, que nos permite tener una réplica de lectura en otra zona de disponibilidad en caso nuestro nodo primario falle.
  • Cluster settings: Opciones como la versión de Redis y el puerto a utilizar. Llenamos esta parte de la siguiente forma:
Configuraciones del clúster de Redis
  • Subnet group settings: Seleccionamos un subnet group existente o bien, creamos uno nuevo dentro de la pantalla de configuración.
  • Availability Zone placements: Dejamos seleccionada la opción de “No preference”
  • Dejamos el resto de opciones con los valores por defecto y hacemos click sobre el botón de “Create”

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

Más temas que te pueden interesar: