Назад | Перейти на главную страницу

Обновите программное обеспечение в экземпляре EC2 с помощью процесса обновления CloudFormation

Интересно, есть ли способ обновить программное обеспечение внутри экземпляра. Я имею в виду, что у меня программное обеспечение работает в 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 в процессе обновления.

Ура!