Setting up Auto Scaling on EC2

This post is specifically about Ubuntu, but the process is similar for other operating systems. You’ll need to have an S3 bucket, and know how to launch EC2 instances.

Here’s a quick overview of the process:

  1. Create a bootstrap script that downloads installation files from S3.
  2. Create an install script that initializes your application code.
  3. Upload your install script and installation files to S3.
  4. Create an IAM role so your instances can download installation files.
  5. Create a Launch Configuration with your bootstrap script as the user data.
  6. Create an Auto Scaling group based on the launch configuration.

Create a bootstrap script #

This is a minimal shell script that will install the AWS cli and nginx.

userdata.sh

#!/bin/sh

echo Installing software
apt-get -y install awscli
apt-get -y install nginx

echo Setting directory permissions
chgrp -R ubuntu /etc/nginx
chown -R ubuntu /etc/nginx

echo Copying installation files
aws s3 cp --region us-east-1 s3://your-bucket-here/private/auto-scaling-test/ /tmp/install/ --recursive

echo Running install.sh
su - ubuntu /tmp/install/install.sh

echo Cleaning up
rm -r /tmp/install

Create an install script #

This install script just starts nginx, but you can also copy configuration files, setup git repositories, and start application code.

install.sh

echo Starting servers
service nginx start

Create an IAM Role #

Go to the IAM section of the AWS console. Click on Roles > Create New Role, then name the role. Select Amazon EC2, then Amazon S3 Read Only Access.
IAM Role 1.png
IAM Role 2.png

Create a launch configuration #

In the EC2 console, go to Auto Scaling > Launch Configurations.

Launch Configuration.png

Create an Auto Scaling group #

Go to Auto Scaling > Auto Scaling Groups > Create Auto Scaling group. For testing, you can set the minimum number of instances to one. After clicking Create Auto Scaling group, a new instance should start launching.

Once it has initialized, it should have a Public IP so you can SSH in and make sure everything worked correctly. If there was a problem in the installation script, you can update the file in S3, then kill the existing instance. A new one will start up to take its place, automatically using the new install script.

Once your install script is working, you can modify your scaling parameters, and sit back while your servers start themselves!

Auto Scaling.png

 
40
Kudos
 
40
Kudos

Now read this

Let’s Encrypt on Google App Engine

Let’s Encrypt is a pretty awesome initiative to provide free SSL certificates to make creating a secure website easy. It comes with support for automatic installation on Apache and nginx, but requires some extra work for other servers.... Continue →