Quieres saber qué es EC2, ECS, EKS, Lambdas y sus diferencias? En este episodio vamos a explorar estas opciones de cómputo en AWS. Si quieres ver el video, puedes observarlo aquí.

AWS tiene varias opciones de cómputo ideadas para casos de uso diferentes. Hoy vamos a hablar de las generalidades de EC2, ECS, EKS y Lambdas; para que puedas conocer las diferencias entre cada una de ellas y así escoger la más adecuada para cada escenario que enfrenten.

EC2 o Elastic Cloud Compute

En este caso hablamos de instancias tradicionales en donde uno instala el aplicativo o software que se necesite. Estas se pueden escalar de acuerdo a las necesidades del negocio y existen de diversos tipos (de propósito general, de uso intensivo de CPU, de memoria, bare metal, entre otras) y con diferentes prestaciones tanto en memoria como en cantidad de cores.

Son una opción muy flexible, ya que se renta la instancia por el periodo de tiempo que necesitemos y hacemos con ella lo que sea necesario: instalar software, exponer puertos, y las actividades normales que se pueden hacer con una maquina virtual.

AWS brinda diferentes procesadores y arquitecturas como Intel con Xeon Platinum, AMD con procesadores EPYC, Nvidia en GPU, ARM con procesador Graviton y FPGA. Tambien diversos sistemas operativos como Suse, CentOs, RedHat, Ubuntu, Windows 2012 en adelante y MacOS (Mojave, Catalina y BigSur)

Es importante destacar que los recursos que se asignan a una instancia de EC2 están dedicados y no tienen sobreaprovisionamiento (salvo la familia T que es particular); esto quiere decir que tenemos asignados el RAM y la cantidad de cores que seleccionamos.

Una de las desventajas de EC2 o en general de maquinas virtuales, es que la seguridad de la misma es muy importante y es nuestra responsabilidad; con ello me refiere a aplicar actualizaciones al sistema operativo, parches a los paquetería y software instalado, entre otras actividades.

Ahora bien, en una arquitectura tradicional, se dispondría de un balanceador de carga (ELB) asociado a un Target Group el cual contendría las instancias que se escalarían por medio de un grupo de autoescalamiento como vemos en esta imagen.

EC2

Elastic Container Service o (ECS)

Este es un servicio de orquestación de contenedores (Docker) altamente escalable y de alto rendimiento. Por tanto, nos permite ejecutar y escalar aplicaciones en contenedores en AWS.

Este viene acompañados de ECR (Elastic Container Registry) donde mantenemos nuestras imágenes de docker (es un registro y repositorio), tiene políticas, autorización y revisión de CVE (puntos vulnerables y exposiciones comunes) por sus siglas en inglés. Esto a traves del projecto Clair, que es opensource.

ECS es un servicio elástico completamente administrado: no administramos el plano de control y el servicio se escala a medida que crece nuestra arquitectura de microservicios.

En ECS se tiene una infraestructura basada en instancias de EC2 (en donde se tiene un agente que es el que lanza los contenedores) y estas instancias se tratan como un pool de recursos. Luego tenemos clusters y tareas; en cada tarea indicamos cual imagen debe usar, datos de parametrización y la cantidad de instancias de esta tarea que deseamos tener en ejecución.

No nos preocupamos por manejar el cluster en sí, sólo definir nuestras tareas, sus requisitos de computo y memoria y sus políticas de escalamiento. Incluso, proximamente, podrás tener instancias locales en tierra (por ejemplo servidores subutilizados) y que sean parte de nuestro cluster de ECS; lo anterior a traves de ECS Anywhere que se espera lanzar en este 2021.

Por ejemplo, ponemos tener un balanceador al frente que envía las peticiones de nuestros usuarios a nuestras tareas, que están ejecutando en instancias de EC2 como contenedores, y estas EC2 contienen un agente que se comunica con ECS.

ECS

Entonces con ECS, nosotros nos responsabilizamos de las instancias de EC2 de nuestro pool de recursos, de nuestros servicios y de las tareas.

Fargate

En ECS tambien tenemos a Fargate. Con Fargate no nos preocupamos por las instancias de EC2; sino que únicamente trabajamos con tareas y AWS se encarga de proporcionar los recursos de computo necesarios para suplir la carga de nuestras tareas. Esto quiere decir que nuestros contenedores corren bajo demanda y no necesitamos de tener una planificación de capacidad previa. Ademas bajo este esquema nuestra infraestructura es automáticamente actualizada y parchada.

En Fargate hay más de 50 combinaciones de cpu/memoria por tarea; por ejemplo: .25 VCPU con combinaciones de memoria desde los 512MB hasta los 2 Gig; o 4 VPCU con hasta 30 Gig de RAM

Elastic Kubernetes Service (EKS)

Este es un servicio de Kubernetes completamente administrado. EKS está certificado en conformidad con Kubernetes. Esto significa que las aplicaciones administradas por Amazon EKS son totalmente compatibles con las aplicaciones administradas por cualquier entorno estándar de Kubernetes.

Con EKS tenemos implementado el plano de control de Kubernetes y etcd en una configuración de alta disponibilidad en 3 zonas de disponibilidad, y AWS gestiona este plano de control por nosotros de forma similar a lo que hace en el servicio de base de datos relacional gestionado o RDS.

EKS

Lambdas

El ultimo servicio del que hablaremos es AWS Lambdas, esta es un servicio serverless, en donde no hay instancias de EC2 que aprovisionar, escalar o administrar. Es un servicio 100% elástico y en donde se paga únicamente por lo que usemos.

Lambdas nos permite enfocarnos en nuestro código; pues es a nivel de función en donde trabajamos. Esta abstracción nos libera de la complejidad de EC2 y de ECS sacrificando el control. Básicamente tenemos un código que resuelve una necesidad especifica, recibe una entrada y retorna una salida.

El cobro que se realiza esta basado en la cantidad de peticiones a nuestra función y la duración que toma nuestro código en ejecutarse (redondeado al milisegundo más cercano) y a la cantidad de memoria que le asignemos a la función. Con base en la memoria que indiquemos, se aprovisionan recursos de CPU de manera proporcional.

El código de nuestras funciones se puede programar con prácticamente cualquier tipo de lenguaje. Actualmente se tiene soporte directo para funciones escritas en Node.js, Pitón, Java, C#, Go, PowerShell, Ruby pero puedes crear runtime personalizados.

Debemos tener en cuenta que una lambda tiene un tiempo límite de ejecución de 15 minutos.

“Serverless es la arquitectura nativa para la nube de AWS”

Podemos ilustrar como un API Gateway recibe una petición y esta en enviada al lamdbda que hemos escrito y que por ejemplo corresponde a un microservicio. Una vez que el lambda responde, retornamos la respuesta al invocador.

Lambda

Conclusión

Podemos ver como pasamos de tener más operaciones administrativas en máquinas virtuales en EC2 (con la flexibilidad que nos ofrecen, pero con mayores gestiones de seguridad y manejo del sistema operativo).

Luego al pasar a entornos basado en Docker se reduce esa gestión de infraestructura en ECS/EKS y si optamos por Fargate esa reducción es aún mayor. Hasta llegar al nivel de Lambdas en donde nos concentramos solo en nuestro código sin preocuparnos del todo por la infraestructura necesaria para soportar nuestras cargas de trabajo.

Espero que este video artículo les haya sido de utilidad, si quieres que escriba o grabe un video de algún tema relacionado a AWS o Java, házmelo saber en los comentarios.