2016-04-07 3 views
1

ELBを持つEC2を起動するオートスケーリンググループを作成しました。私の質問は、これらの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

別の解決策は、新しいインスタンスを起動する前に規定あなたのVM になります。私。 ASGインスタンスを開始するイメージがすでにプロビジョニングされていることを確認してください。 これを行う1つの方法は、packer.ioのようなものを使用して、プロビジョナーとしてAnsibleを使用して新しいAMIを作成することです。次に、この新しいAMI IDをLaunchConfigurationのImageId属性に渡すだけです。

もう1つのアプローチでは、「電話の家」にUser Dataを使用して、インスタンスが取得したパブリックIPアドレスを知らせることができます。

0

私のための最善の解決策は、無料のライセンスで、使用可能なuser_data:プロパティを持つAnsible Towerをインストールすることでした。 https://www.ansible.com/blog/autoscaling-infrastructures

ただし、これを行わないとすべてのプロビジョニング時間の遅延が発生するため、最初のベースイメージを作成する必要があります。

0

新しいインスタンスが自動スケーリンググループに追加されるたびに、Answingを実行するために、雲の情報を含むOpsworkを使用することができます。

Opsworkではシェフが使用されていますが、このカスタム料理のhttps://github.com/deepakagg/ansible-opsworksを使用して、目的のプレイブックを実行できます。

関連する問題