Amazon DOP-C02: Конвейеры CI/CD и стратегии развертывания — Руководство по подготовке
Часть AWS DevOps Engineer Professional DOP-C02 — Руководство по подготовке. Практикуйтесь с проверенными ответами в центре экзаменов Amazon, или пройдите тесты на время на ExamRoll.io.
Обзор
Надёжная система CI/CD на AWS связывает воедино контроль версий, сборку, тестирование, управление артефактами, оркестрацию развёртывания и стратегии безопасного выпуска в рамках нескольких аккаунтов и регионов. Ключевые управляемые сервисы — CodeCommit, CodeArtifact, CodeBuild, CodePipeline и CodeDeploy — устраняют необходимость в обслуживании серверов, тесно интегрируются с IAM и KMS и предоставляют первоклассную поддержку развёртываний по схемам blue/green, canary, rolling и in-place на EC2/Auto Scaling, ECS и Lambda. Эффективные пайплайны также зависят от точных триггеров (вебхуки, EventBridge, расписания), строгого управления артефактами, кэширования сборок для ускорения и управляемого переключения трафика с использованием алармов для автоматического отката. Для корпоративных сред меж-аккаунтные и меж-региональные паттерны являются обязательными, что требует использования ролей (role assumption), региональных хранилищ артефактов и согласованных политик шифрования.
Оркестрация с помощью AWS Developer Tools
Используйте CodeCommit как частный, высокодоступный Git-сервис. Он интегрируется с EventBridge для отслеживания событий репозитория и pull request, поддерживает шаблоны правил утверждения (approval rule templates) и использует IAM для гранулярного контроля доступа. Для сторонних Git-сервисов (GitHub/Bitbucket) настройте действия источника (source actions) в CodePipeline с вебхуками для триггеров, срабатывающих почти в реальном времени.
CodeArtifact централизует управление пакетами для множества экосистем (npm, Maven, PyPI, NuGet). Он поддерживает вышестоящие подключения (upstream connections) к публичным реестрам с кэшированием, шифрование с помощью KMS для каждого репозитория и токены аутентификации с ограниченной областью действия, которые истекают автоматически. Интегрируйте в CodeBuild, вызывая
undefined
на этапе pre_build, чтобы настроить менеджеры пакетов без встраивания долгоживущих секретов.
CodeBuild предоставляет эфемерные контейнеризированные сборки без необходимости управлять рабочими узлами (workers). Ключевые возможности:
- Изоляция окружения и поддержка VPC для доступа к приватным зависимостям. Включите привилегированный режим для сборок Docker и активируйте локальное кэширование слоёв Docker для ускорения сборки образов.
- Переменные окружения из трёх источников: открытый текст (plaintext), SSM Parameter Store и Secrets Manager (безопасно по умолчанию, без жёстко закодированных секретов). Вы также можете передавать переменные из CodePipeline.
- Кэширование для сокращения времени сборки:
- Локальное кэширование: кэш исходного кода, кэш слоёв Docker и пользовательские директории на хосте сборки.
- Кэширование в S3: переиспользуемые наборы зависимостей, общие для разных сборок.
- Управление артефактами: указывайте
primaryиsecondaryArtifactsдля публикации нескольких выходных данных (например, бандл приложения и шаблон CloudFormation). Шифруйте артефакты с помощью ключей KMS и избегайте публичных ACL. - Отчётность: отправляйте логи в CloudWatch Logs/S3. Используйте отчёты для результатов тестов и значки (badges) CodeBuild для обратной связи в PR.
CodePipeline — это оркестратор. Определите стадии (source, build, test, deploy, approval) с действиями, которые могут выполняться параллельно или последовательно. Лучшие практики:
- Триггеры:
- Вебхуки для источников GitHub/Bitbucket.
- Правила EventBridge для отслеживания изменений в ветках CodeCommit; проверяйте наличие правила, если пайплайн не запускается.
- Запуск пайплайнов по расписанию с помощью правил EventBridge, вызывающих
StartPipelineExecution.
- Хранилища артефактов: один бакет S3 на регион, используемый пайплайном; используйте управляемый клиентом ключ KMS. Для межрегиональных действий добавьте региональные хранилища артефактов.
- Ручные подтверждения (Manual approvals) с помощью SNS или EventBridge для интеграции с чатами/вебхуками для уведомлений в реальном времени.
- Гранулярный контроль доступа в IAM: сервисная роль пайплайна с минимальными привилегиями; для меж-аккаунтных операций используются роли, назначаемые для каждого действия (per-action roles).
CodeDeploy — это механизм развёртывания, поддерживающий цели EC2/on-prem, ECS и Lambda. Он управляет хуками жизненного цикла (lifecycle hooks), переключением трафика, проверками состояния и автоматическим откатом через алармы CloudWatch. Убедитесь, что на инстансах EC2 запущен агент CodeDeploy, есть профиль инстанса (instance profile) и обеспечена исходящая связь с эндпоинтами CodeDeploy (или выход через NAT). Пропущенные события и развёртывания, не выполняющие никаких действий (no-op), часто указывают на проблемы с агентом, разрешениями или связью.
Стратегии развёртывания и жизненный цикл CodeDeploy
Выбирайте стратегию в зависимости от рисков, требуемой ёмкости и платформы:
- Обновление на месте (In-place) (EC2/локальные серверы): Обновление приложения на существующих инстансах. Сочетается с конфигурациями развёртывания OneAtATime, HalfAtATime или AllAtOnce. Подключите ELB для отвода трафика (draining) и повторной регистрации инстансов.
- Поэтапное обновление (Rolling) (ECS): Замена задач пакетами в рамках одного сервиса. Нативное поэтапное обновление ECS или управляемое через CodeDeploy как сине-зелёное с контролируемым переключением.
- Сине-зелёное (Blue/green):
- EC2/Auto Scaling: Подготовка новой «зелёной» ASG, её проверка, а затем переключение трафика с «синей» на «зелёную». При этом «синее» окружение можно либо удалить, либо сохранить.
- ECS: Создание нового набора задач (task set) за второй целевой группой (target group); проверка, а затем переключение прослушивателей (listeners).
- Lambda: Переключение трафика псевдонима (alias) на новую версию функции с последующим мониторингом.
- Канареечное (Canary): Сначала переключается небольшой процент трафика (например, 10%), наблюдается в течение определённого окна времени, а затем развёртывание завершается.
- Линейное (Linear): Увеличение трафика равными долями (например, по 10% каждые 5 минут).
Файл appspec.yml в CodeDeploy определяет, что устанавливать и когда запускать скрипты:
- Для EC2/локальных серверов (YAML):
- files: куда размещать файлы.
- permissions: обновление прав владения/доступа к файлам без кастомных скриптов.
- hooks (общие): ApplicationStop, BeforeInstall, Install, AfterInstall, ApplicationStart, ValidateService.
- Хуки управления трафиком (при использовании балансировщика нагрузки): BeforeBlockTraffic, AfterBlockTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- Используйте предопределённые переменные окружения (например, DEPLOYMENT_GROUP_NAME, DEPLOYMENT_ID, LIFECYCLE_EVENT) для динамического изменения поведения без создания отдельных ревизий, например, для переключения уровней логирования Apache для разных групп развёртывания.
- Для ECS:
- resources: TargetService с указанием TaskDefinition и LoadBalancerInfo.
- hooks: BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- Хук AfterAllowTestTraffic идеально подходит для дымовых/интеграционных тестов на «зелёном» наборе задач с использованием тестового прослушивателя.
- Для Lambda:
- resources: определяют функцию, версию и псевдоним для переключения трафика.
- hooks: BeforeAllowTraffic и AfterAllowTraffic.
Переключение трафика и откат:
- Настройка конфигураций развёртывания:
- Lambda/ECS: Canary10Percent15Minutes, Canary10Percent5Minutes, Linear10PercentEvery1Minute, AllAtOnce или пользовательские.
- EC2 Blue/Green: Перенаправление трафика через прослушиватели/целевые группы балансировщика нагрузки по принципу «всё сразу» (all-at-once), канареечному или линейному.
- Добавьте в группу развёртывания оповещения CloudWatch для автоматического отката при ошибках, 5xx или по пользовательским метрикам. Для ECS оповещения могут отслеживать ошибки 5xx целевой группы или метрики сервиса; для Lambda — отслеживать метрики Errors/Throttles функции с детализацией по псевдониму/версии.
- Используйте хуки жизненного цикла (например, AfterAllowTestTraffic) для запуска проверок через Lambda или SSM; завершение с ненулевым кодом вызывает откат.
Сине-зелёное развёртывание и переключение трафика для EC2, ECS и Lambda
EC2/Auto Scaling:
- При сине-зелёном развёртывании CodeDeploy создаёт новую Auto Scaling группу для «зелёного» окружения, связывает её с отдельной целевой группой, а затем переключает прослушиватели ALB. Вы можете выбрать автоматическое удаление «синего» окружения или его сохранение для быстрого отката.
- Для обновлений на месте (in-place) на EC2 стратегия сочетается с ELB для корректного снятия с регистрации (deregister) и повторной регистрации инстансов, что защищает доступность. Конфигурация развёртывания определяет размеры пакетов и скорость обновления.
ECS:
- CodeDeploy интегрируется с сервисами ECS, используя две целевые группы за одним ALB. Создаётся новый набор задач («зелёный») с новым определением задачи (task definition).
- Тестовый трафик направляется на «зелёную» целевую группу через выделенный тестовый прослушиватель; основной трафик остаётся на «синей» группе до момента переключения.
- Канареечное или линейное переключение постепенно переводит трафик на «зелёную» группу под наблюдением оповещений CloudWatch. Используйте хук AfterAllowTestTraffic для выполнения проверок (например, Lambda-функция, вызывающая синтетические проверки) перед переводом основного трафика.
Lambda:
- CodeDeploy обновляет псевдоним функции, направляя его на новую версию с помощью взвешенной маршрутизации. Канареечный и линейный шаблоны постепенно перемещают процент трафика. Оповещения CloudWatch для псевдонима инициируют автоматический откат.
- С помощью AWS SAM или CDK установите AutoPublishAlias и DeploymentPreference в шаблонах, чтобы закодировать политику канареечного/линейного развёртывания и оповещения для каждой функции.
Взвешенная маршрутизация за пределами CodeDeploy:
- Для балансировки между несколькими регионами или стеками взвешенные записи (weighted records) Route 53 с проверками работоспособности (health checks) обеспечивают разделение трафика на региональном уровне (например, 1% на вторичный регион) и аварийное переключение (failover). Это дополняет, но не заменяет переключение трафика на уровне отдельных сервисов, выполняемое CodeDeploy.
Доставка в несколько аккаунтов и регионов
Корпоративные конвейеры обычно находятся в централизованном «инструментальном» аккаунте (tooling account) и выполняют развертывание в аккаунты dev/test/prod в нескольких регионах:
- Между аккаунтами (Cross-account):
- В действиях CodePipeline укажите RoleArn в целевом аккаунте, который доверяет субъекту (principal) роли конвейера. Используйте разрешения с минимальными привилегиями для каждого действия (CloudFormation, CodeDeploy, ECS, Lambda).
- Если CodeBuild должен получать доступ к ресурсам целевого аккаунта, сборка должна принимать роль (assume a role) через STS или использовать роль для каждого действия в аккаунте, а не широкие права AdministratorAccess.
- Для CodeDeploy на EC2 целевой аккаунт управляет приложением/группой развертывания и сервисной ролью; конвейер принимает роль для вызова CreateDeployment.
- Между регионами (Cross-Region):
- Добавьте хранилище артефактов для каждого региона в конфигурацию конвейера (бакет S3 с региональным ключом KMS). Обновите политики бакета, чтобы разрешить чтение/запись для роли конвейера и ролей отдельных действий.
- При необходимости создавайте артефакты для конкретного региона (например, упаковывая код Lambda с помощью
aws cloudformation packageс указанием локального для региона бакета S3). - Действия развертывания CloudFormation в удаленном регионе должны ссылаться на хранилище артефактов этого региона и могут указывать роль выполнения стека (stack execution role) в целевом аккаунте для обеспечения минимальных привилегий.
Безопасность, артефакты и управление:
- Держите бакеты с артефактами приватными; избегайте публичных ACL, таких как authenticated-read. Полагайтесь на политики бакетов, ограниченные ролями конвейера и действий, с шифрованием KMS.
- Стандартизируйте buildspec-файлы для предсказуемой отправки артефактов (например, пакет приложения для EC2/CodeDeploy, taskdef.json и appspec для ECS, упакованные шаблоны для Lambda).
- Продвигайте неизменяемость (immutability) с помощью предварительного создания AMI (pre-baking) для EC2, чтобы агент CodeDeploy и базовая среда выполнения были согласованными; это уменьшает дрейф конфигурации и время развертывания.
- Используйте правила EventBridge для дублирования событий конвейера в уведомления, системы ChatOps или тикетов, а также для организации этапов ручного подтверждения.
Практический сценарий
Spotify необходимо обеспечить более безопасные релизы для сотен микросервисов со смешанной вычислительной инфраструктурой (ECS на Fargate, сервисы на базе EC2 и Lambda). Им требуются канареечные (canary) и сине-зеленые (blue/green) развертывания с автоматическими тестами перед подачей производственного трафика, управление артефактами и продвижение в несколько регионов, при этом сохраняя прод-окружение в отдельном аккаунте.
- Создание репозиториев и пакетов
- Использовать CodeCommit для приватных репозиториев и автоматизации PR/тестов на основе EventBridge. CodeArtifact размещает зависимости npm, Maven и PyPI с апстримами (upstreams) и шифрованием KMS для стандартизации контроля цепочки поставок. Почему: Централизованная интеграция с IAM/KMS и отсутствие необходимости во внешних веб-хуках для критически важных репозиториев; CodeArtifact предоставляет кэшированные, курируемые пакеты.
- Сборка и тестирование
- Создать проекты CodeBuild для каждого сервиса с интеграцией в VPC, локальным кэшированием (слои Docker и исходный код) и переменными окружения, получаемыми из Secrets Manager/Parameter Store. Собирать образы и отправлять их в ECR; генерировать вторичные артефакты (taskdef.json/appspec.yaml или упакованные шаблоны CloudFormation). Почему: Эфемерные, изолированные сборки, надежная обработка секретов, ускоренные циклы за счет кэширования и поддержка нескольких выходных артефактов для контейнеров и бессерверной упаковки.
- Оркестрация конвейеров
- Создать централизованный CodePipeline в инструментальном аккаунте с этапами: Source, Build, Unit Tests, Deploy-to-Staging, Automated Tests, Manual Approval, Deploy-to-Prod. Триггеры поступают от EventBridge при обновлениях в CodeCommit; ночное правило EventBridge по расписанию запускает интеграционные тесты. Почему: Структурированный, аудируемый процесс с этапами подтверждения (gates) и запусками как по событиям, так и по расписанию.
- Сине-зеленые и канареечные развертывания
- Сервисы ECS используют сине-зеленое развертывание CodeDeploy с двумя целевыми группами (target groups) и канареечным переключением трафика; валидация запускается на этапе AfterAllowTestTraffic через Lambda-функцию, которая выполняет контрактные и синтетические тесты. Сервисы EC2 используют развертывание CodeDeploy на месте (in-place) с опцией OneAtATime или сине-зеленую замену ASG, если позволяет емкость. Lambda-функции развертываются с помощью CodeDeploy, используя стратегию Canary10Percent15Minutes и алармы CloudWatch по ошибкам (Errors) и 5xx от API Gateway. Почему: Первоклассные средства управления трафиком для каждой среды выполнения и автоматический откат при срабатывании алармов минимизируют влияние на клиентов.
- Продвижение между аккаунтами и регионами
- Конвейер принимает роли для каждого окружения в аккаунтах dev/test/prod. Для us-east-1 и eu-west-1 настроить региональные хранилища артефактов и региональные ключи KMS; CodeBuild создает специфичные для региона упакованные шаблоны и загружает артефакты в локальные для региона бакеты. Действия CloudFormation в каждом аккаунте/регионе используют роли выполнения стека (stack execution roles); действия CodeDeploy нацелены на приложения/группы развертывания для конкретного окружения. Почему: Строгая изоляция прода, принцип минимальных привилегий через принятие ролей и соответствующее требованиям шифрование с низкими операционными издержками.
- Управление артефактами и безопасность
- Обеспечить приватность бакетов S3 для артефактов с помощью ограничительных политик и удалить все публичные ACL. Подписывать образы контейнеров и шаблоны; хранить SBOM как артефакты сборки. Использовать ключи условий IAM (condition keys) для ограничения производственных действий только конвейерами из инструментального аккаунта. Почему: Предотвращает утечку данных, улучшает отслеживаемость происхождения (provenance) и соответствует лучшим практикам безопасности цепочки поставок.
- Наблюдаемость и уведомления
- Привязать алармы CloudWatch ко всем группам развертывания; правила EventBridge пересылают события выполнения и подтверждения CodePipeline в топик SNS и на Lambda-функцию, которая отправляет сообщения в Slack. Почему: Более быстрая обратная связь, автоматические откаты и подтверждения с участием человека там, где это необходимо.
Такая архитектура объединяет гетерогенные среды выполнения под единым управляемым набором инструментов, предоставляет безопасные стратегии выкатки с автоматической проверкой, снижает затраты на обслуживание за счет устранения самостоятельно размещенной инфраструктуры CI/CD и масштабируется глобально с четким разделением обязанностей.
Все домены · Инфраструктура как код и управление конфигурациями →
Отработать эти вопросы → · Тесты на время на 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.
Сдайте экзамен →Related guides
- Amazon DOP-C02: Systems Manager, установка исправлений и операционная автоматизация — Руководство по подготовке
- Amazon DOP-C02: Безопасность, соответствие требованиям и управление — Руководство по подготовке
- Amazon DOP-C02: Высокая доступность, отказоустойчивость и аварийное восстановление — Руководство по подготовке