我创建了自动缩放组,它启动了具有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" ]
}
]
}]
}
},
}
}
```
答案 0 :(得分:0)
另一种解决方案是在启动新实例之前配置您的VM 。即确保已经配置了启动ASG实例的映像。
一种方法是使用packer.io之类的东西来创建一个使用Ansible作为您的配置器的新AMI。然后,您只需将此新AMI ID传递到LaunchConfiguration的ImageId
属性即可。
另一种方法可能涉及使用User Data
来“回家”并告诉您实例已获取的公共IP地址。
答案 1 :(得分:0)
对我来说最好的解决方案是使用免费许可证安装Ansible Tower,使用user_data:properties ansible就有一个例子。 https://www.ansible.com/blog/autoscaling-infrastructures
但是必须构建第一个基本映像,因为如果不这样做会延长所有配置时间延迟。
答案 2 :(得分:0)
您可以将Opswork与Cloudformation一起使用,以便在将新实例添加到Autoscaling组时运行Ansible。
虽然Opswork使用Chef,但您可以使用此自定义食谱https://github.com/deepakagg/ansible-opsworks来运行所需的剧本。