Cloudformation:EC2和启动模板中的用户数据

时间:2019-03-24 08:44:55

标签: amazon-web-services amazon-cloudformation

似乎EC2用户数据在这里优先,并且从不执​​行启动模板用户数据。 如果我从EC2中删除用户数据,它将执行LaunchTemplate用户数据而不会出现任何问题。 使用的AMI ID是CentOS 7。 如何实现以一定顺序运行两个User-Data。

我已经使用cloudformation了很多,并浏览了论坛。

{
    "Resources": {
        "BSLaunchTemplate": {
            "Type": "AWS::EC2::LaunchTemplate",
            "Properties": {
                "LaunchTemplateName": "BroadSoftLaunchTemplate2",
                "LaunchTemplateData": {
                    "KeyName": "haystackaccess",
                    "ImageId": "ami-014b38e758721be30",
                    "InstanceType": "t2.medium",
                    "SecurityGroupIds":["sg-e0b92fa7"],
                    "UserData": {
                        "Fn::Base64": {
                            "Fn::Join":["", [
                                "#!/bin/bash \n",
                                "yum update -y \n",
                                "yum –y install epel-release \n",
                                "yum -y install python-pip \n",
                                "pip install pystache \n",
                                "pip install argparse \n",
                                "pip install python-daemon \n",
                                "pip install requests \n",
                                "yum install -y https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.amzn1.noarch.rpm \n",        
                                "echo UD_OF_LT_1 >> /var/log/user-data.log \n",
                                "echo UD_OF_LT_2 >> /var/log/user-data.log \n",
                                "echo UD_OF_Lt_3 >> /var/log/user-data.log \n"
                            ]
                        ]
                        }
                    }
                }
            }
        },
        "primaryec2": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "LaunchTemplate": {
                    "LaunchTemplateId":{"Ref":"BSLaunchTemplate"},
                    "Version":"1",
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Network Server"
                    }],
                "UserData":{
                        "Fn::Base64": {
                            "Fn::Join": ["",[
                                "#!/bin/bash \n",
                                "echo UD_OF_EC2_1 >> /var/log/user-data.log \n",
                                "echo UD_OF_EC2_2 >> /var/log/user-data.log \n",
                                "echo UD_OF_EC2_3 >> /var/log/user-data.log \n"
                            ]
                        ]
                        }
                    }
            }
        }
    }
}


1 个答案:

答案 0 :(得分:0)

主要ec2实例的目的是什么?我想您需要在主数据库上运行额外的命令。我的意思是,您可以只复制命令-将它们放入外部bash文件中可能会使此处的工作变得更轻松。或使用启动模板中使用的命令创建AMI,然后在主实例中使用自定义AMI。您也许也可以对条件进行处理,但是我认为您必须对此有所创新,因为我认为您不能直接在用户数据本身中使用它们。

蒂姆