ECS + Flask APP

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. 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.

  4. 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
    
  5. Construye y Suba la Imagen a ECR:

    • Construye la imagen Docker.

        docker build -t flask-app .
      
    • 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
      
    • Sube la imagen a ECR.

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

2. Crear el Clúster de ECS

  1. 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

  1. 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"
         }
       }
     }
    
  2. 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
    

4. Crear un Servicio ECS

  1. 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.