为什么aws云arrays不安装我指定的软件包?

我对AWS服务非常陌生。 我正在尝试使用AWS云arrays,并创build了一个模板。 该模板是免费的,我可以使用它创build机器。

但是我在模板中添加了一些configuration,以便在启动过程中安装tomcat,git和其他东西。 但是这不会发生在我身上。

这里是我用来安装tomcat的代码的一部分:

"Resources": { "Tomcat": { "Type": "AWS::EC2::Instance", "Metadata": { "AWS::CloudFormation::Init": { "config": { "packages": { "apt": { "tomcat6": [], "git": [], } } } } }, 

但是当我login到机器既没有安装tomcat也没有安装git

提前致谢。

我相信你在这里的问题是混乱的,云-init是不一样的cfn-init。

  • cloud-init是作为Ubuntu AWS AMI的一部分启动的工具,它允许解释实例元数据的EC2用户数据组件。 亚马逊Linux也采用了这个工具,并将其构build到他们的AMI中。

  • cfn-init是AWS针对Amazon Linux创build的名为CloudFormation Helper Scripts的不同工具集的一部分,可以在您的CloudFormation模板中读取名为Metadata的附加部分。

因此,Ubuntu和Amazon Linux AMI都预安装了用于访问用户数据的云初始化工具,但是只有Amazon Linux已经预装了CloudFormation Helper脚本,例如cfn-init才能访问CloudFormation元数据。

但是,AWS会分发可用于读取CloudFormation元数据的包。 具体来说,查看这个模板 ,了解如何使用cloud-init用户数据脚本安装python-setuptools,下载CloudFormation Helper脚本,使用easy_install安装它们,然后调用cfn-init。

注意:还有其他发行版或AMI可能支持cloud-init或cfn-init,但我只是在这里介绍一般情况。

您需要在实例的UserData属性中调用cfn-init( http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html ):

 "Resources": { "Tomcat": { "Type": "AWS::EC2::Instance", "Metadata": { "AWS::CloudFormation::Init": { "config": { "packages": { "apt": { "tomcat6": [], "git": [], } } } } }, "Properties": { "UserData": {"Fn::Base64": {"Fn::Join": ["", [ "#!/bin/bash\n" "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r Tomcat", " --region ", { "Ref" : "AWS::Region" }, "\n", ]]}} } 

UserData属性是Base64编码的,并允许您指定应在实例启动时运行的脚本。 在这里你可以调用cfn-init,它将读取CloudFormation :: Init元数据并设置在那里指定的所有东西。

另外,在创buildCF堆栈时,您可能想要在第二页上进入高级设置(在给出参数之后),并确保回滚出错设置为“否”。 这样,如果cfn-init脚本因为某种原因失败,你可以使用sshlogin到实例,并检查/var/log/cfn-init.log文件以获取更多信息。

以上答案是正确的。 但是你也应该确保你已经成功安装了CloudFormation的帮手脚本。 请按照http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html获取安装细节。

  "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash\n", "export DEBIAN_FRONTEND=noninteractive\n", "apt-get update && apt-get upgrade -y\n", "apt-get -y install python-setuptools\n", "easy_install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n", "/usr/local/bin/cfn-init --stack ", { "Ref":"AWS::StackName" }, " --resource <REPLACE_WITH_RESOURCENAME>", " --region ", { "Ref": "AWS::Region" }, "\n",