Cookies técnicas y, con tu permiso, de análisis. Política de cookies

    Saltar al contenido

    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.

    Por Actualizado el 11 min de lectura

    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íntomaQué provocaQué lo corrige en el pipeline
    Despliegues manualesErrores humanos y dependencia de quien sabe hacerloDespliegue scriptado e idéntico en cada entorno
    Sin tests automáticosLos fallos se descubren en producciónEtapa de test que bloquea el merge si falla
    Sin rollbackRecuperaciones largas tras un mal despliegueImágenes inmutables por commit y estrategia con vuelta atrás
    Credenciales en variablesClaves de larga duración que nadie rotaOIDC con roles de IAM por entorno
    Pipelines lentosEl equipo agrupa cambios y despliega menosCaché, 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.

    EtapaQué haceHerramientas habitualesRegla de paso
    BuildCompila y construye la imagen de contenedorDocker, Amazon ECRImagen etiquetada con el SHA del commit, nunca solo latest
    TestPruebas unitarias y de integraciónJest, PyTest, JUnit…Cualquier test fallido bloquea el merge request
    SeguridadAnálisis estático, secretos, dependencias e imágenesPlantillas de seguridad de GitLab, SonarQube, escaneo de ECRHallazgos críticos bloquean según la política acordada
    InfraestructuraCambios de infraestructura como códigoTerraform u OpenTofuEl plan se revisa en el merge request; el apply, tras aprobación
    StagingDespliegue automático desde la rama principalECS, EKS (Helm, Argo CD o Flux), LambdaPruebas de humo en verde
    ProducciónDespliegue con aprobación y estrategia de bajo riesgoRolling, blue/green o canaryRollback automático si saltan las alarmas
    ObservaciónErrores, latencia y métricas de entregaCloudWatch, Prometheus y GrafanaAlertas 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: manual

    La 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 sub al proyecto y a la rama (por ejemplo, project_path:grupo/app:ref_type:branch:ref:main). Las variables CI_JOB_JWT se eliminaron en GitLab 17.0; si tu pipeline aún las usa, hay que migrar a id_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?

    EstrategiaCómo funcionaCuándo encajaCómo se hace en AWS
    RollingSustituye las instancias o tareas poco a pocoPunto de partida razonable para casi todoRolling update de ECS con el circuit breaker activado para el rollback automático; RollingUpdate en EKS
    Blue/greenLevanta la versión nueva junto a la actual y cambia el tráfico de golpeCambios críticos en los que la vuelta atrás debe ser inmediataAWS CodeDeploy para ECS o Lambda; en EKS, Argo Rollouts
    CanaryEnvía una parte pequeña del tráfico a la versión nueva y amplía si va bienMucho tráfico y métricas fiables para decidirConfiguraciones canary de CodeDeploy; en EKS, Argo Rollouts o Flagger
    Feature flagsDespliega el código apagado y lo activa despuésSeparar el despliegue del lanzamiento de negocioFeature 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.

    IndicadorResultado
    Time-to-deploy15 min
    Frecuencia de despliegueDe semanal y manual a diaria y automatizada
    Releases publicadas5× 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?

    ModeloQué incluyePrecio (sin IVA)
    Proyecto cerradoImplantación de CI/CD, migración u observabilidad, con entregables por contrato15.000–40.000 € en 3–4 meses
    DevOps GestionadoSoporte de infraestructura y FinOps continuo, más CI/CD, IaC y observabilidad operados y mejorados cada mesDesde 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

    1. Medir baseline de DORA (Lead Time, Frequency, CFR, MTTR).
    2. Ejecutar pruebas de pipeline fallando a propósito (quality gates y rollback).
    3. Verificar despliegues por entorno con trazabilidad de cambios.
    4. Validar tiempo de recuperación tras incidente simulado.

    Protocolo de validación reproducible

    FaseObjetivoMétodoCriterio de aceptación
    BaselineConocer desempeño actual de entregaMedir DORA durante al menos 4 semanasMétricas segmentadas por equipo y producto
    HipótesisElegir cuello de botella principalMapear pipeline y tiempo de espera por faseHipótesis con impacto esperado en lead time/CFR
    ValidaciónDemostrar mejora sin comprometer estabilidadAutomatizar pruebas, release canary y rollbackLead time baja y CFR no empeora
    EscaladoConvertir práctica en estándar de equipoPlantillas de pipeline, runbooks y revisiones quincenalesAdopción en todos los servicios prioritarios

    Datos que debes conservar como evidencia

    MétricaHerramientaCadenciaObjetivo
    Lead TimeCI/CD analyticsSemanalReducción 20-40%
    Change Failure RateDeploy + incidentesSemanal< 15%
    MTTROn-call + postmortemSemanalReducción sostenida
    Frecuencia de desplieguePipelineDiarioAlineada a negocio

    Dashboard mínimo recomendado

    PanelFuenteActualizaciónUmbral operativo
    Flujo CI/CDGit + pipelineDiarioSuccess rate > 90%
    Riesgo de releaseIncidencias + desplieguesDiarioCFR < 15%
    Recuperación operativaOn-call + postmortemsSemanalMTTR en tendencia descendente
    Tiempo a producciónPR a deploySemanalLead 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.

    Semana 128%

    Métricas DORA base y flujo CI/CD mapeado.

    Semana 452%

    Pipeline más fiable y menos intervención manual.

    Semana 874%

    Menor lead time y mayor frecuencia con control de riesgo.

    Semana 1287%

    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.

    Recurso gratuito · PDF

    Checklist FinOps AWS: 40 puntos para recortar tu factura

    El mismo checklist que usamos en cada diagnóstico. Márcalo sobre tu cuenta AWS y sabrás dónde se te va el dinero.

    • 40 puntos de revisión en 5 áreas
    • Quick wins aplicables en 2–4 semanas
    • El mismo checklist que usamos en los diagnósticos

    Sin spam. Solo te contactaremos si tú lo pides o si marcas la casilla opcional.

    Formulario protegido por reCAPTCHA de Google (Privacidad · Términos).

    ¿Quieres aplicarlo con ayuda en DevOps & CI/CD?

    Si quieres priorizar quick wins y un plan ejecutable para tu equipo, podemos ayudarte con una sesión técnica de 30 minutos. Sin comerciales y sin compromiso.

    ¿Prefieres hacerlo por tu cuenta? Atlas Insight automatiza este análisis sobre tus cuentas AWS.