From Zero to Cloud: Setting Up an EC2 Sandbox, Part 3

This entry is part 2 of 3 in the series From Zero to Cloud: Setting Up an EC2 Sandbox

From Zero to Cloud: Setting Up an EC2 Sandbox

This is the final article in a three part series focused on setting up EC2 as a sandbox for application developers. I assume you have an AWS account with Amazon; if you don’t, please read Part 1 to learn how easy it is to sign up. I also assume you have configured your development environment and installed an AMI; if you haven’t, please read Part 2. In this installment, we’ll learn how to install Apache, MySQL and PHP in our running AMI, and then clone the AMI to make our own.

Setting up the LAMP Stack

Now we’re ready to get our LAMP stack set up. As it is outside the scope of this article and because there are many perspectives on best practice, we won’t get into setting up a multi-tiered ecosystem. Instead we will install MySQL, Apache, and PHP in our instance, knowing that when we write our application we’ll be sure to structure the code such that we can change our data source easily.

First, make sure we can do anything we want on this box by launching an interactive shell with administrator privileges.

ubuntu@ip-10-112-58-53:~$ sudo -i

Next, install MySQL via apt-get. We will be prompted to choose and verify a root password for MySQL along the way.

root@ip-10-112-58-53:~# apt-get install mysql-server mysql-client

Then install Apache via apt-get.

root@ip-10-112-58-53:~# apt-get install apache2

Of course we also want to install PHP and the corresponding Apache module.

root@ip-10-112-58-53:~# apt-get install php5 libapache2-mod-php5

Finally, we need to install at least the php5-mysql package. I like to install a few more… use apt-cache search php5 to find the packages you want.

root@ip-10-112-58-53:~# apt-cache search php5
root@ip-10-112-58-53:~# apt-get install php5-mysql php-pear php5-cgi php5-cli php5-common php5-curl php5-gd php5-gmp php5-ldap php5-odbc php5-pgsql php5-snmp php5-sqlite php5-xmlrpc php5-xsl php5-imagick

Restart Apache after all the new packages are installed.

root@ip-10-112-58-53:~# service apache2 restart
 * Restarting web server apache2
 ... waiting    ...done.

After we’re done, we should do a sanity check to make sure everything is configured correctly. Create a file called phpinfo.php in the web root with the following contents:

<?php
phpinfo();

Now is the moment of truth. Take the Public DNS entry we used before, paste it into a web browser and visit the file you just created. Hopefully we’ll to see the output of phpinfo().

A phpinfo Page

Dividends Paid

We’re not done just yet! We’ve worked hard to build a solid baseline LAMP stack, so let’s create our own AMI so we can start an identical instance to the one we’ve just configured. To do so, we use ec2-create-image.

MacBook-Pro:.ec2 john2$ ec2-create-image i-c795bfa6 -n lamp-starter
IMAGE	ami-43b5752a

Click on AMIs in the IMAGES section of the EC2 Management Console and we should see our image.

AWS Management Console

Now that we’ve successfully gone from zero to cloud, let’s have a little fun and pretend we’ve built a multi-tiered web application that has gone live and is tremendously successful. Assuming we’ve architected the application appropriately, and ignoring the necessary load balancing setup, we could launch 10 new web servers with a few key presses.

MacBook-Pro:.ec2 john2$ ec2-run-instances -k john2.kp --instance-type m1.large -n 10 ami-43b5752a
RESERVATION	r-4f433b20	582155754520	default
INSTANCE	i-2daa9f4c	ami-43b5752a			pending	john2.kp	0		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-2faa9f4e	ami-43b5752a			pending	john2.kp	1		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-31aa9f50	ami-43b5752a			pending	john2.kp	2		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-33aa9f52	ami-43b5752a			pending	john2.kp	3		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-35aa9f54	ami-43b5752a			pending	john2.kp	4		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-37aa9f56	ami-43b5752a			pending	john2.kp	5		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-3baa9f5a	ami-43b5752a			pending	john2.kp	6		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-3daa9f5c	ami-43b5752a			pending	john2.kp	7		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-3faa9f5e	ami-43b5752a			pending	john2.kp	8		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default
INSTANCE	i-01aa9f60	ami-43b5752a			pending	john2.kp	9		m1.large	2011-08-22T04:49:45+0000	us-east-1a	aki-427d952b			monitoring-disabled					ebs				paravirtual	xen		sg-f5a0899c	default

You’ll see this action reflected in your console, and you’ll understand why Amazon asked for your credit card information up front.

AWS Management Console

This concludes our three part series on setting up a development sandbox with Amazon EC2. We started with our head in the clouds and ended with an AMI in the cloud. Amazon is a surprisingly cheap sandbox so long as you are mindful of your usage. Turn instances off when they’re not in use and be sure to familiarize yourself with their pricing.

Image via Lightspring / Shutterstock

From Zero to Cloud: Setting Up an EC2 Sandbox

<< From Zero to Cloud: Setting Up an EC2 Sandbox, Part 1<< From Zero to Cloud: Setting Up an EC2 Sandbox, Part 2

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • Steve Robillard

    I really appreciated this series, it came at just the right time. One note however, long code samples end up truncated (see the first line of the last example – launching multiple copies of you image). All I can read is this:

    MacBook-Pro:.ec2 john2$ ec2-run-instances -k john2.kp –instance-type m1.lar

    nor does it allow me to copy the code to my clipboard as a workaround.

    • http://about.me/degzhaus John Degner

      Glad you liked it Steve! I actually noticed this myself and will follow up in getting a resolution for you. In the meantime, you can click and drag, or double click a long line then copy it to your clipboard.

      Hope this helps!
      John

  • http://www.calendee.com Justin Noel

    Perhaps you could carry this post a bit further? It’s important that everyone realize that stopping an EC2 instance causes data loss. If the DB is not storing the data somewhere else (S3, EBS for example), the data disappears. Perhaps you could extend this tut to cover setting up an EBS and making sure the db writes to it.

    • http://about.me/degzhaus John Degner

      Good point, Justin! We do have some further articles including one on S3 coming soon! This series was focused on building a sandbox, not a production system.

      Thanks for the feedback!
      John

  • Nate

    Where’d pt 2 and 1 go?