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中有什么好处?
的主要优点AWS::CloudFormation::Init在UserData是,前者是可更新的-如果你修改AWS::CloudFormation::Init部分,CloudFormation将更新您的EC2实例到位,而如果修改UserData的EC2资源的财产在你的模板,并更新你的筹码,CloudFormation将取代该EC2实例.
这很方便,例如,如果要更新EC2实例上安装的软件包而不重新创建它.
最大的优点是,如果您还将用户数据用于其他目的,则不会污染用户数据。所以这存在于 CloudFormation 堆栈中,而不是存在于每个实例用户数据中。
cfn-init 基本上从 CloudFormation 中提取这些数据并运行命令。
根据这种复杂程度,您可能会考虑将其烘焙到 AMI 中,并仅在一个命令中调用它,而不是在一系列命令中调用它。
另一个区别是 cfn-init 必须嵌入到您用来启动机器的 AMI 中。现在几乎所有的 AMI 都是这种情况,因此并不是真正引起重大关注的原因。
将CFN-INIT视为用户数据的定制版本是100%错误的-CFN-INIT具有超越用户数据的强大功能。
用户数据基于过程,运行命令
一种
乙
C
d
CFN-INIT是基于所需状态的。
像这样
这样使B。
CFN-INIT可以再次运行-例如,在堆栈更新期间,以更新配置,或专门将状态带入所需的“状态”-用户数据由于其程序背景无法实现-它不保证能够再次运行并移动实例进入某个状态。
您可以在CFN-INIT中运行命令-即它也可以是过程性的-但它也可以基于状态。即/tmp/something.txt具有此内容。或服务X已启动。“ Apache已安装”了解没有apache,最新的apache和apache的版本之间的区别-并采取相应的措施。
| 归档时间: |
|
| 查看次数: |
3533 次 |
| 最近记录: |