Amazon DVA-C02: Развертывание и CI/CD (CodePipeline, CodeBuild, CodeDeploy, Elastic Beanstalk, контейнеры) — Руководство по подготовке
Часть AWS Developer Associate DVA-C02 — Руководство по подготовке. Практикуйтесь с проверенными ответами в центре экзаменов Amazon, или пройдите тесты на время на ExamRoll.io.
Основы CI/CD с CodePipeline и CodeBuild: шаблоны, API и распространенные ошибки
Проектируйте конвейеры с четкими этапами: источник (source), сборка (build), тестирование (test), утверждение (approval), развертывание (deploy) и проверка после развертывания (post-deploy verification). CodePipeline координирует эти этапы; используйте роль конвейера, предоставляющую минимальные, ограниченные по области действия разрешения, и настраивайте роли для действий (action roles) для интеграции со сторонними сервисами. Запускайте конвейеры с помощью веб-хуков CodeCommit или вызова StartPipelineExecution (AWS SDK: codepipeline.startPipelineExecution) для программного запуска. Для сборок предпочитайте проекты CodeBuild с файлом buildspec.yml, определяющим фазы (install, pre_build, build, post_build); вызывайте сборки напрямую с помощью StartBuild или StartBuildBatch, когда вам нужны разовые или пакетные сборки. Для сборки образов используйте команду aws ecr get-login-password, перенаправленную в docker login на фазе pre_build, затем выполните docker build/push в ECR и получите дайджест образа для создания неизменяемых ссылок на артефакты. Избегайте использования плавающих тегов, таких как “latest”; вместо этого создавайте определения задач или файлы манифеста, которые ссылаются на дайджесты образов, чтобы развертывания были детерминированными. Остерегайтесь распространенных ошибок: истекшие токены аутентификации ECR в долго выполняющихся скриптах, недостаточные IAM-политики CodeBuild для отправки образов в ECR или вызова AWS API, а также жесткое кодирование ARN. Настраивайте сборки так, чтобы они загружали артефакты в S3 или в хранилище артефактов конвейера, и используйте переменные окружения и Parameter Store/Secrets Manager для конфиденциальных значений, необходимых только во время выполнения, вместо того чтобы «запекать» секреты в артефакты сборки.
Стратегии развертывания: CodeDeploy, псевдонимы Lambda и варианты конфигурации Elastic Beanstalk
Выбирайте модель развертывания, соответствующую вашему уровню допустимого риска и потребностям в откате. Для Lambda используйте версии и псевдонимы (aliases); опубликуйте версию (lambda.publishVersion) и обновите псевдонимы с правилами переключения трафика через CodeDeploy, создав развертывание (codedeploy.createDeployment), которое ссылается на приложение Lambda и группу развертывания. Используйте встроенные конфигурации CodeDeploy, такие как CodeDeployDefault.LambdaCanary10Percent5Minutes, или пользовательскую маршрутизацию трафика для точного канареечного или линейного переключения. Для приложений на EC2 и on-premise CodeDeploy поддерживает сине-зеленое развертывание (blue/green) с хуками жизненного цикла (lifecycle hooks) для проверок перед подачей трафика и автоматического отката при сбоях проверок состояния. Elastic Beanstalk предоставляет несколько политик: All at Once (быстро, рискованно), Rolling (поочередное), Rolling with Additional Batch (поочередное с дополнительной партией, более безопасно) и Immutable (неизменяемое, самое безопасное). Их можно изменить с помощью команды eb deploy или API-вызова update-environment, указав DeploymentPolicy и OptionSettings. Распространенные ошибки разработчиков включают отсутствие настройки проверок состояния приложения (состояние целевой группы ALB, отчеты о состоянии EB), что препятствует автоматическому переключению трафика, и недостаточные IAM-разрешения для CodeDeploy, чтобы вызывать Lambda или обновлять ECS. Для релизов, связанных с базой данных, рассмотрите возможность внесения обратно совместимых изменений в схему и использования флагов функций (feature toggles) перед развертыванием, чтобы избежать связывания кода и схемы в одной транзакции.
Конвейеры для контейнеров, ECR, ECS/Fargate и EKS: сборка, развертывание и неизменяемые ссылки
Надежный конвейер для контейнеров собирает образы в CodeBuild, отправляет их в ECR и запускает развертывание в ECS, Fargate или EKS. В CodeBuild выполните aws ecr get-login-password | docker login –username AWS –password-stdin ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com, затем docker build -t repo:tag ., docker push и получите дайджест образа с помощью docker inspect –format=’{{index .RepoDigests 0}}’ image. Для ECS/Fargate зарегистрируйте новое определение задачи (ecs.registerTaskDefinition) с дайджестом образа в containerDefinitions, затем обновите сервис (ecs.updateService), чтобы использовать новое определение задачи, или установите forceNewDeployment для принудительной замены; используйте CodeDeploy для сине-зеленых развертываний ECS с переключением трафика на уровне ALB. Для EKS обновите манифесты Kubernetes, чтобы они ссылались на дайджесты образов, и примените изменения с помощью kubectl set image или используйте декларативные инструменты GitOps; CodeBuild может выполнять команды aws eks update-kubeconfig и kubectl. Типичные ошибки: использование изменяемых тегов, что приводит к развертыванию устаревших версий; отсутствие обновления определений задач, что мешает ECS развернуть новые образы; недостаточные лимиты CPU/памяти или ENI для задач Fargate; и отсутствие у CodeBuild разрешения ecr:BatchGetImage для чтения отправленных образов.
Проверка перед развертыванием, откаты и наблюдаемость: тесты, хуки и операционные средства защиты
Интегрируйте автоматизированные модульные, интеграционные и дымовые тесты в этапы конвейера. Используйте CodeBuild для запуска тестов, а AWS X-Ray или CloudWatch Logs — для трассировки и структурированных логов; аннотируйте трассировки X-Ray с помощью PutAnnotation в SDK, чтобы последующие запросы могли фильтровать данные по атрибутам пользователя или запроса. Для проверки перед развертыванием используйте действия ручного утверждения в CodePipeline или автоматизированные шаги валидации: запускайте канареечные проверки (Canary checks) через CodeBuild, которые обращаются к развернутой конечной точке, или вызывайте канареечные тесты CloudWatch Synthetics для выполнения сценарных проверок. Используйте хуки жизненного цикла CodeDeploy (BeforeAllowTraffic, AfterAllowTraffic) для выполнения проверок работоспособности и логики регистрации/отмены регистрации. Реализуйте триггеры автоматического отката: настройте CodeDeploy на откат при ненулевом статусе развертывания или сработавших сигналах тревоги (сигналы CloudWatch, привязанные к группе развертывания), а для Lambda используйте псевдонимы с переключением трафика, чтобы обеспечить быстрый откат путем обновления псевдонима, чтобы он указывал на предыдущую версию. Типичные ошибки разработчиков включают несоответствие тайм-аутов (тайм-аут Lambda короче тайм-аута видимости SQS), неправильную настройку хуков AppSpec для ECS/CodeDeploy и уверенность в успешном выполнении вызовов API развертывания без проверки поведения в рантайме. Инструментируйте развертывания метриками и оповещениями, а также используйте неизменяемые идентификаторы в артефактах для отслеживаемости.
Практическая задача: сценарий использования
Сценарий: Компания ExampleRetail управляет витриной на основе микросервисов в AWS в учетных записях для разработки, тестирования и продакшена. Они используют CodeCommit для исходного кода, CodePipeline/CodeBuild для CI, ECR для образов, ECS/Fargate для сервисов за ALB и Lambda для асинхронных обработчиков.
Задача: Разработчику необходимо добавить безопасный автоматизированный конвейер для развертывания нового контейнера сервиса оформления заказа с канареечным переключением трафика и автоматической проверкой перед развертыванием, которая будет выполнять откат в случае сбоя.
Рекомендуемый подход:
- Создайте проект CodeBuild, который собирает Docker-образ, запускает модульные тесты, входит в ECR (aws ecr get-login-password | docker login –username AWS –password-stdin ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com), отправляет образ и создает JSON-артефакт, содержащий дайджест образа.
- В CodePipeline добавьте этап развертывания, который регистрирует новое определение задачи ECS через ecs.registerTaskDefinition, ссылаясь на дайджест образа, а затем создает развертывание CodeDeploy для ECS, вызывая codedeploy.createDeployment с AppSpec, который связывает новое определение задачи и deploymentConfig, настроенный для канареечного развертывания (например, CodeDeployDefault.ECSCanary10Percent5Minutes).
- Добавьте действие валидации на основе CodeBuild или канареечный тест CloudWatch Synthetics в качестве теста после развертывания, который вызывает критически важные конечные точки оформления заказа и проверяет ответы; конвейер должен ожидать успешного завершения этой проверки.
- Настройте параметры отката CodeDeploy и сигнал тревоги CloudWatch, привязанный к группе развертывания (например, по частоте ошибок 5xx или задержке), чтобы автоматически прерывать и откатывать развертывание при превышении пороговых значений.
Обоснование: Сборка неизменяемых образов, регистрация определений задач с явными дайджестами образов и использование переключения трафика CodeDeploy вместе с автоматической проверкой обеспечивают безопасные канареечные релизы и быстрый автоматический откат, гарантируя при этом воспроизводимость и наблюдаемость развертываний.
← CloudFormation и инфраструктура как код (SAM · Все домены · Безопасность →
Отработать эти вопросы → · Тесты на время на 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.
Сдайте экзамен →