Есть ли способ ускорить AWS CodeDeploy

15

Я использую AWS CodeDeploy для развертывания своих сайтов и заметил, что он не очень стабильный по скорости; иногда это довольно быстро, но в других случаях каждый шаг развертывания может занять несколько минут. Это довольно раздражает, когда развертывание должно выполняться быстро, в случае ошибок или сбоев.

Я не могу найти никакой документации о скорости CodeDeploy, а также я не могу найти никакой логики в том, когда он медленный или когда он быстрый. Есть ли способ ускорить его и есть ли способ узнать, что занимает так много времени?

Джаспер Кеннис
источник

Ответы:

10

CodeDeploy делает очень мало по умолчанию - он берет код с S3 или Github, затем запускает ваши скрипты в соответствии appspec.ymlс инструкциями файла.

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

Шаги в развертывании CodeDeploy:

  • ApplicationStop - вы управляете этим хуком
  • DownloadBundle - CodeDeploy захватывает код с S3 / Github
  • BeforeInstall - вы управляете этим хуком
  • Установить - CodeDeploy копирует код из временного местоположения в конечный пункт назначения
  • AfterInstall - вы управляете этим хуком
  • ApplicationStart - вы управляете этим хуком
  • ValidateService - вы управляете этим хуком

Выделенные жирным шрифтом - до CodeDeploy, остальные - за вами. Если вы видите различные задержки в выделении жирным шрифтом, обратитесь в службу поддержки AWS, но в противном случае есть вероятность, что вам нужно исследовать свои крючки.

ceejayoz
источник
Да, мои собственные сценарии простые и быстрые. Это шаг загрузки пакета, который часто занимает несколько минут, а мой проект не такой большой; так же часто это занимает всего несколько секунд. У меня нет плана поддержки для разработчиков, и я не собираюсь платить за него только за это, поэтому я просто позволю этому быть сейчас.
Джаспер Кеннис
Проверил еще раз, проблема должна быть в пропускной способности; мы используем небольшой тип экземпляра для нашего промежуточного сервера и один раз больше для производства, и всегда выполняется медленная подготовка.
Джаспер Кеннис
@JasperKennis Да, меньшие типы экземпляров могут быть довольно ограничены по пропускной способности, особенно если вы находитесь на хосте с шумными соседями. Это имело бы смысл.
ceejayoz
21

BlockTraffic и AllowTraffic

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

Перед

введите описание изображения здесь введите описание изображения здесь

После

введите описание изображения здесь введите описание изображения здесь

объяснение

Это работает , потому что BlockTrafficи AllowTrafficкак ожидание успешных проверок здоровья. Интервал проверки работоспособности по умолчанию - 1 проверка каждые 30 секунд, и для успешной проверки работоспособности требуется 5 последовательных 200 ответов. Таким образом, это занимает более 2 минут 30 секунд по умолчанию. И это для каждого экземпляра EC2. Уменьшение интервала проверки работоспособности и ограничение количества успешных проверок позволят сократить время развертывания.

Питер Тао
источник
После внесения этого изменения я получаю Script at specified location: ... failed to complete in 5 seconds. (устанавливается в appspec.yml-> hooks: -> BeforeInstall :) (скажите, пожалуйста, почему)
Евгений Афанасьев,
Установлен ли тайм-аут в конфиге BeforeInstall? docs.aws.amazon.com/codedeploy/latest/userguide/…
Питер Тао
Спасибо, теперь я вижу, что это не связано, а скорее совпадение.
Евгений Афанасьев
2

Другим параметром для проверки является «Задержка отмены регистрации» целевой группы. Мои настройки проверки здоровья были уже низкими, и это было узким местом в моем случае.

Аарон
источник