Jam*_*ite 3 amazon-web-services aws-cloudformation
我有以下CloudFormation脚本.正在创建堆栈并启动Ec2实例,我可以通过SSH进行安装但不安装软件包.
我不知道它在哪里失败了.我正在使用Ubuntu.我找不到在我的实例上安装了cfn-init?或者它是否仅为Amazon Linux AMI安装?
我该如何解决此问题?
{
"Parameters" : {
"ShinyKey": {
"Description": "Key pair for instance.",
"Type": "AWS::EC2::KeyPair::KeyName"
}
},
"Resources": {
"Ec2Instance" : {
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"packages": {
"apt": {
"r-base-dev": [],
"libcurl4-openssl-dev": [],
"git": []
}
}
}
}
},
"Type" : "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-9eaa1cf6",
"InstanceType": "t2.micro",
"KeyName": {"Ref": "ShinyKey"},
"SecurityGroups": [{"Ref": "InstanceSecurityGroup"}],
"Tags": [{
"Key": "Name",
"Value": "R-Shiny-Server"
}],
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash\n",
"/usr/local/bin/cfn-init --region ",
{
"Ref": "AWS::Region"
},
" -s ",
{
"Ref": "AWS::StackName"
},
" -r Ec2Instance\n"
]
]
}
}
}
},
"InstanceSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription" : "Enable SSH access via port 22, and ports 3838 and 80 for Shiny",
"SecurityGroupIngress" : [
{ "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" },
{ "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0" },
{ "IpProtocol" : "tcp", "FromPort" : "3838", "ToPort" : "3838", "CidrIp" : "0.0.0.0/0" }
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
上面的模板的问题cfn-init是没有安装在Ubuntu AMI中,因此cfn-init在用户数据脚本中的调用将返回"未找到命令"并且什么都不做.
cfn-helper实用程序仅自动安装在最新的Amazon Linux AMI中,如文档中所述.对于Ubuntu,您需要手动安装它们,您可以通过在现有用户数据脚本之后添加一行来执行以下操作"#!/bin/bash\n",:
"apt-get update && apt-get install pip && pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
Run Code Online (Sandbox Code Playgroud)
在此之后,/usr/local/bin/cfn-init下一行中的调用应该正确运行.
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |