AWS Lambda frente a Amazon EC2: ¿cuál deberías elegir?

Amazon es uno de los líderes en la prestación de diversos servicios en la nube, con varias docenas de ellos y la cifra sigue aumentando. Amazon EC2 es uno de los servicios más populares de Amazon y constituye la parte principal de la plataforma de computación en la nube de Amazon, presentada en 2006. Amazon EC2 se utiliza ampliamente en la actualidad, pero también está creciendo la popularidad de otro servicio de Amazon llamado Lambda (lanzado en 2014). La entrada de hoy en el blog compara las plataformas AWS Lambda y EC2 para ayudarte a tomar la decisión más adecuada para tu entorno.

< span data-sheets-value=»{» 1 «:2,» 2 «:»

«}» data-sheets-userformat=»{» 2 «:17089,» 3 «:{» 1 «:0},» 9 «:1,» 10 «:1,» 12 «:0,» 17 «:1}»>

NAKIVO para el backup de AWS EC2

NAKIVO para el backup de AWS EC2

Backup de instancias de Amazon EC2 en EC2, AWS S3 y local. Opciones antirransomware. Recuperación rápida de instancias y objetos de aplicaciones.

</span>

¿Qué es AWS EC2?

AWS EC2 (Amazon Web Services Elastic Compute Cloud) es un servicio que permite utilizar máquinas virtuales denominadas «Instancias de EC2» en la nube y ofrece ampliabilidad. Puedes modificar la cantidad de espacio en disco, el rendimiento de la CPU, la memoria, etc., siempre que lo necesites. Puedes seleccionar la imagen base con el sistema operativo (SO) necesario preinstalado, como Linux o Windows, y, a continuación, configurar la mayoría de los ajustes del SO, así como instalar aplicaciones personalizadas. Dispones de acceso de root a tus instancias de Amazon EC2 y puedes crear usuarios adicionales. Gestiona todo lo que necesites y controla por completo tus instancias de EC2, incluyendo el reinicio y el apagado de la instancia. La categoría del servicio web AWS EC2 se conoce como «Infraestructura como servicio» (IaaS). AWS EC2 se puede utilizar para el alojamiento en la nube: puedes instalar servidores como máquinas virtuales (instancias) en la nube.

¿Qué es AWS Lambda?

AWS Lambda es una plataforma informática que te permite ejecutar un fragmento de código escrito en uno de los lenguajes de programación compatibles —Java, JavaScript o Python— cuando se activa un desencadenante vinculado a un evento. No es necesario configurar un servidor virtual ni un entorno para ejecutar una aplicación que hayas escrito. Basta con introducir el código de tu programa (denominado función Lambda en este caso) en la interfaz de AWS Lambda, asociar la función Lambda al evento y ejecutar la aplicación en la nube cuando sea necesario, sin tener que ocuparte de la gestión del servidor ni de la configuración del entorno. De este modo, puedes centrarte en tu aplicación, no en la gestión del servidor; por eso se dice que AWS Lambda es sin servidor.

Un evento después del cual se ejecuta su aplicación puede ser la subida de un archivo a un bucket de Amazon S3, la realización de cambios en tablas de DynamoDB, la recepción de una solicitud HTTP en el servicio API Gateway, etc. Tras configurar una función para que se ejecute cuando se produzca un evento, su aplicación se ejecutará automáticamente después de cada nuevo evento.

En cuanto a la clasificación, Lambda es una implementación de «Function as a Service» (FaaS) de Amazon. En la tabla siguiente, puedes ver el nivel de gestión de cada tipo de servicio, empezando por el uso de servidores físicos, y compararlos. Los niveles más bajos (gestión requerida por el usuario) están marcados en verde y los niveles superiores (gestión proporcionada por el proveedor) están marcados en azul. Así, al utilizar servidores físicos, puedes gestionar el hardware y todos los niveles superiores. Al utilizar Infraestructura como servicio (IaaS), como AWS EC2, puedes realizar la gestión de los sistemas operativos en las máquinas virtuales proporcionadas (Instancias de EC2). En el nivel de Plataforma como servicio (PaaS), se puede ejecutar una aplicación que debe compilarse antes de su ejecución. Al utilizar Función como servicio (FaaS), como AWS Lambda, no es necesario compilar la aplicación: basta con introducir el código en la interfaz proporcionada por el MSP (proveedor de servicios gestionados). El SaaS (Software como servicio), que se menciona a modo de comparación en la tabla, solo permite utilizar aplicaciones ya creadas (desarrolladas por los proveedores) en la nube mediante un cliente ligero o un navegador web.

