De GitHub a AWS ECS: Despliegue de Flask con Docker Hub

Guía de despliegue de una app Flask con CI/CD automatizado utilizando GitHub Actions, Docker Hub y AWS ECS. Incluye estructura, IAM y buenas prácticas de seguridad.

26 sept 2025 • 5 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

Desplegar aplicaciones de forma fluida es una habilidad clave en el panorama actual de ingeniería de software y DevOps. En este artículo explico cómo desplegar una aplicación Flask usando GitHub Actions, Docker Hub y AWS ECS, describo la estructura del repositorio y detallo los pasos para crear una canalización CI CD totalmente automatizada que publique actualizaciones directamente en ECS.

Sobre Q2BSTUDIO: Somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida, con experiencia en inteligencia artificial, ciberseguridad, servicios cloud aws y azure y soluciones de inteligencia de negocio. Si necesita un producto adaptado a sus necesidades visite desarrollo de aplicaciones y software multiplataforma o conozca nuestras ofertas de nube en servicios cloud AWS y Azure. Ofrecemos además integración de IA para empresas, agentes IA y soluciones con Power BI para inteligencia de negocio.

Resumen del flujo de trabajo a alto nivel: usted escribe y commitea el código en GitHub; GitHub Actions construye una imagen Docker y la publica en Docker Hub; a continuación se actualiza el servicio en AWS ECS para forzar un nuevo despliegue; ECS extrae la imagen desde Docker Hub y ejecuta la aplicación en la nube; finalmente su aplicación queda accesible vía URL o IP pública.

Requisitos previos: repositorio con la app Flask en GitHub; cuenta y repositorio en Docker Hub; cuenta AWS; conocimientos básicos de Docker; claves y secretos para GitHub Actions: DOCKERHUB_USERNAME, DOCKERHUB_TOKEN, AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.

Permisos y roles en AWS: para que ECS pueda descargar imágenes y escribir logs en CloudWatch necesita dos permisos principales y un role de ejecución. En lugar de pegar las políticas en JSON aquí le recomiendo crear dos políticas en IAM mediante la consola: una que permita obtener token de ECR, comprobar capas y descargar imágenes, y otra que permita crear grupos y streams de logs y poner eventos de logs. Luego crea un role con una trust policy que permita a ecs-tasks.amazonaws.com asumir el role y adjunta las dos políticas previas. Nombre sugerido para el role: ECSExecutionRole. Estas acciones aseguran que las tareas puedan tirar de imágenes y registrar información para monitorización y depuración.

Conceptos clave de ECS: task definition es la plantilla que define la imagen, recursos, variables de entorno y puertos; una task es la instancia en ejecución; un service mantiene el número deseado de tareas; un cluster agrupa recursos y puede usar EC2 o Fargate. Recomendación práctica: utilizar Fargate para evitar gestionar infraestructura, seleccionar una familia de task definition coherente con el proyecto, asignar 1 vCPU y 2 GB de memoria si la app es ligera y asociar el role de ejecución creado.

Opciones de cómputo en el servicio ECS: puede usar la estrategia de capacity provider para combinar FARGATE y FARGATE_SPOT o elegir un launch type simple. Platform version puede quedar en LATEST salvo que necesite características concretas de versiones anteriores. Configure redes VPC y subnets, y habilite Container Insights para observabilidad avanzada con CloudWatch.

Estructura típica del repositorio: Dockerfile, docker-compose.yml, archivo cicd.yml para GitHub Actions y un archivo .env con variables de entorno. Describo a continuación lo esencial de cada uno sin reproducir fragmentos literales de configuración.

Dockerfile: base python 3.10 slim para ligereza; instalar dependencias del sistema necesarias, copiar requirements y ejecutar pip install sin cache; copiar el código de la aplicación; establecer variables de entorno para PYTHONPATH y la entrada de Flask; exponer el puerto 5000 y lanzar el servidor en 0.0.0.0 puerto 5000 para que sea accesible desde fuera del contenedor. Este diseño garantiza consistencia entre entornos y permite escalar con contenedores.

docker compose: define un servicio web que construye la imagen localmente, recoge variables sensibles desde .env, mapea el puerto 5000 del contenedor al host y monta el código para facilitar desarrollo. En producción no es necesario montar volúmenes pero el compose es útil para pruebas locales y conectividad entre servicios como bases de datos.

GitHub Actions workflow: un flujo clásico consta de dos jobs principales. Job build: chequea el código, construye la imagen Docker y hace login en Docker Hub usando secretos del repositorio para publicar la imagen. Job deploy: depende de build y configura credenciales AWS usando los secretos correspondientes, y ejecuta el comando AWS CLI para actualizar el servicio ECS y forzar un nuevo despliegue. Este patrón asegura despliegues automáticos al hacer push a la rama principal.

Variables y secretos: cree un archivo .env con DATABASE_URL, OPENAI_API_KEY, SECRET_KEY, POSTGRES_USER, POSTGRES_PASSWORD y POSTGRES_DB para pruebas locales. En GitHub configure secretos de Actions para DOCKERHUB_USERNAME, DOCKERHUB_TOKEN, AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY. Mantener secretos fuera del repositorio es fundamental para seguridad.

Comandos útiles: clonar el repositorio con git clone https://github.com/21toffy/docker-ecs-deployment-test.git y entrar en el directorio con cd docker-ecs-deployment-test. Para construir y etiquetar localmente use docker build -t nombre_imagen:tag . y para subir a Docker Hub use docker push nombre_imagen:tag. Para forzar un redeploy desde la CI use aws ecs update-service --cluster nombre_cluster --service nombre_servicio --force-new-deployment con las credenciales AWS configuradas en el runner.

Buenas prácticas de seguridad y operación: limite permisos en IAM al principio y aplique el principio de menor privilegio; rote las credenciales periódicamente; habilite CloudWatch y Container Insights para alertas; use variables de entorno y secretos gestionados por GitHub Actions o AWS Secrets Manager; para cargas sensibles considere el uso de repositorios privados en AWS ECR en lugar de Docker Hub.

Beneficios de esta canalización: centraliza el control de versiones en GitHub, empaqueta la aplicación con Docker para reproducibilidad, almacena imágenes en Docker Hub para despliegue continuo y automatiza el proceso con GitHub Actions reduciendo errores humanos y acelerando entregas. Es una base escalable compatible con IA para empresas, agentes IA y procesos de business intelligence con Power BI, que se integran fácilmente en pipelines de despliegue y monitorización.

Servicios complementarios y oferta de Q2BSTUDIO: si busca desarrollar soluciones más avanzadas a medida, integrar modelos de inteligencia artificial, proteger sus aplicaciones con estrategias de ciberseguridad o explotar datos con Power BI y servicios de inteligencia de negocio, en Q2BSTUDIO ofrecemos consultoría y desarrollo completo. Podemos ayudar a automatizar procesos, desplegar en AWS o Azure y diseñar arquitecturas seguras y escalables.

Conclusión: con una estructura clara de repositorio, roles y políticas IAM adecuadas, un workflow de GitHub Actions que construya y publique imágenes y una configuración correcta de ECS, puede disponer de un pipeline CI CD robusto para desplegar aplicaciones Flask en la nube de forma automática. Para proyectos a medida y soporte en todo el ciclo de vida del software, contacte con nosotros y aproveche nuestra experiencia en aplicaciones a medida, inteligencia artificial, ciberseguridad y servicios cloud.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat