Servicios autogestionados para el desarrollo de software en AWS

Cuando queremos migrar nuestro software a la nube o crear directamente un proyecto nuevo, tenemos muchas alternativas en el mercado. Una de ellas es Amazon Elastic Compute Cloud (EC2) que, como parte de los servicios de Amazon para desarrolladores, nos proporciona los recursos informáticos para poder crear potentes servidores en la nube, totalmente gestionados por nosotros.

¿Te interesa profundizar en este tema? EC2 quizás es la herramienta más conocida pero aquí hablaremos, desde un punto de vista técnico, de dos grandes opciones más dentro de AWS, Lambda y Elastic Beanstalk, que dan respuesta a distintas necesidades y propósitos. ¿Las conoces?

AWS Elastic Beanstalk y Lambda

 

¿Qué es Elastic Beanstalk?

Con Elastic Beanstalk, tenemos acceso a una plataforma como servicio (PaaS), en la que podemos gestionar algunos aspectos de la infraestructura. Se pueden crear, probar e implementar aplicaciones web o servicios en la plataforma desarrollados con Java, .NET, PHP, Node.js, Python, Ruby, Go y Docker sin tener que lidiar con el aprovisionamiento, el balanceo de carga o la escalabilidad. Además, Elastic Beanstalk soporta muchos entornos de servidor, incluyendo Apache HTTP Server, Nginx, Microsoft IIS y Apache Tomcat.

Se puede utilizar tanto la línea de comandos como la consola de gestión de Elastic Beanstalk para configurar y gestionar los entornos y aplicaciones.

¿Qué es AWS Lambda?

Es un servicio sin servidor que permite que el código externo o los eventos invoquen funciones. Lambda no almacena datos, pero permite el acceso a otros servicios que lo hacen. Lo que realmente hace atractivo a Lambda es que no pagas mientras no se ejecuten llamadas.

Lambda no puede ejecutar aplicaciones completas, pero con AWS Step Functions se puede implementar una máquina de estados que invoque funciones de Lambda y poder manejar los errores.

Casos de uso: ¿Cómo trabajar con Lambda y Elastic Beanstalk?

Lambda nos permite definir funciones que están disponibles en cualquier momento, pero no nos proporciona ningún almacenamiento persistente o información de estado. Sin embargo, esto no es tan limitado como parece, ya que podemos añadir almacenamiento S3 o una base de datos. Con AWS Step Functions podemos definir flujos de trabajo simples y con Amazon API Gateway podemos construir una API utilizando las funciones Lambda.

Lambda tiene unos límites muy estrictos. El cuerpo de la solicitud no puede ser superior a 6mb y la duración de la solicitud no puede exceder los 300 segundos. Estas restricciones lo hacen inadecuado para pasar grandes cantidades de datos o para funciones que tienen que esperar mucho tiempo. También tiene un límite a la hora de implementar un paquete, ya que no puede exceder los 50mb. El código en Lambda puede incluir bibliotecas existentes, pero las bibliotecas muy grandes podrían llegar a ser un problema.

Por otro lado, Elastic Beanstalk es necesario cuando queremos tener una aplicación web escuchando en un puerto de internet. El código Lambda puede hacer la mayor parte del trabajo, pero no puede ejecutar la aplicación en sí.

Si es necesario personalizar el entorno de la aplicación, Elastic Beanstalk ofrece mucho más valor. Todos los detalles relacionados con seguridad, asignación de recursos, auto escalado y personalización de registros necesitan más flexibilidad de la que nos ofrece Lambda.

En pocas palabras…

Por lo tanto, si queremos desplegar una aplicación que necesite mantener información persistente en archivos y responder a consultas a través de Internet, nos decantaríamos por Elastic Beanstalk. Pero si sólo necesitamos implementar una API, Lambda es probablemente la forma más económica de hacerlo y puede proporcionar un backend para casi cualquier tipo de software.

No es necesario que toda la aplicación esté en Elastic Beanstalk. Un enfoque híbrido, con funciones en Lambda haciendo la mayor parte de la computación, nos puede permitir ejecutar una aplicación ligera que no requiere de una gran cantidad de potencia de servidor. A la hora de elegir entre Lambda y Elastic Beanstalk, no es necesariamente una elección de uno u otro.

A modo de anotación, si no estás familiarizado con los servicios de AWS, debes saber que existen otras opciones como, por ejemplo, App Engine Standard Environment y App Engine Flexible Environment en Google Cloud para Elastic Beanstalk o, en esta misma infraestructura, Cloud Functions para AWS Lambda. La elección dependerá de los requerimientos de tu proyecto.

¿Trabajas con AWS Elastic Beanstalk o Lambda? ¿Cómo los estás utilizando?

Apasionado de la tecnología desde pequeño, Francisco siempre ha sido un inconformista a quien le ha gustado buscar el porqué de las cosas. Como desarrollador FullStack le gusta afrontar nuevos retos para seguir evolucionando.

Enviar comentario

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