AWS CloudFormation bash部署脚本与模板命令

时间:2013-10-18 16:19:12

标签: linux bash shell amazon-web-services amazon-cloudformation

据我所知,CloudFormation模板可以从远程检索文件并运行它(例如:bash shell),例如:下载一个bash脚本来安装Graphite / OpenTSDB RRD工具。

我的问题是:使用CloudFormation模板命令按步骤执行安装步骤与使用CloudFormation模板检索bash脚本以运行安装之间是否有任何最佳做法?

由于

2 个答案:

答案 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"}]]}},
...