[英]Installing packages using apt-get in CloudFormation file
我有以下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" }
]
}
}
}
}
上面的模板的問題是在Ubuntu AMI中沒有安裝cfn-init
,因此在用戶數據腳本中調用cfn-init
將返回“command not found”並且什么也不做。
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",
在此之后,下一行中對/usr/local/bin/cfn-init
的調用應該正確運行。
您需要在實例的Metadata屬性中包含Cloudformation Init屬性 。 cfn-init腳本使用此元數據來確定在引導時應采取的操作。
在您的示例代碼中,它看起來並不像您甚至嘗試安裝任何軟件包,因此我不確定您期望出現的軟件包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.