![为什么 aws cloud formed 没有安装我指定的包?](https://linux22.com/image/798071/%E4%B8%BA%E4%BB%80%E4%B9%88%20aws%20cloud%20formed%20%E6%B2%A1%E6%9C%89%E5%AE%89%E8%A3%85%E6%88%91%E6%8C%87%E5%AE%9A%E7%9A%84%E5%8C%85%EF%BC%9F.png)
我对 AWS 服务还很陌生。我正在尝试使用 AWS 云形成,并创建了一个模板。该模板没有错误,我能够使用它来创建机器。
但我在模板中添加了一些配置,以便在启动时安装 tomcat、git 和其他东西。但这并没有发生在我身上。
下面是我用于安装 tomcat 的部分代码:
"Resources": {
"Tomcat": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"packages": {
"apt": {
"tomcat6": [],
"git": [],
}
}
}
}
},
可是我登录机器的时候又tomcat
没有git
安装!
提前致谢。
答案1
我认为您遇到的问题是,cloud-init 与 cfn-init 不同。
云初始化是作为 Ubuntu AWS AMI 的一部分推出的工具,用于解释实例元数据的 EC2 用户数据组件。Amazon Linux 也采用了此工具并将其内置到其 AMI 中。
cfn 初始化是另一个工具集的一部分,称为CloudFormation 帮助程序脚本由 AWS 创建亚马逊 Linux可以读取
Metadata
CloudFormation 模板中命名的附加部分。
因此,Ubuntu 和 Amazon Linux AMI 都预装了 cloud-init 工具来访问用户数据,但只有 Amazon Linux 具有CloudFormation 帮助程序脚本预先安装例如 cfn-init 来访问 CloudFormation 元数据。
然而,AWS 确实分发包您可以使用它来读取 CloudFormation 元数据。具体来说,请查看此模板有关如何使用 cloud-init 用户数据脚本安装 python-setuptools,请下载 CloudFormation Helper 脚本,使用 easy_install 安装它们,然后调用 cfn-init。
注意:其他发行版或 AMI 可能支持 cloud-init 或 cfn-init,但我在这里仅介绍一般情况。
答案2
您需要调用 cfn-init (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html)实例的 UserData 属性内:
{
"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 元数据并设置其中指定的所有内容。
此外,在创建 CF Stack 时,您可能需要进入第二页的高级设置(在提供参数之后),并确保将“出错时回滚”设置为“否”。这样,如果 cfn-init 脚本因任何原因失败,您可以 ssh 到实例并检查 /var/log/cfn-init.log 文件以获取更多信息。
答案3
以上答案是正确的。但您还应确保已成功安装 CloudFormation 帮助程序脚本。请按照http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html了解安装详情。
答案4
"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",