Serverless: todo lo que necesitás saber

Autor: Juan Alfredo Rella

Introducción a Serverless

El término “Serverless” produce algún grado de confusión debido a que en la implementación y puesta en marcha de toda aplicación se complementan hardware de servidor y procesos ejecutándose en algún lugar. La diferencia en comparación con los enfoques normales es que la organización que crea y da soporte a una aplicación “Serverless” no se ocupa de ese hardware o esos procesos. 

Una empresa externa se encarga del duro trabajo de aprovisionar, administrar y escalar servidores. Al implementar una arquitectura Serverless, no se administra ni aprovisiona nada.

La arquitectura serverless a menudo incorpora dos componentes:

  • Function as a Service (FaaS)
  • Backend as a Service (BaaS)

Function as a Service

Functions-as-a-Service (FaaS) es un modelo relativamente nuevo de computación en la nube. El modelo se basa en tecnologías y arquitecturas informáticas sin servidor que permiten a los desarrolladores de software implementar fácilmente aplicaciones en la nube sin tener que administrar servidores.

Backend as a Service

Backend-as-a-Service (BaaS) es un modelo de servicio en la nube en el que los desarrolladores subcontratan todos los aspectos detrás de escena de una aplicación web o móvil para que solo tengan que escribir y mantener la interfaz. Los proveedores de BaaS proporcionan software prescrito para actividades que tienen lugar en servidores, como autenticación de usuarios, administración de bases de datos, actualización remota y notificaciones push (para aplicaciones móviles), así como almacenamiento y alojamiento en la nube.

¿Qué es una función?

Una función es una tarea u operación dentro de una aplicación que puede escribirse como un fragmento de código y ejecutarse de forma independiente.

¿Qué son las funciones Lambda?

Las funciones Lambda son pequeñas operaciones del negocio estructuradas en forma de funciones que son disparadas por eventos (event driven). Estas funciones efímeras y altamente escalables pueden ser desarrolladas en varios lenguajes como Python, Javascript, Java, Go, etc.  

Se pueden utilizar especialmente para:

  • Procesamiento de datos.
  • Procesamiento de archivos en tiempo real.
  • Extracción, transformación y carga.
  • Back-ends:
    • IoT.
    • Aplicaciones móviles. 
    • Aplicaciones web.  
    • Integración de aplicaciones (APIs).

Beneficios

  • No es necesario administrar servidores
  • El escalamiento es flexible
  • Alta disponibilidad
  • No se paga por capacidad latente

Limitaciones

  • Los entornos de programación (lenguajes, librerías, etc.) están límitados por el proveedor
  • Son servicios sin estado, cualquier operación que requiera “recordar” entre ejecuciones ha de apoyarse en otros servicios
  • Al cobrarse por tiempo de ejecución, y en algunos proveedores limitarse, se penaliza un consumo prologando en el tiempo.

Implementación de funciones en AWS Lambda

AWS Lambda es un servicio informático donde se puede cargar el código, crear funciones independientes y vincularlas a eventos específicos en la infraestructura de la nube. 

AWS administra toda la infraestructura en la que se ejecutan nuestras funciones y realiza toda la administración de los recursos informáticos, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y el escalado automático, la supervisión de código y el registro. Cuando la función tiene una gran demanda, AWS aumenta automáticamente el recuento de máquinas subyacentes para garantizar que la función funcione con el mismo rendimiento. 

Es posible escribir funciones en AWS Lambda en uno de los lenguajes admitidos de forma nativa.

Algunos lenguajes de programación son ampliamente compatibles con todas las principales plataformas serverless y también se adaptan bien al paradigma impulsado por eventos de la arquitectura serverless.

Los más usados son Node.js y Python; también hay soporte para Java y .NET en todos estos entornos en este momento.

Por otro lado existe un patrón común en este tipo de arquitectura  que incluye los siguientes conceptos básicos:

  • Handler: Handler es un método que el tiempo de ejecución de Lambda llama cada vez que se invoca su función. 
  • Contexto: también se pasa un objeto de contexto especial al método del controlador. Con este objeto, puede acceder a algunos valores de tiempo de ejecución de AWS Lambda, como el ID de solicitud, el tiempo de ejecución restante antes de que AWS Lambda finalice su función de Lambda, etc.
  • Evento: los eventos son cargas útiles JSON que el tiempo de ejecución de Lambda inyecta en su función de Lambda durante la ejecución. 

La estructura del documento de evento es diferente para cada tipo de evento y contiene datos sobre el recurso o solicitud que activó la función. Los tiempos de ejecución de Lambda convierten el evento en un objeto y lo pasan a su función.

  • Registro: dentro de su función Lambda, puede iniciar sesión en CloudWatch.  Amazon CloudWatch es un servicio de monitorización y observación creado para ingenieros de DevOps, desarrolladores y administradores de TI. CloudWatch recopila datos de monitorización y operaciones en formato de registros, métricas y eventos, y permite su visualización mediante paneles automatizados para obtener una vista unificada de los recursos, las aplicaciones y los servicios de AWS que se ejecutan en servidores locales y de AWS. Estas métricas y registros se pueden correlacionar para comprender mejor el estado y el rendimiento de los recursos o llevar un trace de la ejecución de las funciones y descubrir el origen de posibles errores.

Las funciones de AWS Lambda se pueden invocar manualmente o respondiendo a diferentes eventos.

Después de implementar una función serverless, la función en sí debe tener una forma de ser invocada. Hay tres formas principales de invocar una de estas funciones:

  • A través de un endpoint HTTP
  • A través de aws-sdk (muchas veces desde otra función)
  • Desde un evento en la nube (S3 al cargar la imagen, cuando se crea un elemento en su base de datos, etc.)

Se invoca la función interactuando con ella a través de un endpoint HTTP.

Layers

Muchos proyectos comparten bibliotecas comunes en torno a diferentes funciones.

La gestión de dependencias es importante en cualquier proyecto, ya que necesita tener dependencias consistentes en todas sus funciones.

Una Layer Lambda es un archivo ZIP que contiene las bibliotecas. Las capas son muy útiles si tiene varias funciones de Lambda que utilizan las mismas dependencias, ya que las dependencias se importarán a la función de Lambda en tiempo de ejecución.

Infrastructure as code

Un punto muy importante en la implementación de estas funciones es la posibilidad de manejar configuraciones de ambientes, versionado de código, deploy y pruebas de ejecución locales. Para estos fines existen herramientas como SAM y Terraform que permiten gestionar estas operaciones de una forma más prolija y eficiente.

Resumen

Como resumen aplica correctamente lo especificado en la página de AWS:
“AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. Paga solo por el tiempo de cómputo que consume.

Con Lambda, puede ejecutar código para casi cualquier tipo de aplicación o servicio backend sin tener que realizar tareas de administración. Solo tiene que cargar el código y Lambda se encargará de todo lo necesario para ejecutar y escalar el código con alta disponibilidad”


Links de interés

https://martinfowler.com/articles/serverless.html

https://www.serverless.com/

https://www.zdnet.com/article/writing-serverless-code-the-programming-languages-and-what-else-you-need-to-know/

https://docs.aws.amazon.com/es_es/lambda/?id=docs_gateway

https://aws.amazon.com/es/serverless/developer-tools/

https://read.acloud.guru/serverless-functions-in-depth-507439b4be88

https://www.serverless.com/learn/comparisons/

Thank You.

The white paper will open in a new window.

If you experience issues with accessing or downloading the white paper, please contact info@globallogic.com.

click here to go back to the Insights page.