Erstellen autoskalierender webserver-Gruppe hinzufügen, um bestehende elb
Habe ich einen Elastic Load Balancer, die bereits konfiguriert mit ports und SSL-Zertifikate etc und Route 53 ist festgelegt, um traffic für meine Website zu.
Ich würde gerne wissen, ob es ein Beispiel-cloudFormation-Vorlage zum erstellen einer auto scaling-Gruppe von ec2-Instanzen, wobei jede Instanz Hinzugefügt und entfernt zum/vom vorhandenen load balancer.
Ich habe sah rund um online-Beispiele - unten scheint fast, was ich brauche, aber das problem mit ihm (und alle anderen, die erscheinen zu verwenden Variationen dieser) ist, dass es annimmt, die Sie wollen, erstellen Sie eine NEUE load-balancer. Ich nicht.
Ist es möglich, das zu tun, was ich Vorschlage? Hat jemand ein Beispiel?
Meine CloudFormation Skript sieht wie folgt aus ( habe ich entfernt die eigentliche server-Paket config-Teil). Diese erfolgreich erstellt eine neue Instanz, aber es nicht zum Lastenausgleich "load4". Ich kann den host hinzufügen, um die load-balancer-manuell, aber diese Niederlagen der Zweck offensichtlich.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "Create an Auto-scaling group that will attach to existing load balancer and inhereit existing security groups.",
"Parameters" : {
"KeyName" : {
"Description" : "mykeyname",
"Type" : "String"
},
"InstanceType" : {
"Type" : "String",
"Default" : "m1.small",
"AllowedValues" : [ "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "c1.xlarge", "cc1.4xlarge" ],
"Description" : "EC2 instance type (e.g. m1.large, m1.xlarge, m2.xlarge)"
},
"SpotPrice": {
"Description": "Spot price for application AutoScaling Group",
"Type": "Number",
"MinValue" : ".03"
},
"MinInstances" : {
"Description" : "The minimum number of Workers",
"Type" : "Number",
"MinValue" : "0",
"Default" : "0",
"ConstraintDescription" : "Enter a number >=0"
},
"MaxInstances" : {
"Description" : "The maximum number of Workers",
"Type" : "Number",
"MinValue" : "1",
"Default" : "4",
"ConstraintDescription" : "Enter a number >1"
},
"OperatorEmail": {
"Description": "Email address to notify if there are any scaling operations",
"Type": "String"
}
},
"Mappings" : {
"AWSInstanceType2Arch" : {
"t1.micro" : { "Arch" : "64" },
"m1.small" : { "Arch" : "64" },
"m1.medium" : { "Arch" : "64" },
"m1.large" : { "Arch" : "64" },
"m1.xlarge" : { "Arch" : "64" },
"m2.xlarge" : { "Arch" : "64" },
"m2.2xlarge" : { "Arch" : "64" },
"m2.4xlarge" : { "Arch" : "64" },
"m3.xlarge" : { "Arch" : "64" },
"m3.2xlarge" : { "Arch" : "64" },
"c1.medium" : { "Arch" : "64" },
"c1.xlarge" : { "Arch" : "64" },
"cc1.4xlarge" : { "Arch" : "64HVM" },
"cc2.8xlarge" : { "Arch" : "64HVM" },
"cg1.4xlarge" : { "Arch" : "64HVM" }
},
"AWSRegionArch2AMI" : {
"us-east-1" : { "32" : "ami-31814f58", "64" : "ami-1b814f72", "64HVM" : "ami-0da96764" },
"us-west-2" : { "32" : "ami-38fe7308", "64" : "ami-30fe7300", "64HVM" : "NOT_YET_SUPPORTED" },
"us-west-1" : { "32" : "ami-11d68a54", "64" : "ami-1bd68a5e", "64HVM" : "NOT_YET_SUPPORTED" },
"eu-west-1" : { "32" : "ami-973b06e3", "64" : "ami-953b06e1", "64HVM" : "NOT_YET_SUPPORTED" },
"ap-southeast-1" : { "32" : "ami-b4b0cae6", "64" : "ami-beb0caec", "64HVM" : "NOT_YET_SUPPORTED" },
"ap-southeast-2" : { "32" : "ami-b3990e89", "64" : "ami-bd990e87", "64HVM" : "NOT_YET_SUPPORTED" },
"ap-northeast-1" : { "32" : "ami-0644f007", "64" : "ami-0a44f00b", "64HVM" : "NOT_YET_SUPPORTED" },
"sa-east-1" : { "32" : "ami-3e3be423", "64" : "ami-3c3be421", "64HVM" : "NOT_YET_SUPPORTED" }
}
},
"Resources" : {
"NotificationTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"Subscription": [ {
"Endpoint": { "Ref": "OperatorEmail" },
"Protocol": "email" } ]
}
},
"WebServerGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : { "Fn::GetAZs" : ""},
"LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
"MinSize" : "0",
"MaxSize" : "4",
"LoadBalancerNames" : [ "load4" ],
"NotificationConfiguration" : {
"TopicARN" : { "Ref" : "NotificationTopic" },
"NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH","autoscaling:EC2_INSTANCE_LAUNCH_ERROR","autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR"]
}
}
},
"CfnUser" : {
"Type" : "AWS::IAM::User",
"Properties" : {
"Path": "/",
"Policies": [ {
"PolicyName": "root",
"PolicyDocument": { "Statement": [ {
"Effect":"Allow",
"Action":"cloudformation:DescribeStackResource",
"Resource":"*"
} ] }
} ]
}
},
"HostKeys" : {
"Type" : "AWS::IAM::AccessKey",
"Properties" : {
"UserName" : { "Ref" : "CfnUser" }
}
},
"LaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Metadata" : {
"Comment" : "Create a single webserver",
"AWS::CloudFormation::Init" : {
"config" : {
"packages" : {
"yum" : {
}
},
"files" : {
}
}
}
},
"Properties" : {
"KeyName" : { "Ref" : "KeyName" },
"SpotPrice" : { "Ref" : "SpotPrice" },
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" },
"Arch" ] } ] },
"SecurityGroups" : [ "webserver" ],
"InstanceType" : { "Ref" : "InstanceType" },
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash\n",
"yum update -y aws-cfn-bootstrap\n",
"# Install the Worker application\n",
"/opt/aws/bin/cfn-init ",
" --stack ", { "Ref" : "AWS::StackId" },
" --resource LaunchConfig ",
" --configset ALL",
" --region ", { "Ref" : "AWS::Region" }, "\n"
]]}}
}
},
"WorkerGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : { "Fn::GetAZs" : ""},
"LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
"MinSize" : { "Ref" : "MinInstances" },
"MaxSize" : { "Ref" : "MaxInstances" }
}
},
"WebServerScaleUpPolicy" : {
"Type" : "AWS::AutoScaling::ScalingPolicy",
"Properties" : {
"AdjustmentType" : "ChangeInCapacity",
"AutoScalingGroupName" : { "Ref" : "WorkerGroup" },
"Cooldown" : "60",
"ScalingAdjustment" : "1"
}
},
"WebServerScaleDownPolicy" : {
"Type" : "AWS::AutoScaling::ScalingPolicy",
"Properties" : {
"AdjustmentType" : "ChangeInCapacity",
"AutoScalingGroupName" : { "Ref" : "WorkerGroup" },
"Cooldown" : "60",
"ScalingAdjustment" : "-1"
}
}, ...
"WorkerThreadHigh": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"AlarmDescription": "Scale-up if Worker Thread Vs. Idle Percent > 80% for 10min",
"MetricName": "PctActiveWorkers",
"Namespace": "EC2",
"Statistic": "Average",
"Period": "300",
"EvaluationPeriods": "2",
"Threshold": "80",
"AlarmActions": [ { "Ref": "WebServerScaleUpPolicy" } ],
"Dimensions": [
{
"Name": "AutoScalingGroupName",
"Value": { "Ref": "WebServerGroup" }
}
],
"ComparisonOperator": "GreaterThanThreshold"
}
},
"WorkerThreadLow": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"AlarmDescription": "Scale-down if CPU < 50% for 10 minutes",
"MetricName": "PctActiveWorkers",
"Namespace": "EC2",
"Statistic": "Average",
"Period": "300",
"EvaluationPeriods": "2",
"Threshold": "50",
"AlarmActions": [ { "Ref": "WebServerScaleDownPolicy" } ],
"Dimensions": [
{
"Name": "AutoScalingGroupName",
"Value": { "Ref": "WebServerGroup" }
}
],
"ComparisonOperator": "LessThanThreshold"
}
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht entkoppeln die beiden. Ich habe überprüft, mit Amazon Unterstützung für eine unabhängige Verwendung. Es saugt.
Hier ist unsere Diskussion. https://forums.aws.amazon.com/thread.jspa?messageID=362467񘟣 Amazon Beantwortung nicht am Ende, es ist Ihre Art zu sagen, die wir nicht unterstützen.
UPDATE unten Meine Antwort ist nicht mehr korrekt. Amazon hat noch diese Funktionalität. Siehe andere Diskussionen.
Parameter LoadBalancerNames einfach bezeichnet Eine Liste von load-Balancer verbunden mit diesem auto scaling-Gruppe. Die Probe AWS CloudFormation Vorlage verweisen Sie (und auch alle anderen Beispiele, die ich bewusst bin) ist dies so konfiguriert, das Ergebnis der LoadBalancer Ressource wie folgt:
Das Ergebnis der Ref - Funktion ist definiert in Abschnitt Rückgabewerte unten LoadBalancer:
Dies ist einfach die Load Balancer Namen wie gezeigt, in der AWS-Management-Konsole, entsprechend können Sie alle Elastic Load Balancer außerhalb des CloudFormation-von der Lieferung der seinen Namen direkt, z.B.:
ElasticLoadBalancer
Ressourcen, wie z.B. entfernen derOutput
, dieElasticLoadBalancer
und ändernInstanceSecurityGroup
zu verwenden"SourceSecurityGroupOwnerId" : "amazon-elb"
und"SourceSecurityGroupName" : "amazon-elb-sg"
(nicht sicher, ob ich etwas verpasst, aber Sie bekommen die Idee).AutoScalingGroup
Konfigurationen die eine oder andere Weise, sofern nur dieWebServerGroup
Referenzen "load4" inLoadBalancerNames
, in der Erwägung, dass dieWorkerGroup
nicht Umgekehrt die letzteren nicht dieMinInstances
/MaxInstances
Parameter, aber die erstere nicht. Befestigung entweder eine (abMinInstances
= 1) ergibt die jeweilige Instanz, die Hinzugefügt wird, um die "load4" load balancer (Ihre eigentliche Absicht ist nicht ganz klar, aus der template-fragment, gerade jetzt, so, das ist bis zu Ihnen).Kann ich bestätigen, dass das folgende funktioniert, wenn es in der config von einer Ressource, "Type": "AWS::Autoskalierender::AutoScalingGroup":
oder, wenn Sie den Namen als parameter,