Amazon CodeDeploy с AllAtOnce не выполняется в новом стеке CloudFormation с 1 инстансом EC2

Мой стек CloudFormation создает ScalingGroup, для которой MinSize и MaxSize установлены на 1. Он также создает DeploymentGroup, нацеленную на эту ScalingGroup.

  • Когда группа развертывания настроена с именем конфигурации CodeDeployDefault.OneAtATime, развертывание запускается успешно.
  • Когда группа развертывания настроена с именем конфигурации CodeDeployDefault.AllAtOnce, то при создании стека развертывание кода ничего не делает, и вы не можете видеть какие-либо события или трассировки журнала в EC2. Код ошибки HEALTH_CONSTRAINTS упоминается только один раз. Если я завершу экземпляр, группа масштабирования запустит новый экземпляр, но CodeDeploy больше ничего не сделает. Если я вручную запускаю развертывание с CodeDeployDefault.OneAtATime, оно работает.

Из того, что я прочитал в документации, этого не должно происходить.

  • Не должно быть никаких проверок работоспособности, поскольку в группе развертывания нет экземпляров.
  • CodeDeployDefault.AllAtOnce имеет минимальный процент работоспособности, равный 0. Таким образом, возможно, причина возникновения ошибки в том, что она равна 0, и было решено не продолжать с кодом ошибки работоспособности.
  • CodeDeployDefault.AllAtOnce упоминает, и я так понимаю, что он не собирается проводить проверку работоспособности, потому что концептуально в этом нет смысла, так как все экземпляры будут настроены одновременно.

Мои ожидания или правильные, или я делаю что-то не так?


person Alex Sarafian    schedule 01.09.2017    source источник
comment
После пары итераций я заметил, что эта ошибка возникает не всегда. Из 6 раз с одним и тем же шаблоном CloudFormation 3 раза выдавал ошибку с кодом HEALTH_CONSTRAINTS.   -  person Alex Sarafian    schedule 04.09.2017


Ответы (1)


Код ошибки HEALTH_CONSTRAINTS означает, что развертывание CodeDeploy завершилось неудачно, а настроенное соотношение исправных хостов не соответствует требованиям. Возможно, вы захотите перейти в консоль AWS CodeDeploy и щелкнуть развертывание, созданное во время запущенного процесса CloudFormation, и проверить, почему развертывание не удалось. Различия между CodeDeployDefault.OneAtATime и CodeDeployDefault.AllAtOnce можно найти здесь: http://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html

CodeDeployDefault.AllAtOnce Пытается одновременно развернуть версию приложения на как можно большем количестве экземпляров. Состояние общего развертывания будет отображаться как Успешное, если версия приложения развернута на одном или нескольких экземплярах. Статус общего развертывания будет отображаться как Failed, если версия приложения не развернута ни на одном из экземпляров. Используя пример девяти экземпляров, CodeDeployDefault.AllAtOnce попытается развернуться во всех девяти экземплярах одновременно. Общее развертывание будет успешным, если развертывание хотя бы на одном экземпляре будет успешным; это произойдет только в том случае, если произойдет сбой развертывания во всех девяти экземплярах.

CodeDeployDefault.OneAtATime Развертывает версию приложения только в одном экземпляре за раз. Для групп развертывания, содержащих более одного экземпляра: общее развертывание завершается успешно, если версия приложения развертывается на всех экземплярах. Исключением из этого правила является то, что в случае сбоя развертывания на последнем экземпляре все развертывание в целом выполняется успешно. Это связано с тем, что AWS CodeDeploy позволяет одновременно переводить в автономный режим только один экземпляр с конфигурацией CodeDeployDefault.OneAtATime. Общее развертывание завершается сбоем, как только не удается развернуть версию приложения на каком-либо экземпляре, кроме последнего. В примере с девятью экземплярами он будет развертываться на одном экземпляре за раз. Общее развертывание завершается успешно, если успешно выполняется развертывание на первых восьми экземплярах; общее развертывание завершится ошибкой, если произойдет сбой развертывания в любом из первых восьми экземпляров. Для групп развертывания, содержащих только один экземпляр, общее развертывание будет успешным только в том случае, если развертывание в одном экземпляре выполнено успешно.

Так как ваша группа развертывания содержит только один единственный экземпляр, если вы установите CodeDeployDefault.OneAtATime и развертывание одного экземпляра завершится неудачно, развертывание все равно будет помечено как выполненное. Пожалуйста, проверьте подробности развертывания в консоли AWS CodeDeploy.

person binbinlu    schedule 14.09.2017
comment
Я также прочитал документацию. Насколько я понимаю, OneAtATime и AllAtOnce контролируют минимальное количество работоспособных экземпляров, если развертывание должно начаться. Там это карикатурно перед выполнением агента на каждом ec2. В случае нового стека cfn 0 здоровых страховок, но этот случай исключен, как указано в документации. Я заметил, что группа сканирования с 1 страховкой и конфигурацией AllAtOnce постоянно дает сбой при создании стека без каких-либо других объяснений. Это противоречит документации, плюс его непредсказуемый характер указывает на проблему. - person Alex Sarafian; 14.09.2017
comment
Я прочитал это снова, и мне нужно обновить свой комментарий. В статье, на которую вы предоставили ссылку, действительно описывается результат развертывания. Но когда я искал ответ, почему он никогда не запускается и сразу останавливается с ошибкой, я прочитал это. В этой ссылке описывается, что минимальные работоспособные экземпляры, полученные по имени конфигурации, решают, на каких системах следует начать выполнение. - person Alex Sarafian; 15.09.2017