Я мало что знаю о Magento, но похоже, что есть несколько вещей, которые должны произойти:
<сильный>1. Перевод экземпляров в режим обслуживания
Внутри вашего appspec
вы, вероятно, используете хук жизненного цикла ApplicationStop
или другой хук, чтобы перевести отдельный экземпляр в режим обслуживания.
<сильный>2. Подождите, пока все экземпляры перейдут в режим обслуживания и очистят кеш
Предполагая, что вы перевели хосты в режим обслуживания в ApplicationStop
, вы можете использовать другой перехватчик жизненного цикла для ожидания перехода всех экземпляров в режим обслуживания. Например, у вас может быть сценарий в BeforeInstall
, который проверяет, все ли экземпляры прошли ApplicationStop
, и запускает очистку, если они это сделали (т.е. это последний).
Вот некоторый псевдокод:
# BeforeInstall or something other hook script
# 1. Get the instance details from CodeDeploy
instances = listDeploymentInstances().map(instanceId -> getDeploymentInstance(instanceId))
# 2. Check if all of the instances have completed ApplicationStop
for instance in instances {
applicationStopStatus = instance.instanceSummary.lifecycleEvents
.findFirst(event -> event.lifecycleEventName == "ApplicationStop")
.status
# If it's succeeded, we're good to go
if status == "Succeeded
purgeCache()
# If it's failed, you'll have to decide what should be done
else if status == "Failed"
# Abort the deployment or handle some other way
# If it's not completed, ignore it and let another instance kick off the purge
else
return
}
<сильный>3. Дождитесь завершения очистки и выйдите из режима обслуживания
Используя другой хук жизненного цикла, возможно, ApplicationStart
или ValidateService
, дождитесь завершения очистки и выйдите из режима обслуживания. Пока очистка занимает менее 1 часа, ваши инстансы не должны истечь время ожидания перехватчиков жизненного цикла.
Если бы вы хотели сделать это через CodeDeploy, я бы сделал что-то вроде вышеописанного. Конечно, вы можете управлять этим за пределами развертывания и иметь какой-то код, работающий на ваших экземплярах, который управляет всем этим.
person
EmptyArsenal
schedule
28.12.2018