0Pricing
AWS Solutions Architect · Урок

Обновление экземпляров и перехватчики жизненного цикла

Постепенно разверните новый шаблон запуска с помощью обновления экземпляров и используйте перехватчики жизненного цикла для выполнения пользовательской логики до запуска или завершения экземпляров.

«Обновление экземпляров и перехватчики жизненного цикла» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Проблема последовательного обновления экземпляров

При обновлении шаблона запуска (новый AMI, новые пользовательские данные, новый тип экземпляра) уже работающие экземпляры в ASG не заменяются автоматически — они продолжают работать со старой конфигурацией. Чтобы распространить изменения, необходимо заменить экземпляры. Ручное завершение работы и повторный запуск экземпляров сопряжены с риском и приводят к ошибкам. Обновление экземпляров автоматизирует этот процесс с помощью настраиваемых средств безопасности.

Обновление экземпляров: принцип работы

Обновление экземпляров заменяет экземпляры ASG последовательными группами. На каждом шаге оно завершает работу группы старых экземпляров, ожидает, пока новые экземпляры пройдут проверки работоспособности, а затем переходит к следующей группе. Скорость управляется параметром MinHealthyPercentage (минимальный процент ёмкости, который должен оставаться работоспособным во время обновления) и необязательным временем InstanceWarmup.

aws autoscaling start-instance-refresh \
  --auto-scaling-group-name 'MyAppASG' \
  --preferences '{
    "MinHealthyPercentage": 80,
    "InstanceWarmup": 300,
    "CheckpointPercentages": [20, 50, 100],
    "CheckpointDelay": 600
  }'

MinHealthyPercentage и размер группы

MinHealthyPercentage определяет нижнюю границу работоспособной ёмкости во время обновления. Если установить значение 90 %, за один раз будет заменено только 10 % парка — это медленнее, но безопаснее. Значение 50 % заменяет за один раз половину парка — это быстрее, но обеспечивает меньший запас избыточности. ASG автоматически вычисляет размеры групп на основе этого процента и текущей желаемой ёмкости. Для рабочих нагрузок в производственной среде выбирайте более высокий процент, чтобы сохранять доступность.

Контрольные точки для развёртывания в стиле канареечного

Контрольные точки позволяют приостанавливать обновление экземпляров на заранее заданных процентных этапах. Например, можно обновить 20 % экземпляров, приостановить процесс на 10 минут для запуска быстрых проверок, а затем продолжить. Если на любой контрольной точке обнаружится проблема, обновление можно отменить: ASG прекратит замену дополнительных экземпляров, но оставит работать уже заменённые экземпляры (они уже используют новый шаблон). По сути, это модель канареечного развёртывания для EC2.

Отмена и мониторинг обновления экземпляров

Вы можете отменить выполняющееся обновление экземпляров в любой момент; дальнейшая замена прекратится, но завершённые замены не будут отменены. Используйте describe-instance-refreshes, чтобы проверить состояние, процент выполнения и экземпляры, запуск которых завершился ошибкой. Интегрируйте обновление экземпляров с конвейером CI/CD, чтобы автоматически запускать обновление после добавления нового AMI в шаблон запуска и реализовать полностью автоматизированное развёртывание в стиле blue/green.

aws autoscaling describe-instance-refreshes \
  --auto-scaling-group-name 'MyAppASG'

# Cancel a running refresh
aws autoscaling cancel-instance-refresh \
  --auto-scaling-group-name 'MyAppASG'

Введение в перехватчики жизненного цикла

Перехватчики жизненного цикла приостанавливают переходы экземпляров ASG в ключевые моменты, чтобы можно было выполнить пользовательскую логику до активации экземпляра или до его завершения. Есть две точки перехвата: EC2_INSTANCE_LAUNCHING (после запуска, до перевода экземпляра в InService) и EC2_INSTANCE_TERMINATING (после принятия решения о завершении, до фактического завершения работы экземпляра). Во время перехвата экземпляр находится в состоянии Pending:Wait или Terminating:Wait.

Варианты использования перехватчиков запуска

Перехватчик запуска идеально подходит для задач, которые должны завершиться до начала обслуживания трафика экземпляром: установки дополнительного программного обеспечения, получения конфигурации из Parameter Store, регистрации в реестре обнаружения сервисов или запуска интеграционных тестов. ASG не добавит экземпляр в целевую группу балансировщика нагрузки, пока перехватчик не завершится (или не истечёт время ожидания). Это предотвращает передачу трафика на не полностью настроенный экземпляр.

