据我所知,CloudFormation模板可以从远程检索文件并运行它(例如:bash shell),例如:下载一个bash脚本来安装Graphite / OpenTSDB RRD工具。
我的问题是:使用CloudFormation模板命令按步骤执行安装步骤与使用CloudFormation模板检索bash脚本以运行安装之间是否有任何最佳做法?
由于
答案 0 :(得分:2)
没有“最好”的方法,只有很多不同的选择,有不同的权衡。
将脚本放入CF模板很快就会变得很烦人,因为你必须引用你的数据。
链接到shell脚本可能会变得复杂,因为您必须详细指定所有内容,并且步骤可能会变得脆弱。
过了一会儿,你会想要使用Puppet或Chef。这些让你声明你想要什么“应该安装Apache 2.1,配置文件看起来应该是这样......”而不是指定应该如何。这可以保持复杂的事情有条理。 (但有一个学习曲线。看看OpsWorks。)
之后,您需要将图像捆绑到AMI中(如果您的构建需要一段时间,请加快速度,并依赖互联网上的其他服务器进行安装!)
答案 1 :(得分:1)
我建议您使用user-data作为模板的参数。无论是本地保存还是远程保存,最好将基础结构详细信息(即模板)与引导逻辑(shell脚本)分开。用户数据可以是shell脚本,并在实例启动时调用它。 以下是将用户数据作为参数提供的示例:
"Parameters":{
"KeyName":{
"Description":"N/A",
"Type":"String"
},
"initScript":{
"Description":"The shell script to be executed on boot",
"Type":"String"
},
},
"Resources":{
"workersGroup1":{
"GlobalWorker":{
"Type":"AWS::EC2::Instance",
"Properties":{
"InstanceType":"t1.micro",
"ImageId":"ami-XXXX",
"UserData":{"Fn::Base64":{"Fn::Join":["", [{"Ref":"initScript"}]]}},
...