DEV Community

Robert Orozco
Robert Orozco

Posted on

Despliegue de una aplicación en AWS usando ECS + ECR

En este post te cuento cómo desplegué una aplicación en AWS usando Elastic Container Service (ECS) y Elastic Container Registry (ECR).

👉 La idea es: contenerizamos la app, subimos la imagen, armamos un clúster ECS y la aplicación queda corriendo en ECS (Con EC2)

ARQUITECTURA

🐳 1. Preparar la instancia EC2 para construir la imagen

Primero lanzamos una EC2 con Amazon Linux 2023 para preparar la imagen que luego enviaremos a ECR.

🔧 Instalar Docker y Git

sudo dnf update -y
sudo yum install -y docker
sudo systemctl enable --now docker
sudo systemctl status docker
sudo yum install -y git
Enter fullscreen mode Exit fullscreen mode

📥 Clonar el repositorio y construye la imagen.

Clona la carpeta 4 del repositorio: https://github.com/NotHarshhaa/DevOps-Projects/tree/master/DevOps-Project-04

git clone <URL-del-proyecto>
cd <directorio>
docker build -t hello-world-django-app:version-1 .
Enter fullscreen mode Exit fullscreen mode

Verifica que la imagen existe:

📦 2. Crear el repositorio en ECR

En la consola de AWS:

ECR → Repositories → Create repository

Ponle un nombre como aplicaciones ✔.

Este repo será donde guardaremos nuestras imágenes Docker para que ECS pueda consumirlas.

🔐 3. Rol IAM para permitir que EC2 interactúe con ECR

1️⃣ Crear el rol

IAM → Roles → Create Role → EC2
Agrega la politica:
AmazonEC2ContainerRegistryPowerUser (push + pull)
Nombre sugerido: ec2-ecr-role

2️⃣ Asignar el rol a tu instancia EC2

EC2 → Instance → Actions → Security → Modify IAM role
Selecciona ec2-ecr-role.

*🔑 4. Login en ECR + Push de la imagen
*

En la EC2 define estas variables:

ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
AWS_REGION=us-east-2
ECR_URI=${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com

Enter fullscreen mode Exit fullscreen mode

🔐 Loguearte en ECR

aws ecr get-login-password --region $AWS_REGION \
  | docker login --username AWS --password-stdin $ECR_URI
Enter fullscreen mode Exit fullscreen mode

🏷 Etiquetar la imagen

docker tag hello-world-django-app:version-1 $ECR_URI/aplicaciones:version-1
Enter fullscreen mode Exit fullscreen mode

🚀 Subir la imagen (push)

docker push $ECR_URI/aplicaciones:version-1
Enter fullscreen mode Exit fullscreen mode

¡Imagen lista en ECR! 🐳📦

☁️ 5. Crear el clúster ECS

🔧 Configuración del clúster
Selecciona Fargate e instancias EC2 autoadministradas
Crea un Auto Scaling Group “bajo demanda” (modo prueba: 1 instancia)
Selecciona el rol básico de ECS
Elige dos subredes mínimo (ej: us-east-2a y us-east-2b)
Crea un SG llamado ecs-sg

📑 6. Definición de tarea (Task Definition)

Aquí le decimos a ECS qué contenedor correr, cuánta memoria, puertos, etc.

⚙️ Configuración principal

Nombre: app-task
Infraestructura: EC2
Modo de red: bridge
CPU: 0.5 vCPU
Memoria: 1 GB
Rol de ejecución: el de ECS

📦 Contenedor
Nombre: django-app
Image URI: selecciona la imagen que subiste a ECR 🐳
Puertos: 8000:8000

🎯 7. Crear el servicio ECS

Para que la app quede corriendo de forma continua:

ECS → Cluster → Create Service
Familia de tareas: app-task
Launch type: EC2
Número de tareas: 1

🌐 8. Probar la app en el navegador

Con esta arquitectura se ha desplegada una aplicacion mediante el uso de ECR y ECS para orquestar contenedores.

Top comments (0)