AWS Lambda vs EC2 - comparing the management level for cloud services

AWS EC2 frente a Lambda: usos prácticos

AWS EC2 tiene un amplio intervalo de usos prácticos, ya que casi todo se puede configurar al utilizar este servicio. Los usos prácticos más comunes de Amazon EC2 son:

  • Alojamiento de sitios web
  • Desarrollo y pruebas de aplicaciones o entornos complejos
  • Computación de alto rendimiento
  • Recuperación ante desastres

Usos prácticos generales de AWS Lambda:

  • Automatización de tareas
  • Procesamiento de objetos subidos a Amazon S3
  • Análisis de registros en tiempo real
  • Filtrado y transformación de datos en tiempo real

Veamos un ejemplo concreto. Imagina que tu sitio web utiliza un bucket de Amazon S3 para almacenar contenido web, como imágenes, vídeos, archivos de audio, etc. Cuando se sube una nueva imagen o un nuevo vídeo, necesitas crear una imagen de vista previa para tu página web que sirva de enlace a la imagen o al vídeo a tamaño completo. Crear imágenes de vista previa manualmente puede ser una tarea aburrida y que requiere mucho tiempo. En este caso, puedes crear una función Lambda que redimensione automáticamente la imagen a partir de la imagen subida, le cambie el nombre y almacene la imagen del destino en el directorio adecuado. Puedes configurar la función Lambda para que se ejecute inmediatamente después de que se suba el archivo de imagen original al bucket de Amazon S3 que utiliza tu sitio web.

AWS EC2 frente a Lambda: principio de funcionamiento

EC2 . Como recordarás, al utilizar AWS EC2, se trabaja con máquinas virtuales (VM) conocidas como Instancias de EC2. Puedes añadir hardware virtual (discos virtuales, interfaces de red, procesadores, memoria) a una instancia de EC2, así como iniciar, detener y reiniciar una instancia de máquina virtual. Las instancias de EC2 pueden funcionar con dos tipos de almacenamiento: Elastic Block Storage (EBS) y buckets de S3. Puedes utilizar una imagen preconfigurada con un sistema operativo instalado y crear tu propia imagen de máquina de Amazon (AMI) personalizada. El servicio en la nube EC2 ofrece ampliación automática y equilibrio de carga. Las instancias de EC2 pueden funcionar conjuntamente con la mayoría de los demás servicios web de Amazon, como S3, ECS, Route53, CloudWatch, etc. .

Lambda . Al utilizar AWS Lambda, tu aplicación (función Lambda) se ejecuta en un contenedor de forma totalmente transparente para ti. El contenedor contiene código y bibliotecas. Amazon proporciona los recursos según las necesidades de la aplicación, y la ampliación es automática y transparente. No puedes controlar ni el contenedor en el que se ejecuta tu aplicación ni la instancia de Amazon EC2 en la que se ejecuta dicho contenedor (no sabes nada sobre ellos porque la infraestructura subyacente no está disponible para los usuarios de Amazon Lambda). Consulte la tabla anterior.

AWS Lambda puede considerarse un marco de trabajo de EC2 Container Service (ECS) que utiliza contenedores para ejecutar un fragmento de código que representa su aplicación. El ciclo de vida de cada contenedor es corto. La función Lambda en ejecución no guarda su estado. Si desea guardar resultados, estos deben almacenarse en algún sistema de almacenamiento de datos, por ejemplo, en un bucket de Amazon S3. Es posible configurar una red virtual para una función Lambda, por ejemplo, para conectarse a Amazon RDS (Amazon Relational Database Service). Lambda consta de varias partes: capas, entorno de la función y un controlador. Los desencadenantes son los activadores de Lambda. Lambda es una función que se ejecuta mediante consultas procedentes de los desencadenantes.

Lista completa de desencadenantes disponibles:

  • API Gateway
  • AWS IoT
  • Alexa Skills Kit
  • Alexa Smart Home
  • Application Load Balancer
  • CloudFront
  • CloudWatch Events
  • CloudWatch Logs
  • CodeCommit
  • Cognito Sync Trigger
  • DynamoDB
  • Kinesis
  • S3
  • SNS
  • SQS

API Gateway es un servicio especial que permite a los desarrolladores conectar diversas aplicaciones ajenas a AWS con aplicaciones de AWS y otros recursos.

AWS EC2 frente a Lambda: versiones/instantáneas

EC2 . Existe un complejo sistema de instantáneas disponible para los volúmenes EBS (Elastic Block Storage) de las Instancias de EC2. Se pueden crear instantáneas incrementales y revertir al estado deseado de una instancia de EC2. Las instantáneas de varios volúmenes se pueden utilizar para cargas de trabajo críticas, por ejemplo, bases de datos que utilizan varios volúmenes EBS.

Lambda . Se admite un práctico sistema de control de versiones para la gestión mejorada de las funciones de Lambda. Puedes asignar un número de versión a cada copia de código cargada y, a continuación, añadir alias que apunten a la versión de código correspondiente. Cada número de versión comienza por 1 y se incrementa progresivamente. Puedes clasificar las funciones de Lambda en alfa, beta y producción, por ejemplo. El nombre de recurso de Amazon (ARN) se asigna a cada versión de la función Lambda en el momento de la publicación y no se puede modificar posteriormente.

AWS EC2 frente a Lambda: Seguridad

EC2 . Debes ocuparte de tus instancias de EC2 y de todos los componentes que contienen. Puedes configurar manualmente un cortafuegos para tu instancia de EC2; Amazon proporciona el cortafuegos de VPC (nube privada virtual) para controlar el tráfico y garantizar la seguridad de las instancias de EC2 en la nube. Puedes instalar y configurar manualmente un software antivirus para tus Instancias de EC2, crear roles de IAM, especificar permisos, crear grupos de seguridad, etc. AWS Systems Manager Patch Manager te permite instalar actualizaciones del sistema operativo y parches de seguridad de forma automática. Puedes configurar AWS para que realice una instantánea antes de instalar un parche o una actualización con el fin de evitar posibles problemas. Crea pares de claves para acceder a las Instancias de EC2 si es necesario. Debe prestar más atención a la seguridad al utilizar AWS EC2 que al utilizar AWS Lambda.

Lambda . Existen permisos para los servicios de AWS a los que Lambda tiene acceso de forma predeterminada. El rol de IAM se utiliza para definir los servicios que deben estar disponibles para una función de Lambda. Para cada función de Lambda, debe configurar el rol de IAM en nombre del cual se iniciará dicha función. Esto significa que, después de configurar el rol de IAM, podrás conectar tu función Lambda a los servicios de Amazon definidos sin necesidad de utilizar claves u otros parámetros de autorización.

Es posible configurar el cifrado entre una función Lambda y S3, así como entre una API Gateway y Lambda, mediante una clave KMS. Al crear una función Lambda, se genera una clave de cifrado predeterminada. Sin embargo, se recomienda crear tu propia clave KMS.

En comparación con las instancias de EC2, las funciones de Lambda no requieren actualizaciones de seguridad ni parches. Amazon actualiza automáticamente los contenedores y los sistemas operativos subyacentes. Esta es la ventaja de utilizar funciones de Lambda en términos de seguridad.

AWS EC2 frente a Lambda: rendimiento y disponibilidad

EC2 . Después de encender una instancia de Amazon EC2, esta se ejecuta hasta que la detengas manualmente o programes una tarea de apagado. Cuando una instancia de EC2 está en funcionamiento, una aplicación se ejecuta casi al instante en dicha instancia. Puedes ejecutar tantas aplicaciones como quieras simultáneamente, siempre que el rendimiento de tu instancia de EC2 lo permita. Ejecutar aplicaciones en Instancias de EC2 es una buena solución cuando las aplicaciones deben ejecutarse de forma regular a lo largo de todo el día.

Lambda . Una función Lambda siempre está disponible, pero no se ejecuta de forma continua. Por defecto, la función Lambda está inactiva. Cuando se activa un desencadenador vinculado a un evento, se inicia tu aplicación (función Lambda). El tiempo máximo de ejecución de la función Lambda (tiempo de espera) está limitado a 900 segundos (15 minutos). Por lo tanto, no es recomendable ejecutar aplicaciones de larga duración en AWS Lambda. Si necesitas ejecutar aplicaciones que requieran más de 900 segundos para completarse con éxito o aplicaciones con un tiempo de ejecución variable, plantéate utilizar AWS EC2. Otro límite para una función Lambda en ejecución es la cantidad máxima de memoria, que es de 3008 MB.

Se pueden ejecutar entre 1000 y 3000 instancias de Lambda simultáneamente, dependiendo de la región. Póngase en contacto con el servicio de asistencia de AWS si está interesado en ejecutar más instancias simultáneamente.

