Siguiendo con la temática de Introducción a Serverless, vamos a realizar un análisis sobre dos servicios para el despliegue de contenedores en entornos Serverless.

Empezaremos con una breve descripción e historia de cada uno de ellos para luego centrarnos en algunas características importantes sobre los mismos.

#AWSFargate vs. #GoogleCloudRun para desplegar contenedores en #cloud: los enfrentamos en esta comparativa #serverless Clic para tuitear

AWS Fargate

AWS Fargate nace en el año 2017 con el fin de proveer una experiencia mejorada y gestionada del entonces ya existente AWS ECS. En AWS ECS se despliegan contenedores definidos como tasks en un cluster previamente creado. Su primera modalidad permitía únicamente tareas de tipo EC2 y, por lo tanto, no podíamos considerarlo un servicio Serverless propiamente dicho.

Para hacer uso de la modalidad AWS Fargate de ECS, se deberá crear un cluster sobre el que operar. En este caso se podría usar la opción de creación de un cluster tipo “Networking only” gestionado por Fargate.

A partir de aquí, únicamente será necesario definir la imagen Docker a desplegar, así como configuración extra sobre red, rol de ejecución recursos y otros (algunos de ellos opcionales).

Complementando los conceptos de cluster y task se definen los servicios de AWS ECS, gracias a los cuáles se podrá definir cuántas copias o réplicas de una tarea queremos desplegar en un cluster. Además, de forma opcional, se podrá crear una configuración de distribución de tráfico gracias a un balanceador de carga a los distintos contenedores del servicio. AWS Fargate gestiona y mantiene toda la coordinación y programación de las tasks y su integración con el balanceador de carga.

Por último, y también de forma opcional, se podrá definir configuración de autoescalado de tareas de nuestro servicio, que podrán ser desplegadas bajo un mismo servicio AWS ECS van de 1 a 1000.

Si hacemos referencia a la creación de recursos mínimos necesarios mediante su CLI:

$ aws ecs create-cluster --cluster-name MyCluster
$ aws ecs run-task --launch-type FARGATE --cluster
--task-definition --network-configuration

Google Cloud Run

Google Cloud Run es un servicio de computación que aparece en beta cerrada a mediados de 2018, y se anuncia su beta abierta progresiva en la Cloud Next de 2019 en San Francisco.

Este servicio admite dos modalidades de despliegue:

  • En un entorno completamente gestionado por Google Cloud considerado Serverless.
  • La opción de desplegar contenedores en clusters de Google Kubernetes Engine.

Con Cloud Run, el despliegue de cualquier tipo de contenedor Docker (con unos requisitos muy acotados) se realiza de una manera extremadamente sencilla y se provee de forma implícita la configuración de escalabilidad, disponibilidad, configuración de red y acceso (si así se requiere).

Con este movimiento, Google Cloud está renovando de alguna manera el entorno “flexible” de App Engine en el cual se puede desplegar cualquier contenedor definido mediante su Dockerfile. Google App Engine Flexible nunca fue un servicio de primer nivel al que Google diera una gran relevancia, sin embargo Cloud Run es una apuesta de máximo nivel.

Knative

Uno de los principales motivos por los que se entiende la gran apuesta de Google por este servicio es la tecnología en la que está basado. Mientras que en App Engine Flexible se desconocía en gran manera la forma en la que Google gestiona nuestros servicios, con Cloud Run es el caso totalmente opuesto. Este servicio está basado íntegramente en Knative, una plataforma completa sobre Kubernetes e Istio para desplegar y hacer accesibles nuestros contenedores.

Con Cloud Run el objetivo se traslada, una vez más, a las necesidades de Negocio dado que la gestión de la infraestructura que soporta nuestras aplicaciones está gestionada por Google. Por supuesto, con Cloud Run solo pagaremos por el uso realizado.

Google promete una escalabilidad desde 0 hasta 1000 instancias de nuestro contenedor según demanda. En cuanto a recursos, las instancias tendrán disponibles una vCPU (virtual CPU) y una memoria parametrizable.

La configuración es extremadamente sencilla dado que no tendremos que crear una VPC en nuestro proyecto para poder empezar a crear nuestros instancias en el servicio de Cloud Run. Del mismo modo, nos provee automáticamente de una URL para acceder a nuestro servicio con un certificado SSL completamente gestionado.

En cuanto a seguridad, todos los contenedores desplegados en Cloud Run están estrictamente isolados basados en la tecnología gVisor. Además, se puede configurar de forma muy sencilla el acceso a los servicios Cloud Run indicando las identidades que pueden acceder o simplemente configurando un acceso abierto si estamos trabajando por ejemplo en algún tipo de API pública.

Google quiere ser un referente en cuanto a la ejecución y despliegue de contenedores. No solo a través de otras tecnologías que están a niveles de servicio distintos como el famoso Kubernetes Engine, si no dando un paso más allá y facilitando el uso y despliegue de workloads dockerizados en cualquier servicio de su portfolio. En este caso la experiencia con Cloud Run es casi perfecta gracias a la integración con otros servicios y a la facilidad e inmediatez de uso.

Si hacemos referencia a la creación de recursos mínimos necesarios mediante su CLI:

gcloud beta run deploy --image

Benchmark

Definimos una comparación rápida sobre los servicios vistos:

Comparativa entre AWS Fargate y Google Cloud Run.

Conclusiones

AWS Fargate es un servicio con mayor recorrido que Google Cloud Run y, por tanto, presenta una mayor robustez y flexibilidad. Además, marca una gran diferencia en cuanto a configuración de recursos de nuestros servicios, lo cual puede ser en muchas ocasiones un factor determinante.

No obstante Cloud Run destaca en dos grandes e importantes características: una facilidad de uso casi inmejorable, no solo de configuración básica si no de la que viene implícita del propio servicio como el balanceo de carga y autoescalado, y el hecho de estar basado en una tecnología Open Source compatible con Kubernetes que hace que cualquier workload de Cloud Run pueda desplegarse en cualquier nube pública.

Si buscas mayor flexibilidad de configuración y recursos, AWS Fargate es tu servicio; si lo que necesitas es el máximo nivel de Serverless en contenedores y basado en tecnología Open Source fácilmente portable a otro entorno, no busques más, Cloud Run encaja a la perfección.

Si te interesan las tecnologías Serverless y quieres conocer más sobre ellas, sigue nuestro blog porque continuaremos publicando sobre estas tecnologías.

Imagen: unsplash | zanilic

Author

  • Sergio Gordillo

    Cloud Architect en Keepler. "Lifelong learner and interested in cloud computing and public cloud technologies. Engineer with extensive experience in backend development and skills in machine learning techniques. Passionate about learning and solving real world problems. I enjoy collaborative teamwork, sharing knowledge and creating amazing products."