簡體   English   中英

在CloudFormation文件中使用apt-get安裝軟件包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM