Фон :
У нас есть несколько унаследованных приложений, которые работают в экземплярах AWS EC2, пока мы разрабатываем новый набор приложений.Наша компания ежемесячно обновляет свои утвержденные AMI и требует, чтобы все запущенные экземпляры запускали новые AMI.Это заставляет нас регулярно разрушать экземпляры и перестраивать их с новыми AMI.Для соблюдения этих требований вся инфраструктура и развертывание приложений должны быть полностью автоматизированы.
Подход :
Для достижения автоматизации я использую Terraform для создания инфраструктурыи Ansible для развертывания приложений.Terraform создаст экземпляры EC2, группы безопасности, ключи SSH, балансировщики нагрузки, записи маршрута 53 и файл инвентаризации, который будет использоваться Ansible, включая IP-адреса созданных экземпляров.Затем Ansible развернет устаревшие приложения на хостах, указанных в файле Inventory.У меня есть сценарий оболочки для выполнения сначала сценария Terrafrom, а затем Ansible playbooks.
Вопрос :
Чтобы добиться полной автоматизации, мне нужно запускать этот процесс всякий раз, когда обновляется AMI.Текущая версия AMI хранится в хранилище параметров, и Terraform может определить, когда произошли изменения, но мне все равно нужно вручную запустить задание.У нас также есть тема AWS SNS, на которую я могу подписаться, чтобы получать уведомления о новых выпусках AMI.Первоначально я думал о том, чтобы просто поместить скрипты Terraform / Ansible в экземпляр EC2 и запускать задания Cron ежемесячно.Это, вероятно, сработает, но мне интересно, если это лучший подход.Для начала мне нужно было бы использовать экземпляр EC2, который сам должен был бы быть обновлен с новыми AMI, поэтому, если у меня нет другого процесса для этого, мне нужно будет сделать это вручную.Во-вторых, хотя наши AMI потенциально могут обновляться ежемесячно, иногда это не так.Поэтому я иногда выполняю работу без необходимости.Конечно, я мог бы просто каким-то образом определить, изменился ли идентификатор AMI и выполнить задание соответствующим образом, но, похоже, лучше было бы реагировать на тему AWS SNS.
Можно ли запускать сценарии Terrafrom / Ansible, не имея их на работающем экземпляре EC2?И как я могу запустить сценарии в ответ на тему SNS?