ECS + Flask APP

2 min de lectura
ECS + Flask APP

Te guiaré paso a paso para crear un clúster de ECS (Elastic Container Service) en AWS y desplegar la aplicación Flask con Apache utilizando la imagen Docker que creaste.

1. Configuración Inicial

  1. Instala AWS CLI: Si aún no tienes la AWS CLI instalada, sigue las instrucciones de AWS CLI Installation Guide.
  2. Configura AWS CLI: Ejecuta aws configure y proporciona tus credenciales de AWS (Access Key ID, Secret Access Key, región, y formato de salida).
  3. Construye y Suba la Imagen a ECR:

Sube la imagen a ECR.

  docker push <aws-account-id>.dkr.ecr.your-region.amazonaws.com/flask-app:latest

Etiqueta la imagen con la URL de tu repositorio de ECR.

  docker tag flask-app:latest <aws-account-id>.dkr.ecr.your-region.amazonaws.com/flask-app:latest

Construye la imagen Docker.

  docker build -t flask-app .

Inicia Sesión en ECR: Usa el siguiente comando para autenticar Docker en ECR.

 aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin <aws-account-id>.dkr.ecr.your-region.amazonaws.com

Crea un Repositorio en ECR: Para almacenar la imagen Docker, debes crear un repositorio en Amazon ECR (Elastic Container Registry).

 aws ecr create-repository --repository-name flask-app --region your-region

Reemplaza your-region por tu región de AWS.

2. Crear el Clúster de ECS

Crea el Clúster: Puedes crear un clúster ECS usando Fargate o EC2. Aquí usaremos Fargate.

 aws ecs create-cluster --cluster-name flask-cluster

3. Crear una Tarea de ECS

Registrar la Definición de Tarea: Usa el siguiente comando para registrar la definición de tarea.

 aws ecs register-task-definition --cli-input-json file://task-definition.json

Define la Tarea de ECS: La tarea es la definición de cómo se ejecutará tu contenedor. Puedes crear una definición de tarea JSON o usar la CLI. Aquí un ejemplo de un archivo JSON para la definición de tarea.Crea un archivo llamado task-definition.json con el siguiente contenido:

 {
   "family": "flask-task",
   "networkMode": "awsvpc",
   "containerDefinitions": [
     {
       "name": "flask-container",
       "image": "<aws-account-id>.dkr.ecr.your-region.amazonaws.com/flask-app:latest",
       "portMappings": [
         {
           "containerPort": 80,
           "hostPort": 80,
           "protocol": "tcp"
         }
       ],
       "essential": true
     }
   ],
   "requiresCompatibilities": ["FARGATE"],
   "cpu": "256",
   "memory": "512",
   "executionRoleArn": "arn:aws:iam::<aws-account-id>:role/ecsTaskExecutionRole",
   "networkConfiguration": {
     "awsvpcConfiguration": {
       "subnets": ["subnet-xxxxxxxx"],
       "securityGroups": ["sg-xxxxxxxx"],
       "assignPublicIp": "ENABLED"
     }
   }
 }

4. Crear un Servicio ECS

Crear el Servicio ECS: El servicio ECS se encarga de ejecutar y mantener tu tarea. Usa el siguiente comando para crear un servicio que ejecute la tarea.

 aws ecs create-service \
 --cluster flask-cluster \
 --service-name flask-service \
 --task-definition flask-task \
 --desired-count 1 \
 --launch-type FARGATE \
 --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxxxx],securityGroups=[sg-xxxxxxxx],assignPublicIp=ENABLED}"

5. Configuración de Balanceador de Carga (Opcional)

Si necesitas un balanceador de carga (por ejemplo, ALB), sigue estos pasos adicionales:

  1. Crea un Application Load Balancer (ALB) desde la consola de EC2 y configura un grupo de destino que apunte a tus tareas ECS.
  2. Asocia el ALB con el Servicio ECS en la definición del servicio utilizando el ARN del ALB.

6. Acceder a la Aplicación

Una vez que el servicio esté corriendo, puedes acceder a la aplicación Flask a través de la IP pública asignada a la tarea o mediante el DNS del Load Balancer si configuraste uno.

Resumen

  • Sube la imagen Docker a ECR.
  • Crea un clúster de ECS.
  • Define y registra la tarea que ejecuta el contenedor.
  • Crea un servicio ECS para mantener la tarea en ejecución.
  • (Opcional) Configura un balanceador de carga para manejar el tráfico a las tareas.

Con esto deberías tener tu aplicación Flask desplegada y accesible en AWS ECS.

]]>