aws autoscaling put-lifecycle-hook \
  --auto-scaling-group-name 'MyAppASG' \
  --lifecycle-hook-name 'AppInit' \
  --lifecycle-transition EC2_INSTANCE_LAUNCHING \
  --default-result ABANDON \
  --heartbeat-timeout 300

Варианты использования перехватчиков завершения

Перехватчик завершения выполняется до фактического завершения работы экземпляра. Возможные варианты использования: завершение обработки текущих запросов из очереди на уровне приложения, сброс кэшированных данных в постоянное хранилище, удаление регистрации из реестра сервисов или копирование файлов журналов в S3. Без перехватчика завершения незавершённая работа на завершающем работу экземпляре может быть потеряна. Перехватчик предоставляет до 2 часов (тайм-аут сигнала активности) для выполнения задач корректного завершения работы.

aws autoscaling put-lifecycle-hook \
  --auto-scaling-group-name 'MyAppASG' \
  --lifecycle-hook-name 'GracefulShutdown' \
  --lifecycle-transition EC2_INSTANCE_TERMINATING \
  --default-result CONTINUE \
  --heartbeat-timeout 120

Завершение работы перехватчика жизненного цикла

Пользовательская логика, выполняемая на экземпляре или запускаемая им, должна сообщить перехватчику о завершении работы. Используйте complete-lifecycle-action с одним из значений: CONTINUE (продолжить обычную работу) или ABANDON (для перехватчика запуска — завершить работу экземпляра; для перехватчика завершения — проигнорировать результат и продолжить). Также можно продлить время ожидания перехватчика, отправляя сигнал активности с заданным интервалом до достижения максимальной длительности. Если время ожидания истечёт, будет применён результат DefaultResult.

# From inside the instance or a Lambda triggered by EventBridge
aws autoscaling complete-lifecycle-action \
  --auto-scaling-group-name 'MyAppASG' \
  --lifecycle-hook-name 'AppInit' \
  --lifecycle-action-result CONTINUE \
  --instance-id 'i-0abc123def456'

Запуск логики с помощью EventBridge

Самый удобный способ реагировать на перехватчики жизненного цикла — использовать Amazon EventBridge. При срабатывании перехватчика ASG отправляет событие в EventBridge. Правило EventBridge направляет это событие в функцию Lambda, которая выполняет необходимые действия, а затем вызывает complete-lifecycle-action. Эта архитектура полностью бессерверная, не требует периодических запросов и масштабируется автоматически. Уведомления SQS и SNS — более старые альтернативы, но для новых решений рекомендуется EventBridge.

Обновление экземпляров интегрируется с перехватчиками жизненного цикла

При замене экземпляра во время обновления экземпляров срабатывают оба перехватчика жизненного цикла: перехватчик завершения для старого экземпляра и перехватчик запуска для нового. Это означает, что логика корректного завершения работы и инициализации автоматически выполняется во время последовательного обновления, а не только при обычных событиях масштабирования. Перед развёртыванием в производственной среде всегда проверяйте логику перехватчиков жизненного цикла во время поэтапного обновления экземпляров, чтобы убедиться в корректности поведения.

Быстрая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что обновление экземпляров заменяет экземпляры ASG последовательными группами, управляемыми с помощью MinHealthyPercentage и необязательных контрольных точек для проверки в стиле канареечного развёртывания; перехватчики жизненного цикла приостанавливают переходы экземпляров при запуске или завершении, чтобы выполнить пользовательскую инициализацию или корректное завершение работы; а связка EventBridge + Lambda — рекомендуемый способ реагировать на события перехватчиков жизненного цикла без периодических запросов. Далее мы рассмотрим функции AWS Lambda, среды выполнения, триггеры и обработчики.

Часто задаваемые вопросы

Урок «Обновление экземпляров и перехватчики жизненного цикла» бесплатный?

Да — полный текст урока «Обновление экземпляров и перехватчики жизненного цикла» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Обновление экземпляров и перехватчики жизненного цикла»?

Постепенно разверните новый шаблон запуска с помощью обновления экземпляров и используйте перехватчики жизненного цикла для выполнения пользовательской логики до запуска или завершения экземпляров. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Обновление экземпляров и перехватчики жизненного цикла»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Шаблоны запуска и настройка ASG
  2. Политики масштабирования: отслеживание цели и пошаговое масштабирование
  3. Запланированное и прогнозируемое масштабирование
  4. Обновление экземпляров и перехватчики жизненного цикла
← Назад к AWS Solutions Architect