Интересно, есть ли способ обновить программное обеспечение внутри экземпляра. Я имею в виду, что у меня программное обеспечение работает в EC2, я развертываю программное обеспечение с шаблоном CF. В этом шаблоне есть параметр с версией программного обеспечения.
Я настроил cfn-hup с помощью:
'/etc/cfn/cfn-hup.conf':
content: !Sub |
[main]
stack=${AWS::StackId}
region=${AWS::Region}
verbose=true
interval=5
mode: '000400'
owner: root
group: root
'/etc/cfn/hooks.d/cfn-auto-reloader.conf':
content: !Sub |
[cfn-auto-reloader-hook]
triggers=post.update
path=Resources.AWSInstance.Metadata.AWS::CloudFormation::Init
action=/usr/local/bin/update_stack.sh
runas=root
mode: '000400'
owner: root
group: root
В скрипте update_stack есть параметр, значение которого заменяется тем, которое я могу установить в разделе параметров CF:
Parameter:
SoftwareVersion:
Description: Software version
Type: String
Сценарий такой:
#!/bin/bash
...
SOFTWARE_VERSION=${SoftwareVersion}
...
Также в файлы раздел внутри AWS :: CloudFormation :: Init:
При первом запуске шаблона это значение заменяется указанной версией v1. Когда я попытался обновить стек, используя тот же шаблон, но изменив версию для v2, я вижу, что значение изменилось в консоли CF, но файл остается неизменным в экземпляре. Консоль CF показывает параметр с новым значением, но это значение никогда не заканчивается в экземпляре.
И я вижу, как демон cfn-hup работает и проверяет наличие изменений на сервере метаданных, но так и не обнаружил их.
Итак, я сомневаюсь: процесс обновления предназначен только для управления ресурсами AWS, такими как типы ami или группы безопасности? или есть какой-то трюк, чтобы изменить параметры, доступные в сценариях, которые я пишу в файлы в пределах AWS :: CloudFormation :: Init:
Большое спасибо.
Я отвечаю себе!
Сценарий UserData запускается только при создании экземпляра и никогда больше. Я могу вносить изменения в сценарий, но не выполнять его снова, и я могу обнаруживать изменения в метаданных благодаря демону cfn-hup. Итак, я изменил версию программного обеспечения в скрипте UserData (/ var / lib / cloud / instance / scripts / part-001) и настроил cfn-hup следующим образом:
[cfn-auto-reloader-hook]
triggers=post.update
path=Resources.MyServer.Metadata.AWS::CloudFormation::Init
action=/usr/local/bin/update_stack.sh
runas=root
Этот сценарий в action
восстановит версию программного обеспечения из сценария UserData и запустит процесс обновления стека.
В скрипте UserData (в шаблоне CloudFormation) есть такая строка:
SOFTWARE_VERSION=${SoftwareVersion}
который заменяется пользователем из панели управления CloudFormation в процессе обновления.
Ура!