cfn-init比userdata有什么好处?

时间:2016-01-29 23:28:28

标签: amazon-web-services aws-sdk amazon-cloudformation

我的CloudFormation模板已经很长了。一个原因是因为我的df['A'] == cond1部分变得非常庞大。这是我所拥有的一小部分样本:

=index(df!A:Z, match(cond1, df!A:A,0)),col)

将它作为一堆命令放入userdata部分会不会更好?

AWS::CloudFormation::Init

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

3 个答案:

答案 0 :(得分:6)

AWS::CloudFormation::InitUserData的主要优势在于前者是可更新的-如果您修改AWS::CloudFormation::Init部分,CloudFormation将在其中更新您的EC2实例 放置 ,而如果您在模板中修改EC2资源的UserData属性并更新堆栈,CloudFormation将 替换 该EC2实例。

例如,这很方便,如果您想更新在EC2实例上安装的软件包而无需重新创建它。

答案 1 :(得分:3)

将CFN-INIT视为用户数据的定制版本是100%错误 - CFN-INIT的功能超出了用户数据。

userdata是基于程序的,运行命令

A

C

d

CFN-INIT是理想的基于状态。

像这样做

让B像这样。

CFN-INIT可以再次运行 - 例如在堆栈更新期间,更新配置,或者特别是将状态置于所需的“状态” - 用户数据因为其程序背景不能 - 不能保证能够运行第二个时间并将实例移动到某个状态。

您可以在CFN-INIT中运行命令 - 即它也可以是程序性的 - 但它也可以是基于状态的......即/tmp/something.txt具有此内容。或者服务X已启动。 'Apache Installed',它知道没有apache,最新的apache,apache版本之间的差异 - 并且它会相应地发挥作用。

答案 2 :(得分:2)

最大的好处是,如果您还将其用于其他用途,则不会污染用户数据。因此,它存在于CloudFormation Stack中,并存在于每个Instance用户数据中。

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

根据这种复杂程度,您可以考虑将其烘焙到AMI中,只需在一个命令中调用它与一系列命令。

另一个不同之处在于必须将cfn-init烘焙到您用于启动机器的AMI中。现在几乎所有的AMI都是如此,所以并不是真正引起重大关注的原因。

相关问题