CloudNativeDevPlatform
Problema:
Debido a la complejidad administrar y desplegar soluciones de manera ágil en el entorno de cloud publico (AWS en nuestro caso), se propone una solución basada en tecnologías cloud nativo / open source, que ayude a los equipos de desarrollo adoptar el poder de los recursos e infraestructura cloud, en entornos de contenedores como Amazon EKS (Elastic Kubernetes Service).
Motivación:
La dificultad de establecer claramente responsabilidades entre los equipos de administración de sistemas e infraestructura por un lado y los equipos de desarrollo por el otro, así como promover mejores practicas y establecer procesos de despliegue facilitados sobre las mismas (golden paths). Sumando complejidad, si también consideramos la administración de múltiples entornos, configuraciones, seguridad y gobernanza, se hace indispensable contar con tecnologías y herramientas pensadas en el paradigma cloud nativo que faciliten la labor de todos los equipos involucrados.
Por todo lo mencionado, planteamos como linea de investigación y desarrollo para nuestro trabajo final de posgrado, una plataforma de desarrollo para el cloud publico, basada en las tecnologías open source reconocidas por la industria, bajo el paradigma cloud nativo / open source.
Propuesta:
- Desarrollar y desplegar aplicaciones en el cloud de manera ágil.
- Eliminar cuellos de botella en el despliegue de infraestructura cloud.
- Implementar patrones de configuracion, seguridad y networking siguiendo mejores practicas a través de código.
Tecnologías:
Se enumeran las conceptos y tecnologías desarrollados durante el cursado y su aplicación en el presente proyecto:
- Cloud AWS
- Arquitectura cloud
- Networking
- Infraestructura como codigo
- Automatización
- GitOps
- Contemporización / Kubernetes
- Alta disponibilidad / Elasticidad
- Aplicaciones cloud native
- Delivery engineering
- DevOps
- CI-CD
- Bases de datos
- Observabilidad
- Seguridad y gobernanza
- Platform Engineering
Caso de uso:
El rápido avance y auge del paradigma de desarrollo de microservicios en entorno cloud nativo enfrenta a desarrolladores y administradores de infraestructura a la hora de desarrollar, desplegar, mantener y securizar cargas de trabajo, APIs, servicios, librerías y componentes asociados.
Este esquema plantea severos retos en cuestiones como:
- Numero creciente de servicios, configuracion, conectividad, seguridad
- Seguimiento y control de recursos y componentes desplegados en cloud
- Simplificar el proceso de onboarding y experiencia de uso para desarrolladores
- Elección de las mejores herramientas disponibles en el ecosistema del cloud nativo
- Automatizar y estandarizar herramientas y procedimientos a lo largo y ancho de todo el proceso desarrollo, calidad, despliegue y mantenimiento.
Si bien la filosofía de trabajo bajo el esquema DevOps mitiga algunos de estos problemas, en concreto la fragmentación de conocimiento entre desarrollo y operaciones, comúnmente llamados silos de información, como así también fomentar una cultura participativa, de colaboración y proveer a los equipos de autonomía y creatividad. Creemos que con el continuo y acelerado crecimiento de herramientas, tecnologías y frameworks relacionadas al ámbito cloud nativo, en la actualidad no solo es necesario, sino urgente, implementar mejores practicas y procesos que faciliten la pronta adopción de dichos avances.
En el presente proyecto final queremos ir un paso mas allá, explorar ultimas tendencias y practicas para así, fruto de la combinación de experiencias pasadas, junto con la experimentación de nuevas ideas, establecer un esquema de trabajo superador que siente las bases para una plataforma de desarrollo bajo el paradigma cloud nativo.
Visión
Una solución que aporte simplicidad y soporte a todos los involucrados en la adopción de un modelo de desarrollo ágil basado en el paradigma cloud nativo.
Misión
La misión de la plataforma es el de incrementar la productividad de los equipos de desarrollo, mejorar la experiencia de uso, como también reducir la complejidad inherente a los despliegues, estableciendo “golden paths” que sienten las bases para despliegues automatizados, manteniendo la estandarización en los procesos de CI-CD, como también asegurando la calidad y seguridad de las cargas de trabajo y la infraestructura subyacente.
Objetivo
El objetivo es lograr el desarrollo e implementación de una plataforma interna de desarrollo basada en AWS EKS que permita a los desarrolladores auto-proveerse de la infraestructura necesaria para el despliegue automatizado de aplicaciones y cargas de trabajo en el cloud.
Implementación
La solución plantea tres grandes bloques que constituyen en su conjunto una plataforma de automatización de infraestructura y despliegue de aplicaciones “containerizadas” en el entorno AWS EKS. Para lograrlo integraremos tecnologías maduras y recomendadas por lideres de la industria, junto con aprendizajes y mejores practicas que hemos aprendido durante el cursado, como también de la experiencia profesional en entornos públicos y privados
La solución plantea tres grandes bloques que constituyen en su conjunto una plataforma de automatización de infraestructura y despliegue de aplicaciones “containerizadas” en el entorno AWS EKS.
Para lograrlo integraremos tecnologías maduras y recomendadas por lideres de la industria, junto con aprendizajes y mejores practicas que hemos aprendido durante el cursado, como también de la experiencia profesional en entornos públicos y privados.
Mejores Practicas:
- Desarrollo ágil
- DevOps / CI-CD / GitOps
- Infraestructura como código
- Automatización
- Platform Engineering
Tecnologías:
- Cloud AWS
- K8s / EKS / Fargate
- GitHub / Actions
- Terraform / Helm
- ArgoCD / Crossplane
Planteo
El presente trabajo se divide en tres etapas, las cuales se han desarrollado de manera paralela y ajustando a medida de las necesidades, particularidades e inconvenientes relacionados al desarrollo de la plataforma sobre el entorno AWS Academy:
- IaC Toolkit - Infraestructura de base: EKS Cluster
- GitOps Toolkit: Despliegue y configuracion de herramientas de soporte: ArgoCD + Crossplane
- Sample Apps: Templating y despliegue automatizado de apps cloud native: Helm + Templates
Planteo
El presente trabajo se divide en tres etapas, las cuales se han desarrollado de manera paralela y ajustando a medida de las necesidades, particularidades e inconvenientes relacionados al desarrollo de la plataforma sobre el entorno AWS Academy:
- IaC Toolkit - Infraestructura de base: EKS Cluster + Terraform
- GitOps Toolkit - Despliegue y configuracion de herramientas de soporte: ArgoCD + Crossplane
- Sample Apps - Templating y despliegue automatizado de apps cloud native: Helm + Templates
Diagrama de solución

