Amazon DOP-C02: Canalizaciones de CI/CD y Estrategias de Despliegue — Guía de estudio
Forma parte de la AWS DevOps Engineer Professional DOP-C02 — Guía de estudio. Practica con respuestas verificadas en el centro de exámenes de Amazon, o realiza tests cronometrados en ExamRoll.io.
Visión General
Un sistema de CI/CD robusto en AWS unifica el control de código fuente, la compilación, las pruebas, la gobernanza de artefactos, la orquestación de despliegues y las estrategias de lanzamiento seguras a través de múltiples cuentas y regiones. Los servicios gestionados principales —CodeCommit, CodeArtifact, CodeBuild, CodePipeline y CodeDeploy— eliminan el mantenimiento de servidores, se integran estrechamente con IAM y KMS, y proporcionan soporte de primera clase para despliegues blue/green, canary, continuos (rolling) y en el sitio (in-place) en EC2/Auto Scaling, ECS y Lambda. Los pipelines eficaces también dependen de disparadores (triggers) precisos (webhooks, EventBridge, programaciones), una gestión de artefactos disciplinada, el almacenamiento en caché de compilaciones para mayor velocidad y un desvío de tráfico bien definido con alarmas de estado para la reversión automática. Para las empresas, los patrones entre cuentas y entre regiones son obligatorios, lo que requiere la asunción de roles, almacenes de artefactos regionales y políticas de cifrado consistentes.
Orquestación con las Herramientas para Desarrolladores de AWS
Utilice CodeCommit como un servicio Git privado y de alta disponibilidad. Se integra con EventBridge para eventos de repositorio y de pull request, admite plantillas de reglas de aprobación y utiliza IAM para una autorización detallada (fine-grained). Para Git de terceros (GitHub/Bitbucket), configure las acciones de origen de CodePipeline con webhooks para disparadores casi en tiempo real.
CodeArtifact centraliza la gestión de paquetes para múltiples ecosistemas (npm, Maven, PyPI, NuGet). Admite conexiones upstream a registros públicos con almacenamiento en caché, cifrado KMS por repositorio y tokens de autenticación con alcance limitado (scoped) que expiran automáticamente. Intégrelo en CodeBuild invocando aws codeartifact login durante la fase pre_build para configurar los gestores de paquetes sin incrustar secretos de larga duración.
CodeBuild proporciona compilaciones efímeras y en contenedores sin necesidad de gestionar workers. Capacidades clave:
- Aislamiento de entorno y soporte de VPC para dependencias privadas. Habilite el modo privilegiado para compilaciones de Docker y active el almacenamiento en caché local de capas de Docker para acelerar la creación de imágenes.
- Variables de entorno de tres fuentes: texto plano, SSM Parameter Store y Secrets Manager (seguro por defecto, sin secretos codificados). También puede pasar variables desde CodePipeline.
- Almacenamiento en caché para reducir los tiempos de compilación:
- Caché local: caché de código fuente, caché de capas de Docker y directorios personalizados en el host de compilación.
- Caché de S3: conjuntos de dependencias reutilizables compartidos entre compilaciones.
- Gestión de artefactos: especifique
primaryysecondaryArtifactspara publicar múltiples salidas (p. ej., el paquete de la aplicación y la plantilla de CloudFormation). Cifre los artefactos con claves KMS y evite las ACL públicas. - Informes: envíe los registros a CloudWatch Logs/S3. Utilice informes para los resultados de las pruebas y las insignias (badges) de CodeBuild para el feedback en los PR.
CodePipeline es el orquestador. Defina etapas (origen, compilación, prueba, despliegue, aprobación) con acciones que pueden ejecutarse en paralelo o en secuencia. Mejores prácticas:
- Disparadores (Triggers):
- Webhooks para orígenes de GitHub/Bitbucket.
- Reglas de EventBridge para cambios de rama en CodeCommit; verifique la existencia de la regla cuando los pipelines no se inicien.
- Pipelines programados mediante reglas de programación de EventBridge que llaman a
StartPipelineExecution.
- Almacenes de artefactos: un bucket de S3 por región utilizado por el pipeline; use una clave KMS gestionada por el cliente. Para acciones entre regiones, añada almacenes de artefactos regionales.
- Aprobaciones manuales con SNS o EventBridge para integrar chat/webhooks para notificaciones casi en tiempo real.
- IAM detallado (Fine-grained): un rol de servicio para el pipeline con el mínimo privilegio; se asumen roles por acción para operaciones entre cuentas.
CodeDeploy es el motor de despliegue que soporta destinos EC2/on-prem, ECS y Lambda. Gestiona hooks del ciclo de vida, desvío de tráfico, comprobaciones de estado y reversión automática a través de alarmas de CloudWatch. Asegúrese de que las instancias EC2 ejecuten el agente de CodeDeploy, tengan un perfil de instancia y conectividad de salida a los endpoints de CodeDeploy (o egreso a través de un NAT). Los eventos omitidos y los despliegues sin operación (no-op) a menudo indican problemas con el agente, los permisos o la conectividad.
Estrategias de Despliegue y Ciclo de Vida de CodeDeploy
Elige la estrategia según el riesgo, la capacidad y la plataforma:
- In-place (EC2/on-prem): Actualiza la aplicación en las instancias existentes. Combínalo con configuraciones de despliegue OneAtATime, HalfAtATime o AllAtOnce. Asocia un ELB para drenar y volver a registrar las instancias.
- Rolling (ECS): Reemplaza tareas en lotes en el mismo servicio. Puede ser un rolling nativo de ECS o gestionado a través de CodeDeploy como blue/green con un cambio controlado.
- Blue/green:
- EC2/Auto Scaling: Provisiona un ASG “green”, valida y luego corta el tráfico del “blue” al “green”. Opcionalmente, termina o conserva el entorno “blue”.
- ECS: Crea un conjunto de tareas de reemplazo (replacement task set) detrás de un segundo grupo de destino (target group); valida y luego cambia los listeners.
- Lambda: Desvía el tráfico del alias a una nueva versión de la función y monitoriza.
- Canary: Desvía primero un pequeño porcentaje (p. ej., 10%), observa durante un período de tiempo y luego completa.
- Lineal: Aumenta el tráfico en pasos iguales (p. ej., 10% cada 5 minutos).
El archivo appspec.yml de CodeDeploy define qué instalar y cuándo ejecutar scripts:
- Para EC2/On-Prem (YAML):
files: dónde colocar los archivos.permissions: actualizaciones de propietario/modo de archivo sin scripts personalizados.hooks(comunes): ApplicationStop, BeforeInstall, Install, AfterInstall, ApplicationStart, ValidateService.- Hooks de control de tráfico (al usar un balanceador de carga): BeforeBlockTraffic, AfterBlockTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- Usa variables de entorno predefinidas (p. ej.,
undefined
,
undefined
,
undefined
) para modificar el comportamiento dinámicamente sin revisiones separadas, como alternar los niveles de log de Apache por grupo de despliegue.
- Para ECS:
resources: TargetService con TaskDefinition y LoadBalancerInfo.hooks: BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic, AfterAllowTraffic.AfterAllowTestTraffices ideal para pruebas de humo/integración en el conjunto de tareas “green” con un listener de prueba.
- Para Lambda:
resourcesdefinen la función, la versión y el alias a desviar.hooks: BeforeAllowTraffic y AfterAllowTraffic.
Desvío de tráfico y rollback:
- Configura las configuraciones de despliegue:
- Lambda/ECS: Canary10Percent15Minutes, Canary10Percent5Minutes, Linear10PercentEvery1Minute, AllAtOnce, o personalizadas.
- EC2 Blue/Green: Redirección de tráfico “all-at-once”, canary o lineal a través de los listeners/grupos de destino del balanceador de carga.
- Añade alarmas de CloudWatch al grupo de despliegue para hacer rollback automático en caso de errores, 5xx o métricas personalizadas. Para ECS, las alarmas pueden vigilar los 5xx del grupo de destino o las métricas del servicio; para Lambda, vigilar los Errores/Throttles de la función con dimensiones de alias/versión.
- Usa hooks del ciclo de vida (p. ej., AfterAllowTestTraffic) para ejecutar la validación a través de Lambda o SSM; las salidas con código distinto de cero provocan un rollback.
Blue/Green y Desvío de Tráfico para EC2, ECS y Lambda
EC2/Auto Scaling:
- El despliegue blue/green con CodeDeploy provisiona un nuevo Auto Scaling group para “green”, lo asocia con un grupo de destino separado y luego cambia los listeners del ALB. Puedes elegir terminar el “blue” automáticamente o conservarlo para un rollback rápido.
- Para despliegues in-place en EC2, combínalo con un ELB para anular el registro y registrar instancias de forma controlada (gracefully) y proteger la disponibilidad. La configuración del despliegue dicta el tamaño de los lotes y el ritmo.
ECS:
- CodeDeploy se integra con los servicios de ECS utilizando dos grupos de destino detrás de un ALB. Se crea un conjunto de tareas de reemplazo (“green”) con la nueva definición de tarea.
- El tráfico de prueba fluye hacia el grupo de destino “green” a través de un listener de prueba dedicado; el tráfico de producción permanece en el “blue” hasta la promoción.
- Los desvíos canary o lineales mueven progresivamente el tráfico al “green” mientras se monitorizan las alarmas de CloudWatch. Usa AfterAllowTestTraffic para ejecutar la validación (por ejemplo, una función Lambda que invoca comprobaciones sintéticas) antes del paso a producción.
Lambda:
- CodeDeploy actualiza un alias de función a una nueva versión con enrutamiento ponderado. Los patrones canary y lineal mueven gradualmente el porcentaje de tráfico. Las alarmas de CloudWatch sobre el alias impulsan el rollback automático.
- Con AWS SAM o CDK, establece AutoPublishAlias y DeploymentPreference en las plantillas para codificar la política canary/lineal y las alarmas por función.
Enrutamiento ponderado más allá de CodeDeploy:
- Para el balanceo multi-región o multi-stack, los registros ponderados (weighted records) de Route 53 con health checks proporcionan división de tráfico regional (por ejemplo, 1% a una región secundaria) y failover. Esto complementa, pero no reemplaza, el desvío de tráfico por servicio de CodeDeploy.
Entrega multicuenta y multirregión
Los pipelines empresariales suelen residir en una cuenta centralizada de «herramientas» (tooling), desplegando en cuentas de desarrollo/pruebas/producción (dev/test/prod) a través de múltiples regiones:
- Entre cuentas (Cross-account):
- En las acciones de CodePipeline, especifica un RoleArn en la cuenta de destino que confíe en el principal del rol del pipeline. Utiliza permisos de privilegio mínimo por cada acción (CloudFormation, CodeDeploy, ECS, Lambda).
- Para CodeBuild que necesite acceder a recursos de la cuenta de destino, haz que la compilación asuma un rol (STS) o utilice un rol de acción por cuenta, no un amplio AdministratorAccess.
- Para CodeDeploy en EC2, la cuenta de destino gestiona la aplicación/grupo de despliegue y el rol de servicio; el pipeline asume un rol para llamar a CreateDeployment.
- Entre regiones (Cross-Region):
- Añade un almacén de artefactos por cada región en la configuración del pipeline (un bucket de S3 con una clave KMS regional). Actualiza las políticas del bucket para permitir que el rol del pipeline y los roles por acción puedan leer/escribir.
- Compila artefactos específicos de la región cuando sea necesario (por ejemplo, empaquetando código de Lambda con
aws cloudformation packageapuntando a un bucket de S3 local de la región). - Las acciones de despliegue de CloudFormation en una región remota deben hacer referencia al almacén de artefactos de esa región y pueden especificar un rol de ejecución de la pila en la cuenta de destino para aplicar el privilegio mínimo.
Seguridad, artefactos y gobernanza:
- Mantén los buckets de artefactos privados; evita ACL públicas como
authenticated-read. Basa la seguridad en políticas de bucket limitadas a los roles del pipeline y de las acciones, con cifrado KMS. - Estandariza los buildspecs para enviar artefactos de forma predecible (p. ej., el paquete de la aplicación para EC2/CodeDeploy,
taskdef.jsonyappspecpara ECS, plantillas empaquetadas para Lambda). - Promueve la inmutabilidad con el pre-empaquetado de AMIs (pre-baking) para EC2, de modo que el agente de CodeDeploy y el tiempo de ejecución base sean consistentes; esto reduce la deriva de configuración (drift) y el tiempo de despliegue.
- Utiliza reglas de EventBridge para replicar eventos del pipeline en notificaciones, operaciones de chat (ChatOps) o sistemas de tickets, y para orquestar aprobaciones manuales (manual gates).
Escenario de un problema práctico
Spotify necesita lanzamientos más seguros para cientos de microservicios con una base de cómputo mixta (ECS en Fargate, servicios basados en EC2 y Lambda). Requieren despliegues canary y azul/verde con pruebas automatizadas antes de recibir tráfico de producción, gobernanza de artefactos y promoción multirregión, manteniendo la producción en una cuenta separada.
- Establecer repositorios y paquetes
- Usa CodeCommit para repositorios privados y automatización de PR/pruebas impulsada por EventBridge. CodeArtifact aloja dependencias de npm, Maven y PyPI con orígenes ascendentes (upstreams) y cifrado KMS para estandarizar los controles de la cadena de suministro. Por qué: Integración central con IAM/KMS y sin necesidad de webhooks externos para repositorios críticos; CodeArtifact proporciona paquetes curados y almacenados en caché.
- Compilar y probar
- Crea proyectos de CodeBuild por servicio con integración de VPC, caché local (capa de Docker y código fuente) y variables de entorno obtenidas de Secrets Manager/Parameter Store. Compila imágenes y súbelas a ECR; genera artefactos secundarios (
taskdef.json/appspec.yamlo plantillas de CloudFormation empaquetadas). Por qué: Compilaciones efímeras y aisladas, manejo seguro de secretos, ciclos más rápidos mediante el almacenamiento en caché y múltiples salidas que soportan tanto contenedores como empaquetado serverless.
- Orquestar pipelines
- Crea un CodePipeline centralizado en una cuenta de herramientas con fases: Fuente (Source), Compilación (Build), Pruebas Unitarias, Despliegue a Staging, Pruebas Automatizadas, Aprobación Manual, Despliegue a Producción. Los disparadores provienen de EventBridge ante actualizaciones en CodeCommit; una regla programada nocturna de EventBridge inicia las pruebas de integración. Por qué: Flujo de trabajo definido (opinionated) y auditable con puntos de control (gates) y ejecuciones impulsadas tanto por eventos como por programación.
- Despliegues azul/verde y canary
- Los servicios de ECS utilizan CodeDeploy azul/verde con dos grupos de destino y desvío de tráfico canary; la validación se ejecuta en
AfterAllowTestTraffica través de una Lambda que ejecuta pruebas de contrato y verificaciones sintéticas. Los servicios de EC2 utilizan CodeDeploy in-place conOneAtATimeo intercambios de ASG azul/verde cuando la capacidad lo permite. Las funciones Lambda se despliegan con CodeDeploy usandoCanary10Percent15Minutesy alarmas de CloudWatch sobre errores (Errors) y5xxde API Gateway. Por qué: Controles de tráfico de primera clase por cada entorno de ejecución y reversión automática (rollback) ante la activación de alarmas minimizan el impacto en el cliente.
- Promoción entre cuentas y entre regiones
- El pipeline asume roles por entorno en las cuentas de dev/test/prod. Para
us-east-1yeu-west-1, configura almacenes de artefactos regionales y claves KMS regionales; CodeBuild produce plantillas empaquetadas específicas de la región y sube los artefactos a buckets locales de la región. Las acciones de CloudFormation en cada cuenta/región utilizan roles de ejecución de pila; las acciones de CodeDeploy apuntan a aplicaciones/grupos de despliegue específicos del entorno. Por qué: Fuerte aislamiento de producción, privilegio mínimo mediante la asunción de roles y cifrado conforme a normativas con una baja sobrecarga operativa.
- Gobernanza y seguridad de artefactos
- Aplica el uso de buckets de artefactos S3 privados con políticas restrictivas y elimina cualquier ACL pública. Firma las imágenes de contenedor y las plantillas; almacena los SBOMs como artefactos de compilación. Utiliza claves de condición de IAM para limitar las acciones de producción a los pipelines de la cuenta de herramientas. Por qué: Previene la fuga de datos, mejora la procedencia y se alinea con las mejores prácticas de la cadena de suministro.
- Observabilidad y notificaciones
- Asocia alarmas de CloudWatch a todos los grupos de despliegue; las reglas de EventBridge reenvían los eventos de ejecución y aprobación de CodePipeline a un tema de SNS y a una Lambda que publica en Slack. Por qué: Retroalimentación más rápida, reversiones automatizadas y aprobaciones con intervención humana (human-in-the-loop) donde sea necesario.
Este diseño unifica entornos de ejecución heterogéneos bajo una única cadena de herramientas gestionada, proporciona estrategias de despliegue seguras con verificación automatizada, reduce el mantenimiento al eliminar la infraestructura de CI/CD autogestionada y escala globalmente con una clara separación de responsabilidades.
Todos los dominios · Infraestructura como Código y Gestión de la Configuración →
Practica estas preguntas → · Práctica cronometrada en ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Aprueba tu examen →