El retraso entre el envío de una solicitud y la ejecución de la aplicación es de hasta 100 milisegundos para AWS Lambda, a diferencia de las aplicaciones que se ejecutan en Instancias de EC2, que no presentan dicho retraso. 100 ms no es mucho tiempo, pero para algunos tipos de aplicaciones, este tiempo puede ser crítico. Si su aplicación debe descargar datos de un bucket de Amazon S3, es posible que se necesiten entre 1 y 3 segundos adicionales antes de que se ejecute la aplicación. Tenga en cuenta este tiempo de retraso cuando planee utilizar AWS Lambda para ejecutar aplicaciones.

El tiempo de arranque en frío es un inconveniente de las funciones de Lambda. Se produce latencia cuando una función no se ha ejecutado durante un periodo prolongado de tiempo, y se necesita tiempo para iniciar un contenedor y ejecutar la función en Amazon Cloud. El uso de AWS Lambda para ejecutar aplicaciones puede ser una buena solución cuando se tienen cargas de trabajo irregulares y las aplicaciones deben ejecutarse en diferentes momentos del día con largas pausas entre ejecuciones.

AWS Lambda frente a EC2: modelo de precios

Tanto el servicio en la nube EC2 como Lambda utilizan el principio de pago por uso. Sin embargo, veamos los detalles y las diferencias.

EC2 . Se paga por el tiempo que la instancia de AWS EC2 está en funcionamiento, independientemente de si se ejecuta o no la función o la aplicación. El precio por hora depende del rendimiento de la CPU, la cantidad de memoria, el rendimiento de la tarjeta gráfica y la capacidad de almacenamiento que utilice la instancia de EC2. Cuando necesites que tu función o aplicación esté siempre disponible debido a un elevado número de solicitudes habituales, el uso de Instancias de EC2 puede resultar más rentable desde el punto de vista económico.

Lambda . Se paga por el número de ejecuciones de la aplicación y por el tiempo necesario para finalizar la ejecución. El precio por cada segundo de ejecución de una aplicación depende de la cantidad de memoria asignada a la misma y es de 0,00001667 dólares por cada gigabyte-segundo. El tiempo de ejecución de la aplicación se cuenta desde el inicio de la misma hasta la devolución del resultado o hasta que se detiene después de agotarse el tiempo de espera. El tiempo se redondea al múltiplo de 100 ms más cercano. Cuando se necesita disponibilidad bajo demanda, el precio por utilizar AWS Lambda para ejecutar funciones o aplicaciones puede resultar más ventajoso.

Conclusión

AWS EC2 es un servicio que representa la infraestructura en la nube tradicional (IaaS) y permite ejecutar Instancias de EC2 como máquinas virtuales, configurar entornos y ejecutar aplicaciones personalizadas.

AWS Lambda es la implementación de «Función como servicio» (FaaS) de Amazon que te permite ejecutar tu aplicación sin tener que preocuparte por la infraestructura subyacente. AWS Lambda te ofrece una arquitectura sin servidor y te permite ejecutar un fragmento de código en la nube después de la activación de un desencadenante de eventos. Al utilizar AWS Lambda, dispones de una función ampliable, pequeña y económica con control de versiones. Puedes centrarte en escribir código, no en configurar la infraestructura.

Si has calculado que tu aplicación tiene mucho tiempo inactivo en una Instancia de EC2 que está siempre en ejecución, plantéate utilizar AWS Lambda, con lo que no tendrás que pagar por el tiempo inactivo si no hay solicitudes para ejecutar la aplicación. Si hay un gran número de solicitudes regulares para ejecutar tu aplicación, puede que sea mejor instalarla en una Instancia de EC2 que esté siempre en ejecución.

El uso de AWS EC2 es adecuado para ejecutar aplicaciones de alto rendimiento, aplicaciones de larga duración y aquellas que no deben sufrir retrasos en el momento del inicio. Si utilizas instancias de AWS EC2, no olvides hacer backup de las mismas para evitar la pérdida de datos. NAKIVO Backup & Replication es una solución integral de protección de datos capaz de proteger instancias de EC2, además de máquinas virtuales de VMware vSphere, máquinas virtuales de Hyper-V y servidores físicos.

Prueba NAKIVO Backup & Replication

Prueba NAKIVO Backup & Replication

Solicita una versión de prueba gratuita para descubrir todas las funciones de protección de datos de la solución. 15 días gratis. Sin limitaciones de funciones ni de capacidad. No es necesario facilitar un número de tarjeta de crédito.

Artículos recomendados