1. IaC Toolkit
Esta primera sección, se compone de la automatización de la infraestructura de base utilizando las siguientes tecnologías:
Terraform
Terraform es una herramienta de infraestructura como código, utiliza un lenguaje de configuración llamado HCL (HashiCorp Configuration Language) que nos permite describir la infraestructura cloud deseada.
En nuestro caso, la plataforma estará basada en EKS, por lo que hemos decidido crear una estructura modular de los componentes y hemos trabajado por separado las siguientes definiciones para montar la infraestructura subyacente: clúster EKS, networking, enrutamiento, seguridad, herramientas de GitOps / CI-CD.
En cuanto a configuraciones y variables de entorno, hemos decidido extraerlas fuera de las definiciones de los componentes que se detallan, para almacenarlas y administrarlas desde la herramienta de despliegue, tal como hemos venido trabajando durante el cursado, hemos elegido Github.
Github Actions
Hemos configurado dos pipelines para desplegar la infraestructura basada en el workflow: validate, plan, apply, destroy de Terraform
1. Pipeline: “Init Remote State”
En cuanto a configuraciones y variables de entorno, hemos decidido extraerlas fuera de las definiciones de los componentes que se detallan, para almacenarlas y administrarlas desde la herramienta de despliegue, tal como hemos venido trabajando durante el cursado, hemos elegido Github.
Github Actions
Hemos configurado dos pipelines para desplegar la infraestructura basada en el workflow: validate, plan, apply, destroy de Terraform
Pipeline: “Init Remote State”
La primera de ellas, se encargara solamente de la creación de dos componentes cloud: bucket y tabla DynamoDB para almacenar el estado de Terraform y su sistema de locks en remoto, lo que nos permite controlar y administrar de manera segura el despliegue de nuestra infraestructura desde diferentes terminales y equipos de desarrollo.
2. Pipeline: “Deploy EKS Cluster”
Esta segunda pipeline, es la que concentra el despliegue integro de la infraestructura que da soporte a la plataforma. Ha sido una ardua tarea conseguir el despliegue automatizado de punta a punta, desde la conectividad de red básica, hasta la instalación de componentes a través de Helm, como la obtención y guardado de credenciales y acceso a la plataforma desde ArgoCD.
AWS Credentials
El manejo de las credenciales de acceso a la cuenta de AWS, ha estado basado en las funcionalidades de secretos y variables de entorno brindadas por GitHub Actions, lo que brinda una fácil y segura administración de las mismas, como así también su aprovisionamiento y encriptación en las distintas etapas de las pipelines.
Despliegue end to end
A modo de ejemplo, se incluye una captura donde se muestra el resultado de la ejecución desde cero de la pipeline end to end, un total de 22 componentes en un tiempo aproximado de unos quince minutos, es lo que se demora en proveer toda la infraestructura y componentes de nuestra plataforma

