cfn-init比userdata有什么好处?

Six*_*Bit 10 amazon-web-services aws-cloudformation aws-sdk

我的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"
        }
    }
},
Run Code Online (Sandbox Code Playgroud)

将它作为一堆命令放入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
Run Code Online (Sandbox Code Playgroud)

将此保留在Init over userdata中有什么好处?

Lam*_*bda 8

的主要优点AWS::CloudFormation::InitUserData是,前者是可更新的-如果你修改AWS::CloudFormation::Init部分,CloudFormation将更新您的EC2实例到位,而如果修改UserData的EC2资源的财产在你的模板,并更新你的筹码,CloudFormation将取代该EC2实例.

这很方便,例如,如果要更新EC2实例上安装的软件包而不重新创建它.


Mir*_*cea 7

最大的优点是,如果您还将用户数据用于其他目的,则不会污染用户数据。所以这存在于 CloudFormation 堆栈中,而不是存在于每个实例用户数据中。

cfn-init 基本上从 CloudFormation 中提取这些数据并运行命令。

根据这种复杂程度,您可能会考虑将其烘焙到 AMI 中,并仅在一个命令中调用它,而不是在一系列命令中调用它。

另一个区别是 cfn-init 必须嵌入到您用来启动机器的 AMI 中。现在几乎所有的 AMI 都是这种情况,因此并不是真正引起重大关注的原因。


gba*_*baz 5

将CFN-INIT视为用户数据的定制版本是100%错误的-CFN-INIT具有超越用户数据的强大功能。

用户数据基于过程,运行命令

一种

C

d

CFN-INIT是基于所需状态的。

像这样

这样使B。

CFN-INIT可以再次运行-例如,在堆栈更新期间,以更新配置,或专门将状态带入所需的“状态”-用户数据由于其程序背景无法实现-它不保证能够再次运行并移动实例进入某个状态。

您可以在CFN-INIT中运行命令-即它也可以是过程性的-但它也可以基于状态。即/tmp/something.txt具有此内容。或服务X已启动。“ Apache已安装”了解没有apache,最新的apache和apache的版本之间的区别-并采取相应的措施。