在CloudFormation文件中使用apt-get安装软件包

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)

}

wjo*_*dan 7

上面的模板的问题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下一行中的调用应该正确运行.