Каковы преимущества cfn-init по сравнению с пользовательскими данными?

Мой шаблон CloudFormation стал довольно длинным. Одна из причин в том, что мой раздел AWS::CloudFormation::Init стал довольно большим. Это очень маленький пример того, что у меня есть:

"ConfigDisk": {
    "commands": {
        "01formatFS": {
            "command": "/sbin/mkfs.ext4 /dev/xvdf"
        },
        "02mountFS": {
            "command": "/bin/mount /dev/xvdf /var/lib/jenkins"
        },
        "03changePerms": {
            "command": "/bin/chown jenkins:jenkins /var/lib/jenkins"
        },
        "04updateFStab": {
            "command": "/bin/echo /dev/xvdf /var/lib/jenkins ext4 defaults 1 1 >> /etc/fstab"
        }
    }
},

Не лучше ли было бы просто поместить это в раздел пользовательских данных в виде набора команд?

/sbin/mkfs.ext4 /dev/xvdf
/bin/mount /dev/xvdf /var/lib/jenkins
/bin/chown jenkins:jenkins /var/lib/jenkins
/bin/echo /dev/xvdf /var/lib/jenkins ext4 defaults 1 1 >> /etc/fstab

Каковы преимущества того, чтобы оставить это в Init по сравнению с пользовательскими данными?


person Sixty4Bit    schedule 29.01.2016    source источник


Ответы (3)


Основное преимущество AWS::CloudFormation::Init по сравнению с UserData заключается в том, что первый можно обновить: если вы измените раздел AWS::CloudFormation::Init, CloudFormation обновит ваш экземпляр EC2 на месте, а если вы измените UserData ресурса EC2 в шаблоне и обновить стек, CloudFormation заменит этот экземпляр EC2.

Это удобно, например, если вы хотите обновить пакеты, установленные на вашем экземпляре EC2, без его повторного создания.

person βξhrαng    schedule 21.07.2018
comment
Этот документ дает больше контекста. aws.amazon.com /блоги/devops/ - person Nick Graham; 10.03.2019

Думать о CFN-INIT как о специальной версии пользовательских данных на 100 % неправильно — CFN-INIT имеет гораздо больше возможностей, чем пользовательские данные.

пользовательские данные основаны на процедуре, команда «Выполнить»

A

B

C

D

CFN-INIT основан на желаемом состоянии.

Сделай А вот так

Сделай Б таким.

CFN-INIT можно запустить снова — например, во время обновления стека, для обновления конфигурации или, в частности, для приведения состояния в желаемое «состояние» — пользовательские данные из-за его процедурного фона не могут быть запущены во второй раз и перемещены экземпляр в определенное состояние.

Вы можете запускать команды в CFN-INIT - т.е. это также может быть процедурно - но также может быть основано на состоянии.. т.е. /tmp/something.txt имеет ЭТО содержимое. Или служба X запущена. «Установлен Apache», который знает разницу между отсутствием apache, самым последним apache, версией apache — и действует соответственно.

person gbaz    schedule 18.06.2018

Самым большим преимуществом является то, что вы не загрязняете пользовательские данные, если вы также используете их для какой-либо другой цели. Так что это живет в стеке CloudFormation, а не в каждом из пользовательских данных экземпляра.

cfn-init в основном извлекает эти данные из CloudFormation и просто запускает команду.

В зависимости от того, насколько это сложно, вы можете подумать о том, чтобы включить это в AMI и просто вызвать его в одной команде, а не в серии команд.

Еще одно отличие состоит в том, что cfn-init должен быть встроен в AMI, который вы используете для запуска машины. В настоящее время это характерно практически для любого AMI, поэтому не вызывает серьезного беспокойства.

person Mircea    schedule 29.01.2016