EKS / Networking
El despliegue del clúster EKS que brinda servicio a la plataforma, ha sido complicado debido a las particularidades de los entornos de laboratorios con los que contamos en AWS Academy, por ello se ha decidido una configuracion básica, basada en la ultima versión de kubernetes, un grupo de nodos reducido en tamaño, y configuracion de red estándar para sub-redes tanto publicas como privadas.

Debido a la falta de recursos y las mencionadas limitaciones, se ha tomado la decisión de utilizar el mismo clúster que brinda servicio a la plataforma, para demostrar también el despliegue automatizado de las aplicaciones y recursos cloud.
Idealmente, y tal como se detalla en el diagrama de la solución, se recomienda montar por separado ambas cargas de trabajo, para poder demostrar el poder de despliegue sobre múltiples entornos (desarrollo, testing, pre-producción, producción) de esta plataforma en su totalidad.
2. GitOps Toolkit
En esta segunda parte, nos concentraremos en el despliegue automatizado de aplicaciones con GitOps.
GitOps se basa en la utilización de repositorios de Git como fuente de verdad para iniciar el lanzamiento de las fases del proceso de integración continua (CI), como también del proceso de distribución continua (CD).
Se hace un seguimiento de todos los cambios en el código, resultando en un despliegue continuo y actualizado de actualizaciones y cambios en código y configuraciones, además de servir de respaldo en caso de ser necesario restaurar el sistema, o bien conciliar diferencias de las que se desconoce su origen.
En resumen, GitOps ofrece:
- Un flujo de trabajo estándar para el desarrollo de las aplicaciones
- Mayor seguridad para definir los requisitos de las aplicaciones por anticipado
- Confiabilidad mejorada con un sistema de supervisión y control de versiones a través de Git
- Uniformidad y confianza en todos los entornos / clústeres
ArgoCD
Siguiendo este enfoque, hemos optado por integrar ArgoCD en nuestra plataforma, la cual nos permite realizar un seguimiento de nuestros repositorios de configuración y aplicaciones, de una manera visual y amena para todos los tipos de perfiles que interactúan con la plataforma.
Para ello hemos decidido emplear características avanzadas de ArgoCD:
- Projects: Permite administrar aplicaciones de manera individualizada y acotada en permisos segun el tipo de usuario.
- AppSets: Permiten definir de manera programática un patrón de definición de aplicaciones cloud conocido como App of Apps, es decir, un conjunto de aplicaciones que comparten características y/o repositorios comunes.
- Sync Waves: Desplegar aplicaciones y configuraciones de kubernetes de manera sincronizada no es tarea nada fácil, cuando estas se automatizan y se lanzan en forma paralela. Ayudan a evitar la indisponibilidad o caídas de servicio al momento de desplegar componentes interrelacionados, que dependen unos de otros para su correcto funcionamiento.
Configuración de ArgoCD
La configuración de las características anteriormente mencionadas se especifica también dentro del repositorio de infraestructura como código, de la siguiente manera:
- ApplicationSets para desplegar proyectos y aplicaciones, como también los distintos componentes de configuracion de Crossplane
- Definición de templates para aplicaciones y proyectos en formato de Helm Charts
- Definición de aplicación base que engloba a todo lo anteriormente mencionado y facilita su despliegue automatizado, en el Helm Chart llamado platform-core
Crossplane
Como ultimo componente, para completar el toolkit de GitOps, se ha escogido a Crossplane, un proyecto open source, apoyado por la CNCF, que proporciona un control-plane sobre kubernetes para proveer infraestructura cloud. Crossplane ofrece y expone APIs de autoservicio de alto nivel para que los distintos equipos las puedan consumir simplemente detallando aquellos aspectos relevantes para la aplicación.
No intenta ser una herramienta de infraestructura como código (IaC) de propósito general, sino más bien un complemento de las cargas de trabajo que se despliegan en Kubernetes
Esto representa ventajas a la hora de facilitar la compresión por parte de los equipos de desarrollo, sobre las definiciones de los componentes y recursos cloud:
- Aprovechar el esquema de control-plane de Kubernetes para proporcionar el despliegue ágil de infraestructura a través de interfaces y APIs sencillas, incluso en entornos multi-cluster.
- Crossplane se distribuye y potencia de un conjunto de proveedores predefinidos para los principales entornos cloud, que cubren los aprovisionamientos más comunes para cargas de trabajo cloud nativas.
Configuración de Crossplane + AWS + Argo CD
De manera análoga a como lo hicimos con ArgoCD, se especifican las distintas configuraciones de Crossplane, junto con su proveedor de AWS y definición de los recursos FargateProfile y Certificates, como templates con su correspondiente Helm Chart para su despliegue automatizado a través de ArgoCD, desde la aplicación base: platform-core
XRDs
Hemos decidido implementar solamente un par de recursos en Crossplane, debido a las limitaciones de AWS Academy, como del tiempo y esfuerzo necesarios que sobrepasan el alcance y duración del presente proyecto.
- FargateProfiles: A través de este recurso, podemos abstraer y automatizar la creación de profiles de Fargate para brindar procesamiento “serverless” a las aplicaciones de ciertos namespaces de kubernetes.

