Explorando Límites de AWS Lambda

Cloud IO Enabler Podcast
Voiced by Amazon Polly

En este post Explorando Límites de AWS Lambda, les traemos un proyecto Playbook OpenSource base que puede ayudarlos a crear y preparar su infraestructura para probar los límites de Lambda para sus casos de uso.

Explorando Límites de AWS Lambda – Porque

Es muy común implementar una solución Serverless en AWS utilizando los servicios API Gateway, AWS Lambda y DynamoDB, y, probar esta arquitectura para nuestro caso de uso es crucial al diseñar una solución.

Así, cuando trabajamos la charla ¿Como manejar 100K conexiones simultáneas en AWS? en Serverless o probamos los nuevos límites de AWS Lambda de acuerdo al anuncio Las funciones de AWS Lambda ahora escalan 12 veces más rápido cuando manejan solicitudes de gran volumen, nos vimos en la necesidad de crear recursos y ambientes, una y otra vez hasta crear el escenario perfecto.

Por eso decidimos crear un proyecto base como infraestructura como código que pueda apoyarlos para sus propias pruebas. El repositorio es público y de código abierto, y lo pueden encontrar aquí serverless-limits-playbook-test.

Arquitectura

La idea principal en esta versión es crear una arquitectura de un API RESTful con API Gateway integrado a un función AWS Lambda para llamadas sincrónicas, y crear una instancia EC2 con una instalación de JMeter para lanzar pruebas de carga.

Aunque en el código podrán observar también:

  • Habilitación de CORS
  • Bloque de código para llamadas asincrónicas (comentado)
  • Configuración para reserve concurrency en AWS Lambda.
  • El script setup.sh para adicionar configuraciones a su instancia EC2.
  • El script index.mjs para definir la implementación real de su función AWs Lambda.
  • Un identificador único para peticiones desde a lambda (opcional podrían eliminarlo).

Prerequisitos

Dependiendo de su caso de uso necesitarán configuraciones generales en su cuenta, pero aquí presentamos las básicas.

  • Tener una Default VPC en la region que vayan a probar.
  • Crear un Role en IAM que permita escribir desde API Gateway a CloudWatch.
  • Asignar dicho rol a las configuraciones del servicio API Gateway en la región donde se va ha hacer pruebas.
  • Tener los Server Limits adecuados a su prueba, especialmente los de AWS Lambda “Burst Concurrency” y “Concurrent Executions“.

Despliegue de recursos

Al ser un proyecto IaaC construido con AWS CDK, pues evidentemente usamos los comando apropiados. A continuación la lista de pasos:

Usamos AWS CDK para este proyecto, pero podrías reemplazar o hacer tus versiones con Terraform u OpenTofu respectivamente. Hacerlo con AWS Cloud Formation es otra opción aunque no lo recomiendo.

Lanzamiento de carga masiva

Para ejecutar las pruebas masivas con JMeter es necesario ingresar a la instancia EC2 creada a través de la Consola Web y con EC2 Instance Connect, dado que no se asoció un server key al momento de su creación.

Una vez en el shell los comandos son los siguientes:

  • Cambia a root el usuario: sudo -i.
  • Edita el archivo LambdaConcurrencyLimits.jmx con vi /tmp/LambdaConcurrencyLimits.jmx con el url de tu API RESTful (esa url la obtienes como salida del comando cdk deploy al final del log).

Ejecuta los test JMeter de carga con

rm -Rf /var/www/html/stats/* && rm -f /tmp/stats.jtl && /opt/apache-jmeter-5.6.2/bin/jmeter -n -t /tmp/LambdaConcurrencyLimits.jmx -l /tmp/stats.jtl -e -o /var/www/html/stats.

Pruebas en JMeter

Mientras se puede escribir un blog entero de pruebas en JMeter, el archivo creado esta compuesto de las siguintes características:

  • Cinco grupos de usuarios (hilos)
  • Primer grupo lanza 1001 usuarios en 10 segundos.
  • Segundo grupo lanza 2001 usuarios en 20 segundos.
  • Tercer grupo lanza 3001 usuarios en 30 segundos.
  • Cuarto y quinto grupo lanza 0 usuarios, y están en el archivo jmx para que los usen como lo prefieran para su caso de prueba.
  • Se prueba una URL con un HTTP Request de tipo GET al API RESTful creado.
  • El URL del API Gateway RESTful esta externalizado en el argumento url-api-gateway.

Evidentemente estas pruebas no se ajustan a tu caso de uso y deberás cambiarlas apropiadamente, sin embargo el mecanismo de lanzamiento y la instancia EC2 configurada va a reducir el tiempo para esta operación.

Métricas

Una vez desplegada la infraestructura, y ejecutados las pruebas podremos monitorear los recursos y tomar las acciones correspondientes.

A continuación algunos gráficos que vamos a poder obtener:

API Gateway

AWS Lambda

Además siempre vamos a tener Grupos de Logs en Amazon CloudWatch apropiados para el caso de uso y por servicio para analizar los resultados:

IMPORTANTE: siempre al finalizar las pruebas no olviden ejecutar cdk destroy para decomisar los recursos usados y evitar facturación innecesaria.

Conclusiones y Pensamientos Finales

En este Playbook Explorando Límites de AWS Lambda, hemos podido plasmar un proyecto de código abierto para que puedan acelerar sus pruebas de implementaciones. Sin embargo hay mucho que mejorar en el mismo, como la inclusión de secrets con Secrets Manager para gestionar números de cuenta y otros parámetros sensibles y que NO deben estar en su repositorio de fuentes.

También este proyecto nos ayuda en la inmersión en el mundo apasionante que significa AWS CDK, y con el cual pueden gestionar su infraestructura de forma completamente automatizada.

Vale mencionar que en un proyecto de AWS CDK jamás deben subir el directorio cdk.out, dado que aquí como resultado de la compilación de los archivos Typescript a archivos propios de AWS Cloud Formation ((JSON por ejemplo), puede y va a quedar información sensible como números de cuenta y/o claves.

Para hacer uso de este enfoque de despliegue es necesario estar familiarizado con AWS CLI ya que con este generarán perfiles que contengan accesos de los usuarios de su cuenta, y con tales accesos se crearán los recursos. Entonces es importante que los usuarios asociados tengan los permisos correspondientes.

Los límites que tengan para su cuenta y por región van a incidir directamente en sus pruebas en caso de altas cargas de procesamiento, por lo que se debe tener en cuenta los mismos al momento de planificar la implementación.

Les animamos a dejar su feedback para mejorar el proyecto, sea aquí o en el repositorio de GitHub, y esperamos que sea de utilidad este proyecto “Explorando Límites de AWs Lambda”.

Las empresas en su Industria ya están innovando.  El Lead Time y el Time to Market son la diferencia entre las empresas que perdurarán en el mercado.  Conozca que posibilidades le ofrece AWS para su Transformación Digital en un entrenamiento gratuito para usted y su equipo de TI.

Compartir este contenido

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio