2016-04-07 3 views
1

Я создал группу автомасштабирования, которая запускает EC2 с ELB. Мой вопрос заключается в том, как обеспечить, чтобы эти экземпляры EC2 были недоступны? Прежде, чем я использовал CNAME, но теперь я не могу получить экземпляр dns. Пожалуйста, поправьте меня, если я ошибаюсь.Предоставление ec2 в группе автомасштабирования с несвязанной неустойчивой облачной областью образования

Должен ли я использовать динамический инвентарь или есть ли другие варианты?

шаблон Мое облако образование ниже:

`` `

{ 
    "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

Другим решением было бы предоставление виртуальной машины перед тем запуском нового экземпляра. То есть убедитесь, что образ, с которого вы запускаете экземпляры ASG, уже подготовлен. Один из способов сделать это - использовать что-то вроде packer.io, чтобы создать новый AMI, используя Ansible в качестве вашего средства обеспечения. Затем вы можете просто передать этот новый идентификатор AMI в атрибут ImageId LaunchConfiguration.

Другим подходом может быть использование User Data для «домашнего телефона» и рассказать об общедоступном IP-адресе, который приобрел экземпляр.

0

Лучшим решением для меня была установка Ansible Tower с бесплатной лицензией, здесь используется пример user_data: properties ansible. https://www.ansible.com/blog/autoscaling-infrastructures

Но необходимо создать первое базовое изображение, потому что, если вы этого не сделаете, это продлит всю задержку времени ожидания.

0

Вы можете использовать Opswork с облачной информацией, чтобы запускать Ansible, когда новый экземпляр добавляется в группу Autoscaling.

Хотя Opswork использует шеф-повара, но вы можете использовать эту обычную поваренную книгу https://github.com/deepakagg/ansible-opsworks, которая будет запускать нужную книгу.