【问题标题】:provision ec2 in autoscaling group with ansible unsing cloud formation stack使用 cloudformation 堆栈在具有 ansible 的自动缩放组中配置 ec2
【发布时间】:2016-07-28 00:30:19
【问题描述】:

我创建了启动具有 ELB 的 EC2 的自动缩放组。我的问题是如何使用 ansible 配置这些 EC2 实例? 在我使用 CNAME 之前,但现在我无法获取实例 dns。如果我错了,请纠正我。

我应该使用动态库存还是有其他选择?

我的云形成模板如下:

```

{
  "AWSTemplateFormatVersion" : "2010-09-09",
 "Description" : "Template create autoscaling group",
  "Parameters": {
   "devKeyPair": {
  "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instances",
  "Type": "AWS::EC2::KeyPair::KeyName",
  "Default" : "dev-key"

}
},
"Resources" : {
"LaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
  "KeyName" : { "Ref": "devKeyPair" },
  "ImageId" : "ami-1effc703",
   "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
  "#!/bin/bash\n", "\n", "    echo 'Installing Git'\n","    yum --nogpgcheck -y install wget\n""] ]}},
  "InstanceType" : "t2.small",
  "BlockDeviceMappings" : [
     {
       "DeviceName" : "/dev/sda1",
       "Ebs" : { 
          "VolumeSize" : "10", 
          "VolumeType" : "gp2", 
          "DeleteOnTermination" : "true"
          } 
     }
  ]
 }
 },
"BackendGroup" : {
  "Type" : "AWS::AutoScaling::AutoScalingGroup",
  "Properties" : {
    "AvailabilityZones" : ["eu-central-1a"],
  "MinSize" : "1",
  "MaxSize" : "1",
  "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
  "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ],
  "Tags": [
    {
        "ResourceType": "auto-scaling-group",
        "ResourceId": "bas-auto",
        "Value": "bas-dev",
        "Key": "Name",
        "PropagateAtLaunch" : "true"
    }
]
  }
},

"ElasticLoadBalancer": {
  "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
  "Properties": {
  "AvailabilityZones": ["eu-central-1a"],
    "Listeners": [ {
      "LoadBalancerPort": "80",
      "InstancePort": "80",
      "Protocol": "HTTP"
    } ]
  }
},
"BackendDNS" : {
  "Type" : "AWS::Route53::RecordSetGroup",
  "Properties" : {
    "HostedZoneName" : "example.com.",
    "Comment" : "Targered to Bas instance",
    "RecordSets" : [{
      "Name" : "bas-dev.example.com.",
      "Type" : "CNAME",
      "TTL" : "300",
      "ResourceRecords" :  [
        {
            "Fn::GetAtt": [ "ElasticLoadBalancer", "DNSName" ]
        }
      ]
    }]
  }
},
}
}

```

【问题讨论】:

    标签: amazon-ec2 ansible amazon-cloudformation autoscaling


    【解决方案1】:

    另一种解决方案是在启动新实例之前配置您的虚拟机。 IE。确保您启动 ASG 实例的映像已配置好。 一种方法是使用 packer.io 之类的东西来创建一个使用 Ansible 作为您的供应商的新 AMI。然后,您可以简单地将这个新的 AMI ID 传递到 LaunchConfiguration 的 ImageId 属性中。

    另一种方法可能涉及使用User Data 来“打电话回家”并告诉您实例已获取的公共 IP 地址。

    【讨论】:

      【解决方案2】:

      对我来说最好的解决方案是使用免费许可证安装 Ansible Tower,使用 user_data: properties ansible 在这里有一个示例。 https://www.ansible.com/blog/autoscaling-infrastructures

      但是有必要构建第一个基础映像,因为如果您不这样做会延长所有配置时间延迟。

      【讨论】:

        【解决方案3】:

        您可以将 Opswork 与 Cloudformation 结合使用,以便在将新实例添加到 Autoscaling 组时运行 Ansible。

        虽然 Opswork 使用 Chef,但您可以使用此自定义说明书 https://github.com/deepakagg/ansible-opsworks,它将运行所需的剧本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-15
          • 2017-01-30
          • 2021-05-16
          • 2020-10-26
          • 2016-10-21
          • 2017-10-27
          相关资源
          最近更新 更多