CI/CD & DevOps
CI/CD con GitLab en AWS: cómo montarlo y cuánto cuesta
Cómo montar un pipeline CI/CD con GitLab en AWS: etapas, acceso por OIDC sin claves, despliegue en ECS, EKS o Lambda, rollback y precio de implantación.
Respuesta corta
Un pipeline CI/CD con GitLab en AWS construye, prueba, analiza y despliega cada cambio de forma automática: GitLab CI ejecuta las etapas definidas en .gitlab-ci.yml, el job obtiene credenciales temporales de AWS por OIDC (sin claves guardadas) y despliega en ECS, EKS o Lambda con el rollback preparado. Los despliegues pueden ser hasta 10× más rápidos frente al proceso manual previo, en entornos con despliegue manual. Implantarlo como proyecto cerrado cuesta 15.000–40.000 € en 3–4 meses, y operarlo cada mes entra en DevOps Gestionado, desde 1.790€/mes sin IVA.
¿Qué problemas resuelve un pipeline CI/CD?
Son los síntomas de un proceso de entrega sin automatizar. Ninguno se arregla con más cuidado al desplegar; se arreglan quitando pasos manuales.
| Síntoma | Qué provoca | Qué lo corrige en el pipeline |
|---|---|---|
| Despliegues manuales | Errores humanos y dependencia de quien sabe hacerlo | Despliegue scriptado e idéntico en cada entorno |
| Sin tests automáticos | Los fallos se descubren en producción | Etapa de test que bloquea el merge si falla |
| Sin rollback | Recuperaciones largas tras un mal despliegue | Imágenes inmutables por commit y estrategia con vuelta atrás |
| Credenciales en variables | Claves de larga duración que nadie rota | OIDC con roles de IAM por entorno |
| Pipelines lentos | El equipo agrupa cambios y despliega menos | Caché, jobs en paralelo con needs y runners dimensionados |
¿Qué etapas debe tener un pipeline CI/CD con GitLab en AWS?
Esta es la secuencia que proponemos como punto de partida. Cada etapa tiene una regla de paso explícita: si no se cumple, el cambio no avanza.
| Etapa | Qué hace | Herramientas habituales | Regla de paso |
|---|---|---|---|
| Build | Compila y construye la imagen de contenedor | Docker, Amazon ECR | Imagen etiquetada con el SHA del commit, nunca solo latest |
| Test | Pruebas unitarias y de integración | Jest, PyTest, JUnit… | Cualquier test fallido bloquea el merge request |
| Seguridad | Análisis estático, secretos, dependencias e imágenes | Plantillas de seguridad de GitLab, SonarQube, escaneo de ECR | Hallazgos críticos bloquean según la política acordada |
| Infraestructura | Cambios de infraestructura como código | Terraform u OpenTofu | El plan se revisa en el merge request; el apply, tras aprobación |
| Staging | Despliegue automático desde la rama principal | ECS, EKS (Helm, Argo CD o Flux), Lambda | Pruebas de humo en verde |
| Producción | Despliegue con aprobación y estrategia de bajo riesgo | Rolling, blue/green o canary | Rollback automático si saltan las alarmas |
| Observación | Errores, latencia y métricas de entrega | CloudWatch, Prometheus y Grafana | Alertas con responsable y métricas DORA visibles |
Un esqueleto de .gitlab-ci.yml
El fragmento muestra las piezas que más se olvidan: plantillas de seguridad incluidas, credenciales de AWS por OIDC, un rol distinto por entorno y producción con paso manual. Las etapas de build y test se omiten por brevedad, y deploy.sh representa tu script de despliegue (por ejemplo, registrar la nueva definición de tarea de ECS con la imagen del commit y actualizar el servicio).
stages: [build, test, staging, production]
include:
- template: Jobs/SAST.gitlab-ci.yml
- template: Jobs/Secret-Detection.gitlab-ci.yml
.aws:
image:
name: amazon/aws-cli
entrypoint: [""]
id_tokens:
AWS_ID_TOKEN:
aud: https://gitlab.com
before_script:
- echo "$AWS_ID_TOKEN" > /tmp/web-identity-token
- export AWS_WEB_IDENTITY_TOKEN_FILE=/tmp/web-identity-token
deploy_staging:
extends: .aws
stage: staging
environment: staging
variables:
AWS_ROLE_ARN: $ROLE_ARN_STAGING
script:
- ./deploy.sh staging "$CI_COMMIT_SHORT_SHA"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
deploy_production:
extends: .aws
stage: production
environment: production
variables:
AWS_ROLE_ARN: $ROLE_ARN_PRODUCTION
script:
- ./deploy.sh production "$CI_COMMIT_SHORT_SHA"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: manualLa CLI de AWS asume el rol indicado en AWS_ROLE_ARN con el token del fichero de AWS_WEB_IDENTITY_TOKEN_FILE. Las variables ROLE_ARN_STAGING y ROLE_ARN_PRODUCTION se guardan como variables protegidas del proyecto, y el valor de aud debe coincidir con la audiencia configurada en el proveedor OIDC de IAM.
¿Cómo se conecta GitLab con AWS de forma segura?
- OIDC en lugar de claves. Un proveedor de identidad OIDC en IAM y un rol por entorno cuya política de confianza restringe la condición
subal proyecto y a la rama (por ejemplo,project_path:grupo/app:ref_type:branch:ref:main). Las variablesCI_JOB_JWTse eliminaron en GitLab 17.0; si tu pipeline aún las usa, hay que migrar aid_tokens. - Mínimo privilegio. El rol de staging no puede tocar producción, y el de despliegue no administra IAM.
- Secretos fuera del repositorio. Variables protegidas y enmascaradas en GitLab para lo imprescindible; el resto, en AWS Secrets Manager o Parameter Store, leído en tiempo de ejecución.
- Ramas y entornos protegidos. Solo la rama principal despliega, y producción exige un paso manual. Las aprobaciones obligatorias de despliegue y de merge request dependen del plan de GitLab que tengas.
- Runners bajo control. Los runners alojados de GitLab valen para empezar; con runners propios en tu cuenta AWS (en EC2 con autoescalado o en EKS) controlas red, coste y acceso a recursos privados.
Si quieres profundizar en los controles de seguridad del pipeline, lo desarrollamos en DevSecOps en GitLab y AWS.
¿Qué estrategia de despliegue conviene: rolling, blue/green o canary?
| Estrategia | Cómo funciona | Cuándo encaja | Cómo se hace en AWS |
|---|---|---|---|
| Rolling | Sustituye las instancias o tareas poco a poco | Punto de partida razonable para casi todo | Rolling update de ECS con el circuit breaker activado para el rollback automático; RollingUpdate en EKS |
| Blue/green | Levanta la versión nueva junto a la actual y cambia el tráfico de golpe | Cambios críticos en los que la vuelta atrás debe ser inmediata | AWS CodeDeploy para ECS o Lambda; en EKS, Argo Rollouts |
| Canary | Envía una parte pequeña del tráfico a la versión nueva y amplía si va bien | Mucho tráfico y métricas fiables para decidir | Configuraciones canary de CodeDeploy; en EKS, Argo Rollouts o Flagger |
| Feature flags | Despliega el código apagado y lo activa después | Separar el despliegue del lanzamiento de negocio | Feature flags de GitLab u otra herramienta compatible |
Blue/green y canary necesitan capacidad extra durante el cambio y métricas que digan si la versión nueva va bien. Sin observabilidad, un canary solo retrasa el problema.
Antes de automatizar: lo que conviene tener resuelto
- Repositorio Git único por aplicación y estrategia de ramas sencilla (trunk-based o similar).
- Al menos una batería mínima de tests que se ejecute en local y en CI.
- Un entorno de staging que se parezca a producción.
- Infraestructura descrita como código, o un plan para llevarla.
- Secretos fuera del código y de los ficheros de configuración.
- Alertas mínimas en producción: disponibilidad, errores 5xx y latencia.
- Un procedimiento escrito de vuelta atrás, aunque al principio sea manual.
¿Qué resultados se pueden esperar? Un caso real
Una startup SaaS desplegaba a mano, sin controles de seguridad, y eso retrasaba la entrega de nuevas funcionalidades. Implantamos un pipeline con GitLab CI, análisis estático con SonarQube en cada commit, contenedores Docker, despliegue automático a staging y producción con políticas de aprobación y rollback automático. Se hizo de forma incremental, con el despliegue manual como respaldo durante las primeras semanas.
| Indicador | Resultado |
|---|---|
| Time-to-deploy | 15 min |
| Frecuencia de despliegue | De semanal y manual a diaria y automatizada |
| Releases publicadas | 5× más |
El detalle, con arquitectura y decisiones, está en el caso del pipeline CI/CD para una startup SaaS. Como referencia general, los despliegues pueden ser hasta 10× más rápidos frente al proceso manual previo, en entornos con despliegue manual. El resultado depende del punto de partida.
¿Cuánto cuesta implantar CI/CD con GitLab en AWS?
| Modelo | Qué incluye | Precio (sin IVA) |
|---|---|---|
| Proyecto cerrado | Implantación de CI/CD, migración u observabilidad, con entregables por contrato | 15.000–40.000 € en 3–4 meses |
| DevOps Gestionado | Soporte de infraestructura y FinOps continuo, más CI/CD, IaC y observabilidad operados y mejorados cada mes | Desde 1.790€/mes, sin permanencia |
Como referencia, el rango de mercado que manejamos para un servicio DevOps gestionado en España es de 2.000–8.000 €/mes. El precio exacto se da por escrito tras un diagnóstico gratuito: Sesión de 30 minutos para entender tu infraestructura y, en 24h, un informe con mapa de costes, riesgos y quick wins priorizadas. Todos los planes están en precios, y el alcance del servicio en DevOps y CI/CD.
¿Lo monta tu equipo o lo externalizas?
Si tu equipo tiene tiempo y experiencia en AWS, el esqueleto de arriba es un buen punto de partida. Si el pipeline compite con el desarrollo de producto, suele compensar externalizar la implantación y decidir después si se opera dentro o fuera. Lo comparamos en DevOps gestionado frente a equipo interno.
Validación técnica y evidencia recomendada
Para que este enfoque sea defendible ante dirección y equipos técnicos, conviene acompañar la implementación con pruebas repetibles, métricas comparables y un registro claro de decisiones.
Pruebas técnicas mínimas
- Medir baseline de DORA (Lead Time, Frequency, CFR, MTTR).
- Ejecutar pruebas de pipeline fallando a propósito (quality gates y rollback).
- Verificar despliegues por entorno con trazabilidad de cambios.
- Validar tiempo de recuperación tras incidente simulado.
Protocolo de validación reproducible
| Fase | Objetivo | Método | Criterio de aceptación |
|---|---|---|---|
| Baseline | Conocer desempeño actual de entrega | Medir DORA durante al menos 4 semanas | Métricas segmentadas por equipo y producto |
| Hipótesis | Elegir cuello de botella principal | Mapear pipeline y tiempo de espera por fase | Hipótesis con impacto esperado en lead time/CFR |
| Validación | Demostrar mejora sin comprometer estabilidad | Automatizar pruebas, release canary y rollback | Lead time baja y CFR no empeora |
| Escalado | Convertir práctica en estándar de equipo | Plantillas de pipeline, runbooks y revisiones quincenales | Adopción en todos los servicios prioritarios |
Datos que debes conservar como evidencia
| Métrica | Herramienta | Cadencia | Objetivo |
|---|---|---|---|
| Lead Time | CI/CD analytics | Semanal | Reducción 20-40% |
| Change Failure Rate | Deploy + incidentes | Semanal | < 15% |
| MTTR | On-call + postmortem | Semanal | Reducción sostenida |
| Frecuencia de despliegue | Pipeline | Diario | Alineada a negocio |
Dashboard mínimo recomendado
| Panel | Fuente | Actualización | Umbral operativo |
|---|---|---|---|
| Flujo CI/CD | Git + pipeline | Diario | Success rate > 90% |
| Riesgo de release | Incidencias + despliegues | Diario | CFR < 15% |
| Recuperación operativa | On-call + postmortems | Semanal | MTTR en tendencia descendente |
| Tiempo a producción | PR a deploy | Semanal | Lead time por debajo del objetivo trimestral |
Curva de madurez esperada (referencial)
Esta visualización sirve como referencia operativa para 90 días. Debe ajustarse con tus datos reales, complejidad técnica y contexto de negocio.
Métricas DORA base y flujo CI/CD mapeado.
Pipeline más fiable y menos intervención manual.
Menor lead time y mayor frecuencia con control de riesgo.
Prácticas estandarizadas por equipo/plataforma.
Riesgos que invalidan resultados
- Automatizar un proceso deficiente sin rediseñar flujo de trabajo.
- Optimizar velocidad de entrega sin control de calidad en producción.
- No tener estrategia de rollback y depender de fixes de urgencia.
- Evaluar DevOps solo por tooling y no por outcomes de entrega.
Recomendaciones de implementación real
- No adoptar herramientas sin rediseñar el flujo operativo del equipo.
- Definir Definition of Done incluyendo seguridad y operabilidad.
- Automatizar controles repetitivos y reservar tiempo para deuda técnica.
- Revisar métricas DORA con producto, no solo con ingeniería.
Preguntas frecuentes que suele hacer un equipo técnico
¿Qué indicador DevOps explica mejor la salud del proceso?
Ninguno por separado. La combinación de lead time, frequency, CFR y MTTR evita decisiones sesgadas y da una lectura real de velocidad con calidad.
¿Cuándo conviene implantar platform engineering?
Cuando varios equipos repiten el mismo trabajo operativo y la complejidad de despliegue consume capacidad de producto.
¿Cómo reducir incidentes tras desplegar más rápido?
Con release progresivo, observabilidad por servicio y criterios automáticos de rollback basados en error budget.
Preguntas frecuentes
¿Cómo se autentica GitLab CI en AWS sin guardar claves de acceso?
Con OpenID Connect. El job pide un token firmado con la palabra clave id_tokens, AWS lo valida contra un proveedor OIDC de IAM y entrega credenciales temporales de un rol cuya política de confianza solo admite ese proyecto y esa rama. Así no hay claves de acceso de larga duración en variables de CI/CD. Las variables CI_JOB_JWT antiguas se eliminaron en GitLab 17.0, así que los pipelines que aún dependían de ellas deben migrar a id_tokens.
¿Cuánto cuesta implantar un pipeline CI/CD con GitLab en AWS?
Como proyecto cerrado con entregables por contrato, entre 15.000 y 40.000 € en 3–4 meses, según el alcance. Si además quieres que alguien lo opere y lo mejore cada mes, el plan DevOps Gestionado de SysCu parte de 1.790€/mes e incluye soporte de infraestructura, FinOps continuo, CI/CD, infraestructura como código y observabilidad. Precios sin IVA y sin permanencia; el importe exacto se fija por escrito tras el diagnóstico gratuito.
¿Cuánto más rápido se despliega con CI/CD?
Depende del punto de partida: los despliegues pueden ser hasta 10× más rápidos frente al proceso manual previo, en entornos con despliegue manual. En el caso de una startup SaaS, el time-to-deploy quedó en 15 minutos, pasó de desplegar cada semana a desplegar a diario y publicó 5 veces más releases.
¿GitLab CI o GitHub Actions para desplegar en AWS?
Los dos sirven y los dos admiten OIDC con AWS. Lo sensato es usar el que ya aloja tu código. GitLab reúne repositorio, CI/CD, registro de contenedores, entornos y escaneos de seguridad en la misma herramienta, lo que simplifica la gobernanza si ya trabajas en él.
¿Necesito Kubernetes para tener CI/CD en AWS?
No. Para muchas aplicaciones basta con Amazon ECS sobre Fargate o con AWS Lambda, que exigen menos operación. EKS compensa cuando hay muchos servicios o varios equipos que necesitan una plataforma común; el pipeline cambia en el paso de despliegue, no en el resto.
¿Se puede automatizar sin parar la operación?
Sí. Se implanta de forma incremental: primero integración continua y staging, después producción con aprobación manual. Durante las primeras semanas conviene mantener el despliegue manual como alternativa de respaldo, como se hizo en el caso SaaS.