The ASG scaling policy you select determines how your ASG will automatically scale in or scale out your EC2 instances. To start off you have dynamic scaling, this includes target tracking, simple scaling and step scaling. Target tracking is the simplest you simply decide a specific function say CPU utilization and specify your desired capacity such as 40%, then you set you minimum number of instances and max number of instances and the ASG ensures 40% utilization is always met, scaling out and in as needed. Next up is simple scaling, this is believe it or not rather simple. All that is done in a simple scaling is you specify a cloudwatch alarm, such as CPU utilization, network, etc and if that is met you have a specific number of instances that are deployed or removed. A step scaling policy is a little different as it allows you to utilize several options within one policy for example if you have a large CPU utilization you can have a higher number of instances being deployed than if your only slightly above threshold, unlike simple policy where you have a specific number, or percentage, of instances that are added or removed. Next up is scheduled actions, this is perfect if you know you get a high utilization at a certain time every day and you need to have a specific number of instances deployed at a certain time and then removed. Finally there’s the predictive scaling which uses machine learning to track trends and anticipate when more instances are needed based on history and deploy and remove as needed, you can even set how many minutes before the anticipated congestion you would like to have instances start deploying. One last thing I would like to note is you can have a cooldown period, default of 5 minutes, during instance deployment / removal so that if you have a set of instances deploying / terminating then no more instances will be added or terminated until the cold down period is complete.