Introduction to Amazon EC2 auto scaling
In this tutorial, we will use Amazon EC2 auto scaling to recover an EC2 instance from failure.
Prerequisites
You need an account with privileges to create an EC2 instance, key pairs, EC2 launch templates, and Auto scaling groups on AWS.
What is EC2 auto scaling
EC2 is the basic computing unit in AWS.
EC2 auto scaling is a feature that helps you to run the desired number of EC2 instances at any time to match the capacity requirement of your workloads.
EC2 auto scaling can recover EC2 instances from failures by creating new instances to replace the failed instances.
Auto scaling can also help you to optimize your AWS bill by maintaining the optimum number of EC2 instances to match the capacity demand of your applications. Auto scaling will launch new EC2 instances when the capacity demand increases and will terminate existing instances when the demand decreases.
EC2 auto scaling is implemented via Auto scaling groups.
What is an auto scaling group
An auto scaling group is a grouping of EC2 instances governed by two types of auto scaling controls.
- Health checks ensure the desired number of EC2 instances are always running by replacing failed EC2 instances with new instances
- Target tracking scaling policies scale the number of instances by monitoring CPU utilization, network bandwidth, load balancer requests count, etc.
How to create an auto scaling group
EC2 auto scaling uses a launch template to create new EC2 instances. A launch template pre-defines a set of parameters for creating EC2 instance.
Create an EC2 launch template
We will use the default VPC for this tutorial. But you can use any other VPC if you wish.
Log in to the AWS account. Select your preferred region from the top menu and select EC2 from the Services
menu to go to the EC2 console.
-
In the left navigation menu, under Instances click on
Launch Templates
.Click on the
Create launch template
button. -
Type in
my-app
for the Launch template name. Type inv1.0
for the Version. -
In the Applications and OS images section, click on the
Quick start
tab. Select the AMIUbuntu Server 22.04 LTS
which is free tier eligible. -
Select instance type as
t2.micro
in the Instance type section. This instance type is also eligible for AWS free tier. -
In the Key pair section we must define an SSH key pair to be configured in the EC2 instances created with this template. If you have a previously-created key pair, select it from the drop-down list.
If not, click on
Create new key-pair
. to create a new set of SSH keys. In the Create Key Pair dialog box, type inmy-app-key-pair
for the name. Leave the default values for other parameters and click onCreate Key Pair
. button.AWS will prompt you to download the
pem
file. Save it in a secure location. You’ll need it to SSH into the EC2. -
In the Network settings section, leave out the subnet field. We will select the subnets when we are creating the scaling group.
-
From the Security groups drop-down menu, select the default security group or any previously created security group of the VPC that you wish to launch this EC2.
-
Click on
Create Launch Template
to create the template.
Create the auto scaling group
Let’s create an auto scaling group using this launch template we created just now.
On the EC2 console, click on Auto Scaling Groups
under Auto Scaling
menu. Click on Create Auto Scaling Group
. You will get a 7-step wizard to create a new auto scaling group.
-
Type in
my-app
. for the Auto scaling group name.Select
my-app
launch template from the Launch template drop-down menu. Since there’s only one version of the template, this version will be selected automatically. If we have multiple versions of the launch template, we can select the required version here.Click on
Next
. -
In the Network section, select the desired VPC from the VPC drop-down list.
You can select multiple subnets from the Availability zones and subnets drop-down list. Since we are creating a scaling group for one EC2 instance, let’s select just one subnet and click on
Next
If you plan to have more than one EC2 in your auto scaling group you can select multiple subnets in different availability zones. Then AWS will evenly distribute your EC2 instances across these subnets.
-
We will not be using load balancing so keep the
No load balancer
option in the Load balancing section.We are also not using VPC Lattice, so keep
No VPC Lattice Service
option in the VPC Lattice integration options section.In the Health checks section, AWS automatically enables all health checks for the EC2.
So, click on
Next
to go to the next step. -
In the Group size section, set the
desired capacity
as1
. This is the number of EC2 instances you need to be up and running continuously.This section also has two more parameters.
Min desired capacity
is the minimum number of EC2 instances that must be retained when scaling in.Max desired capacity
is the maximum number of EC2 instances that can be running when scaling out.Since our
Desired capacity
is set to1
, theMin desired capacity
andMax desired capacity
is also set to1
.We will not use target tacking policies in this tutorial so keep the
No scaling policies
in the Automatic scaling section.Keep the option
No policy
in the Instance maintenance policy section so that the scaling group will launch a new EC2 instance when a health check fails in the existing instance.Click on
Next
. -
You can configure AWS SNS notifications here. We will not do it now.
Click on
Skip to review
to skip Step-6 and go to the last step. -
Review the parameters you just set and click on the
Create auto scaling group
button to create the auto scaling group.
It will take us to the Auto scaling groups section in the EC2 console.
AWS will now be launching new EC2 instances to match the criteria of our new auto scaling group. Wait a few minutes and click on the refresh button at the upper menu to refresh the status.
The instance count would be updated as 1
.
Auto scaling in action
Go to the EC2 dashboard and select Instances
from the left navigation menu. A new instance would have been created for our auto scaling group.
Select the instance and click on Terminate instance
from the Instance state
drop-down menu.
Wait for about 1 minute and click the refresh button.
A new instance would be created to replace the terminated instance.
Check the Auto scaling group logs
Go to the Auto Scaling Groups
in EC2 dashboard.
Click on the my-app
auto scaling group to view the details.
Click on the Activity
tab.
Check the activity history
and read the log of activities to check what had happened when we terminated the EC2 instance.
Delete the auto scaling group
We have successfully created an auto scaling group to recover our EC2 from failure. Let’s delete the resources we created so we will not be overbilled.
Go to the Auto Scaling Groups
in the EC2 dashboard. Select my-app
auto scaling group. In the Actions
drop-down menu click on Delete
. Confirm deletion, and AWS will delete the auto scaling group including the instances belonging to it.
Click on the Instances
menu and verify the instances are terminated.
Wrapping up
In this tutorial, we created an EC2 instance with auto scaling.
EC2 auto scaling takes care of creating new instances to match our capacity requirements.
But, it’s our responsibility to deploy the application on the new EC2 instances when they are created. There are two approaches to do that.
- Create a new AMI with our application pre-installed and use that AMI in the launch template
- Deploy our application on the new EC2 once it enters the
running
state.
We’ll explore these options in upcoming tutorials.