AWS App Runner es un servicio completamente gestionado de aplicaciones en contenedor de Amazon Web Services diseñado para simplificar el ciclo de vida de construir, desplegar y escalar aplicaciones web y APIs. En esta guía práctica desplegaremos una aplicación Go containerizada con una base de datos MongoDB ejecutándose en EC2, y la publicaremos en App Runner. Además, te mostraremos buenas prácticas de redes y seguridad, y cómo esto encaja con un enfoque moderno de servicios cloud aws y azure.
En Q2BSTUDIO acompañamos a empresas en su viaje cloud y de modernización de aplicaciones a medida e inteligencia artificial, con foco en ciberseguridad, automatización y servicios inteligencia de negocio. Si buscas un partner para llevar tu arquitectura al siguiente nivel, descubre nuestros servicios cloud en AWS y Azure y nuestro enfoque de software a medida y aplicaciones a medida.
Paso 1 Clonar el repositorio del proyecto. Usaremos el repo tasky una app de gestión de tareas en Go que persiste en MongoDB disponible en GitHub.
Paso 2 Construir y publicar la imagen en Amazon ECR con GitHub Actions. El repositorio ya incluye un Dockerfile. Crea el repositorio ECR y añade este flujo en tu repo ajustando variables y sin usar credenciales de larga duración.
name: Build and Push to ECR
on:
push:
branches: [main]
env:
AWS_REGION: eu-west-1
ECR_REPOSITORY: tasky
ACCOUNT_ID: tu_id_de_cuenta
ROLE_NAME: github-actions-role
permissions:
id-token: write
contents: read
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.ROLE_NAME }}
role-session-name: github_action_session
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Build and push image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
run: docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:latest . && docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
Paso 3 Configurar OIDC para GitHub Actions en AWS. AWS recomienda OIDC frente a claves de acceso de larga duración. Crea el proveedor OIDC y una IAM Role de asunción web para tu repositorio.
Crear proveedor OIDC con AWS CLI
aws iam create-open-id-connect-provider --url https://token.actions.githubusercontent.com --client-id-list sts.amazonaws.com --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
Crear la role github-actions-role con política de confianza que permita sts AssumeRoleWithWebIdentity desde el proveedor oidc token.actions.githubusercontent.com con condición de aud igual a sts.amazonaws.com y sub igual a repo usuarioGitHub tasky ref refs heads main. Asigna permisos mínimos para ECR como ecr GetAuthorizationToken ecr PutImage ecr InitiateLayerUpload y ecr CompleteLayerUpload entre otros.
Haz push a main y verifica en ECR que la imagen tasky latest está disponible.
Paso 4 Desplegar MongoDB en EC2. Lanza una instancia t3.micro con Ubuntu en la misma región y VPC donde App Runner tendrá salida. En el Security Group abre TCP 27017 solo para la red interna de tu VPC o para el conector VPC de App Runner. Evita 0.0.0.0 0 en producción.
Instalación de MongoDB 7 en Ubuntu
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
echo deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org
mongod --version
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod
Paso 5 Crear usuario administrador en MongoDB y habilitar autenticación. Conecta con mongosh, cambia a la base admin y crea un usuario con rol userAdminAnyDatabase y readWriteAnyDatabase. Después edita etc mongod.conf para permitir conexiones externas controladas y activa authorization enabled. Reinicia con sudo systemctl restart mongod.
Ejemplo de red en mongod.conf
net:
port: 27017
bindIp: 0.0.0.0,::
security:
authorization: enabled
Paso 6 Crear el servicio de App Runner. En la consola de App Runner elige From container registry, selecciona la imagen de ECR y configura las variables de entorno. Para MONGODB_URI usa el Private IP de la instancia EC2 y no el Public IP. La aplicación Go expone el puerto 8080, así que ajusta el puerto de la app en App Runner a 8080. Ejemplo de MONGODB_URI mongodb://admin:contraseña_privada@private_ip_ec2:27017 admin o la base correspondiente con opciones de auth si aplican.
Paso 7 Red y conectividad. En Networking selecciona Custom VPC y crea o reutiliza un VPC Connector que apunte a subredes privadas con rutas hacia la instancia EC2. Asegúrate de que el Security Group del conector puede hablar con el SG de la instancia en el puerto 27017 y que hay rutas adecuadas. Con esto App Runner podrá acceder a MongoDB mediante la IP privada.
Paso 8 Despliegue y prueba. Lanza el servicio. Cuando esté en estado Running copia el Default domain de App Runner, regístrate en la aplicación, crea tareas y verifica que los datos persisten. Puedes cerrar sesión y volver a iniciar para comprobar la persistencia en MongoDB.
Limpieza. Elimina el servicio de App Runner y termina la instancia EC2 cuando acabes para evitar costes innecesarios. Si quieres, borra la imagen del repositorio ECR.
Buenas prácticas y seguridad
- Limita el puerto 27017 a orígenes internos SG a SG en lugar de 0.0.0.0 0
- Usa secretos gestionados para credenciales por ejemplo AWS Secrets Manager integrándolos como variables en App Runner
- Implementa políticas IAM de mínimo privilegio y OIDC con condiciones de sub al repositorio rama y entorno adecuados
- Monitorea con CloudWatch logs y métricas, añade alarmas y activa auto scaling de App Runner
En Q2BSTUDIO combinamos cloud nativo con software a medida, ia para empresas, agentes IA y ciberseguridad para acelerar la entrega de valor. También diseñamos cuadros de mando con power bi y servicios inteligencia de negocio para extraer insights accionables. Si necesitas diseñar una plataforma escalable, segura y preparada para IA, cuenta con nosotros.
Recursos recomendados
- Documentación de AWS App Runner
- Guías de instalación de MongoDB en Ubuntu
- Mejores prácticas de IAM con OIDC en GitHub Actions
Palabras clave recomendadas aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.