AWS: ECS, Faragate y ECR

David

En el mundo de DevOps, uno de los conceptos clave que permite la automatización del ciclo de vida del software es el pipeline. Pero, ¿qué es exactamente un pipeline y por qué es tan importante en esta metodología?

El Trío de Poder de AWS – ECR, ECS y Fargate

En la era moderna del desarrollo de software, la contenedurización se ha establecido como el estándar para empaquetar y ejecutar aplicaciones de manera consistente y fiable. Dentro de Amazon Web Services (AWS), esta revolución se apoya en tres servicios fundamentales que trabajan de la mano para llevar cualquier aplicación contenedorizada a producción con una agilidad y escalabilidad sin precedentes. Esta solución integral administra el ciclo de vida completo de un contenedor, desde su almacenamiento seguro hasta su ejecución automatizada y serverless.

Amazon ECR (Elastic Container Registry)

El primer pilar fundamental de esta arquitectura es Amazon Elastic Container Registry (ECR). Este servicio funciona esencialmente como una biblioteca privada y altamente segura para todas sus imágenes de Docker y de otros formatos de contenedores compatibles. Antes de que una aplicación pueda ser desplegada y escalada, debe ser construida, empaquetada con todas sus dependencias y guardada en un lugar fiable; ECR cumple exactamente esta función, ofreciendo un repositorio centralizado y completamente gestionado donde sus artefactos están protegidos.

Al ser nativo de AWS, ECR se integra perfectamente con las políticas de IAM (Identity and Access Management), asegurando que solo los servicios y usuarios autorizados puedan extraer las imágenes, lo que lo convierte en un punto de control crítico para la seguridad. Más allá de ser un simple lugar de almacenamiento, ECR contribuye activamente a las prácticas de DevSecOps al incluir capacidades de escaneo de vulnerabilidades en sus repositorios, lo que permite detectar problemas de seguridad en el código empaquetado incluso antes de que este toque un entorno de desarrollo, garantizando así la calidad y la integridad del artefacto listo para producción.

Amazon ECS (Elastic Container Service)

Una vez que la imagen está almacenada de forma segura en ECR, entra en juego el orquestador: Amazon Elastic Container Service (ECS). Este es el servicio de orquestación de contenedores nativo de AWS, actuando como el cerebro que planifica, ejecuta, escala y gestiona la vida útil de sus contenedores a gran escala, eliminando la complejidad manual de estas tareas. ECS organiza los recursos en Clústeres, que son agrupaciones lógicas del entorno de cómputo donde se llevarán a cabo las ejecuciones.

La pieza de configuración central en ECS es la Definición de Tarea (Task Definition), la cual se concibe como el plano de su aplicación. En esta definición, el ingeniero especifica la imagen exacta que se debe usar (apuntando al repositorio en ECR), los requisitos de recursos como la CPU y la memoria, los puertos que se deben exponer y los permisos de IAM que la aplicación debe asumir al ejecutarse. Posteriormente, el Servicio de ECS es el encargado de garantizar la continuidad, asegurándose de que el número deseado de copias de esta Tarea se mantenga funcionando continuamente. Si un contenedor falla, el Servicio se encarga de reemplazarlo automáticamente, garantizando la alta disponibilidad y el rendimiento deseado. Para ejecutar estas tareas, ECS ofrece la flexibilidad de elegir la capacidad de cómputo: la opción de EC2, donde el usuario gestiona los servidores subyacentes, o la opción moderna y serverless de Fargate.

AWS Fargate

AWS Fargate es la joya de la corona de esta arquitectura, pues proporciona la opción de cómputo serverless para Amazon ECS. Fargate no es un reemplazo de ECS, sino una opción de capacidad que simplifica drásticamente la operación al eliminar por completo la necesidad de gestionar los servidores o máquinas virtuales subyacentes.

Cuando se utiliza Fargate, el usuario se limita a definir los requisitos de CPU y RAM que necesita cada contenedor dentro de la Task Definition de ECS. AWS se encarga de todo el trabajo pesado operativo, incluyendo el aprovisionamiento de la capacidad de cómputo, el escalado automático para manejar cualquier volumen de tráfico, y el mantenimiento de seguridad y los parches del sistema operativo de los hosts subyacentes. Esto significa que el ingeniero no tiene que preocuparse por la gestión del hardware o por el escalado horizontal de las instancias de EC2; su enfoque se traslada íntegramente al código de la aplicación y a las reglas de orquestación. Fargate le otorga una granularidad y una eficiencia operativa enormes, permitiendo un modelo de pago por uso mucho más ajustado a las necesidades de recursos del contenedor, culminando en una arquitectura de contenedores moderna que promueve la agilidad, la eficiencia y una reducción drástica del tiempo dedicado a las operaciones de infraestructura.

De esta forma, la sinergia es total: el código empaquetado reside en ECR, la lógica de ejecución y mantenimiento la define ECS a través de sus Task Definitions y Servicios, y la capacidad de cómputo elástica y sin gestión de servidores la proporciona Fargate, creando un ciclo de despliegue automatizado, seguro y escalable.

Usar AWS con ECR y ECS

para este ejemplo usaremos un codigo en html, css para guardarlo ejecutarlo en ECR y ECS

Este código contiene el cv

1.Abrir una terminal de power shell, ingresar el comando

docker build -t prueba-contenedores .

Propósito del Comando

docker build: Es la instrucción principal para el daemon de Docker, indicándole que ejecute un proceso de construcción.

-t prueba-contenedores: Esta es la bandera para --tag (etiquetar). Le asigna un nombre al resultado final de la imagen.

prueba-contenedores es el nombre del repositorio local que se le da a la imagen.

. (Punto): El punto al final indica la ruta del contexto de construcción. Le dice a Docker que el código fuente y el archivo de instrucciones (Dockerfile) que debe usar se encuentran en el directorio de trabajo actual

2.Ingresar al portal de AWS, en la barra de búsquedas ingresar a IAM

3.Crear Usuario

4.Especificar el nombre del usuario a crear, para este ejemplo utilizamos los permisos de AdministratorAccess

5.Ingresar al usuario creado, en este caso es: user-contenedor-ecr, seleccionar la opción credenciales de seguridad

6.Seleccionar Crear clave de acceso

7.En caso de uso > interfaz de linea de comandos CLI > activar la casilla Entiendo la recomendación anterior y deseo proceder a la creación de una clave de acceso > siguiente

8.Copiar en un lugar seguro la clave de acceso y la clave secreta

9.Ingresar a la terminal power shell y comprobar que este instalado la cli de AWS

10.Ingresar el directorio raiz luego a:

cd .aws
aws configure

ingresar las credenciales clave de acceso y la clave secreta

11.Validar el nombre de la imagen de docker con el comando docker images

12.Ingresar a AWS y buscar ECR

13.Crear repositorio privado, ingresar el nombre del repositorio

14.para este caso ingreso el comando

docker push 779980647227.dkr.ecr.us-east-1.amazonaws.com/cv-site:v1.0
docker pushLa instrucción de Docker para enviar (subir) una imagen desde tu máquina local a un registro de contenedores en AWS.
779980647227Es el ID de tu Cuenta de AWS.
.dkr.ecr.Es el sufijo estándar que identifica el servicio como un registro de Docker alojado en ECR.
us-east-1El código de la Región de AWS
.amazonaws.comEl dominio de AWS.
/cv-siteEl Nombre del Repositorio que creaste dentro de Amazon ECR.
:v1.0La Etiqueta (Tag) o versión específica que deseas asignarle a la imagen en el repositorio de destino.

15.validar si se subio la imagen al repo

16.Ingresar a AWS y buscar ECS

17.clic en > crear cluster

18. Ingresar el nombre del cluster > seleccionar solo solo fargate > crear

19.Validar la creación deluster

20.En la ventana izquierda seleccionar definiciones de tareas, luego seleccionar el botón crear una nueva definición de tarea

21.Ingresar el nombre de tarea > seleccionar AWS fargate

22.Ingresar a ECR de AWS y copiar URI del repositorio

23.ingresar el nombre del contenedor > pegar el URI copiado previamente > clic en el botón crear

24.clic en cluster > crear

25.ingresar lo datos en los campos solicitados > clic en crear

26. Al final ingresamos a la ip publica asociada al ECS y tenemos nuestro contenedor online para ser usado


David Guzmán López

Ingeniero Electrónico

Electronic Engineer | DevOps Engineer | SRE | Cloud Engineer | Infrastructure Engineer