# Automatizando la creación de un cluster de EKS con CloudFormation

En un entorno de nube, donde los recursos se pueden escalar dinámicamente y las necesidades cambian rápidamente, DevOps ofrece la flexibilidad necesaria para integrar el desarrollo y las operaciones en un flujo continuo. La automatización de tareas rutinarias como la implementación y el monitoreo minimiza los errores humanos y acelera el tiempo de entrega, lo que es crucial en mercados altamente competitivo. Para automatizar el proceso, se ha realizado un flujo de trabajo de CI/CD que se acciona desde un push al repositorio hasta el despliegue de un clúster Kubernetes .

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736997459647/bb5e7789-94da-4f46-9e05-a07397ab8ce1.png align="center")

**Figura 1:** *Conexión entre componentes.* Fuente: Elaboración propia

En la imagen anterior se muestra la conexión entre los diferentes componentes. El proceso se detalla a continuación:

* * Los desarrolladores suben su código a GitHub.
        
    * Con GithubActions orquesta el proceso de compilación y pruebas.
        
    * CloudFormation crea y configura los recursos, como la instancia EC2 desde la que se creará mediante un script el clúster de Kubernetes en EKS.
        
    * EKS despliega aplicaciones utilizando las imágenes Docker almacenadas en ECR.
        

Las herramientas seleccionadas son:

* * Uso de GitHub como repositorio principal.
        
    * CloudFormation para gestionar la infraestructura.
        
    * EKS como plataforma de ejecución para contenedores.
        
    * S3, KMS y Secrets Manager para almacenamiento y seguridad.
        

## **Configuración de un pipeline de CI/CD**

Se ha definido un pipeline de CI/CD (Integración Continua y Despliegue Continuo) como secuencia automatizada de pasos para desarrollar, probar, y desplegar infraestructura en AWS de manera eficiente y controlada. El yaml que se ha definido para el pipeline se encuentra en el repositorio

[https://github.com/dicaalba/eks-cluster/blob/main/.github/workflows/github-actions.yml](https://github.com/dicaalba/eks-cluster/blob/main/.github/workflows/github-actions.yml)

En este escenario, se está utilizando GitHub Actions y AWS CloudFormation:

1. Configuración de Credenciales y Parámetros:
    

* Se configuran las credenciales de AWS (con un rol IAM) para que GitHub Actions pueda interactuar con la cuenta de AWS.
    
* Se definen variables globales como AWS\_REGION y STACK\_NAME que se usan en todo el pipeline para definir la configuración de infraestructura.
    

2. Despliegue de Infraestructura con CloudFormation:
    

* Se emplea un archivo CloudFormation (YAML) que describe la IaC.
    
* El pipeline verifica si ya existe el stack y lo crea/actualiza según sea necesario.
    

3. Conexión con Instancia EC2:
    

* Una vez creada la infraestructura, se conecta a la instancia EC2 mediante SSH y se configura el entorno para que esté listo para ejecutar Kubernetes.
    

4. Descarga del Kubeconfig:
    

* El pipeline extrae el archivo kubeconfig de la instancia EC2 para interactuar con el clúster Kubernetes localmente.
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736997584203/1c5da929-eea8-442f-a0c9-935ed8b808e9.png align="center")

**Figura 2:** *Ejecución de pipeline con github actions.* Fuente: Github Actions

## **Implementación de clúster en EKS**

Se ha definido un script que automatiza la creación y configuración de un clúster de Kubernetes en Amazon EKS [(ver repositorio de GitHub)](https://github.com/dicaalba/eks-cluster/blob/main/ec2_user_data.sh), con todas las herramientas necesarias instaladas y configuradas para su administración y uso, eliminando la necesidad de intervenciones manuales.

Instala herramientas como Docker, kubectl, eksctl, AWS CLI, aws-iam-authenticator y Helm. 

A través del script, se emplea eksctl para crear el clúster EKS, definiendo además el tipo de nodos y la cantidad de nodos. 

De esta forma podemos implementar un pipeline CI/CD usando GitHub Actions y AWS CloudFormation para automatizar el aprovisionamiento y la configuración de una infraestructura reproducible y escalable.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736997842885/8b23945e-aca9-403a-8eae-2f3817f4f2fd.png align="center")

**Figura 3:** *Clúster de EKS.* Fuente: AWS

Ahora que ya podemos levantar rápidamente un clúster de Kubernetes y administrarlo desde un bastión host, ¿ qué te parece si en próximas entradas trabajamos como levantar un sistema de monitoreo de costos sobre el clúster?
