0

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

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

谢谢

4

2 回答 2

2

没有“最好”的方法可以做到这一点,只有许多不同的选择和不同的权衡。

将脚本放入您的 CF 模板很快就会变得令人厌烦,因为您必须引用您的数据。

链接到 shell 脚本可能会变得复杂,因为您必须详细指定所有内容,并且这些步骤可能会变得很脆弱。

一段时间后,您会想要使用 Puppet 或 Chef。这些让您可以声明想要的“应该安装 Apache 2.1,配置文件应该看起来像这样..”,而不是指定应该如何完成。这可以使复杂的事情井井有条。(但有一个学习曲线。看看 OpsWorks。)

之后,您需要将您的图像捆绑到 AMI 中(如果您的构建需要一段时间,可以加快速度,并且依赖互联网上的其他服务器来安装!)

于 2013-10-23T01:43:46.113 回答
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"}]]}},
...
于 2013-10-22T22:52:13.783 回答