https://github.com/scalzadonna/upc-cloud-arch-tfp-infra/blob/main/helm/crossplane-core/local/03-crossplane-xrds/templates/comp-xfargateprofile.yaml
- Certificates: Podemos también encapsular los detalles de implementación para la obtención, generacion y validación de certificados SSL a través del registro que provee AWS.

https://github.com/scalzadonna/upc-cloud-arch-tfp-infra/blob/main/helm/crossplane-core/local/03-crossplane-xrds/templates/comp-xacm-cert.yaml
3. Sample Apps
Finalmente nos encontramos con la definición de las aplicaciones en un formato de templates YAML que resulta de fácil compresión para los equipos de desarrollo.
Helm Chart
La estructura base de una aplicación cloud nativa para el entorno de Kubernetes se define a través de las siguientes templates:

https://github.com/scalzadonna/upc-cloud-arch-tfp-apps/tree/main/helm/namespaced-apps/templates
Values Templates
Esta otra template especifica los valores concretos para una aplicación de ejemplo, donde permite ver el nivel de abstracción alcanzado sobre el despliegue de la aplicación y recursos cloud asociados.
Como ejemplo sencillo, adjuntamos una template para el despliegue de un servidor web como apache/httpd o nginx:

Conclusión
Como hemos intentado demostrar en el presente trabajo, el diseño e implementación de una plataforma de desarrollo y despliegue cloud nativo no es una tarea sencilla, y requiere del esfuerzo continuado de todas las partes involucradas.
Durante el desarrollo de la misma, hemos podido experimentar y aprender de la potencia de las herramientas open source para cloud nativo, y habiendo aprendido de ellas nos proponemos seguir trabajando sobre esta plataforma para integrar lo que consideramos avances y herramientas accesorias pero necesarias para un correcto aprovechamiento y adopción de la plataforma:
Multi-cluster setup
Extender el despliegue a diversos entornos, tanto de desarrollo, pruebas como integración y producción.
Service Catalog
Definir un catalogo de servicios, para facilitar el consumo y desarrollo de aquellos componentes y aplicaciones cloud que sean aptos para ser reutilizados y normalizados.
Web Portal → Backstage
Poder contar con una interfaz de usuario avanzada para controlar y visualizar el despliegue y configuracion de la infraestructura y aplicaciones.
Integrantes:
- Jonatan Cantarino
- Daniel Picó
- Santiago Scalzadonna
Referencias:
Infra Automation repo:
https://github.com/scalzadonna/upc-cloud-arch-tfp-infra
Apps repo:
https://github.com/scalzadonna/upc-cloud-arch-tfp-apps
Platform Core on ArgoCD:
https://argocd.upc-tfp-eks.santiscalzadonna.com/




