繁体   English   中英

cfn-init比userdata有什么好处?

[英]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::InitUserData是,前者是可更新的-如果修改了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM