[英]What are the benefits of cfn-init over userdata?
我的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"
}
}
},
将它作为一堆命令放入userdata部分不是更好吗?
/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 over userdata中有什么好处?
的主要好处AWS::CloudFormation::Init
过UserData
是,前者是可更新的-如果修改了AWS::CloudFormation::Init
部分,CloudFormation将在地方更新您的EC2实例,而如果修改UserData
属性在模板中更新EC2资源并更新堆栈,CloudFormation将替换该EC2实例。
这很方便,例如,如果要更新EC2实例上安装的软件包而不重新创建它。
将CFN-INIT视为用户数据的定制版本的想法是100%错误 - CFN-INIT具有超出用户数据的功率。
userdata是基于程序的,运行命令
一个
乙
C
d
CFN-INIT是基于期望的状态。
做这样的
让B像这样。
CFN-INIT可以再次运行 - 例如在堆栈更新期间,更新配置,或者特别是将状态置于期望的“状态” - 用户数据,因为其程序背景不能 - 不能保证能够第二次运行并移动某个州的实例。
您可以在CFN-INIT中运行命令 - 即它也可以是程序性的 - 但它也可以是基于状态的...即/tmp/something.txt具有此内容。 或者服务X已启动。 'Apache Installed'知道没有apache,最近的apache,apache的版本之间的差异 - 并且它相应地起作用。
最大的好处是,如果您还将其用于其他目的,则不会污染用户数据。 因此,它存在于CloudFormation Stack中,并存在于每个Instance用户数据中。
cfn-init基本上从CloudFormation中提取这些数据并运行命令。
根据这种复杂程度,您可以考虑将其烘焙到AMI中,只需在一个命令和一系列命令中调用它。
另一个区别是cfn-init必须烘焙到您用于启动机器的AMI中。 对于现在几乎任何AMI来说都是如此,所以并不是真正令人担忧的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.