title: Create autoscaling webserver group add to existing elb
body: <p>I have an Elastic Load Balancer already configured with ports and SSL certificates etc and Route 53 is set to route traffic for my site to it.   </p>
  
  <p>I'd like to know if there is an example cloudFormation template that creates an auto-scaling group of ec2 instances where each instance is added and removed to/from this existing load balancer.</p>
  
  <p>I've looked around online for examples - the one below seems to be nearly what I need, but the problem with it (and all the others which appear to use variations of this) is that it presumes you want to create a NEW load balancer. I do not.</p>
  
  <p><a href="https://s3.amazonaws.com/cloudformation-templates-us-east-1/AutoScalingMultiAZWithNotifications.template" rel="nofollow">https://s3.amazonaws.com/cloudformation-templates-us-east-1/AutoScalingMultiAZWithNotifications.template</a></p>
  
  <p>Is it possible, to do what I'm suggesting? Does someone have an example?</p>
  
  <p>My CloudFormation script looks like below ( I removed the actual server package config part). This successfully creates a new instance, but it does not add to load balancer "load4".  I can add the host to the load balancer manually, but this defeats the purpose obviously.</p>
  
  <pre><code>{
  "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 &gt;=0"
  },
  
  "MaxInstances" : {
    "Description" : "The maximum number of Workers",
    "Type" : "Number",
    "MinValue" : "1",
    "Default"  : "4",
    "ConstraintDescription" : "Enter a number &gt;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 &gt; 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 &lt; 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"
      }
    }
  }
  
  }
  </code></pre>