Quantcast
Channel: Planet Apache
Viewing all articles
Browse latest Browse all 9364

Christian Grobmeier: Upgrading an EC2 instance from m1.micro to something bigger

$
0
0

Time & Bill has grown. I have started with an m1.micro instance from Amazon AWS EC2 which was available for free for one 1 year. But now these period is ending and I have considered to stay or to move to other services. For example, Jiffy Box came to my mind. But calculating a little bit, Jiffy is not much cheaper than Amazon EC2 when you use reserved instances (and calculate for a year). Google App Engine tied me to much to the Google SDK and honestly I want more access to my database. Google Computing Engine is restricted to a small amount of people and so I cannot use it. I like RedHats OpenShift and will consider going there later, but for now it still needs to grow and improve. So, finally I decided to stick with Amazon AWS because of the great tools and services available.

Now the problem was to upgrade to a bigger instance as sometimes it was not really funny anymore when it came to performance.

I decided to install the Commandline Tools. Basically this is downloading the package and putting it on your path. I do that with writing the following into ~/.profile

export EC2_HOME=/path/to/ec2-api-tools-1.5.6.0
export PATH=/path/to/ec2-api-tools-1.5.6.0/bin:$PATH

On Mac OS X you have to set your JAVA_HOME variable. You don’t need that very often these days. It can achieved very easily with putting this into your .profile too:

export JAVA_HOME=$(/usr/libexec/java_home)

Now you should already be able to use the client tools, when you source .profile. You will recognize that you need to authenticate against AWS to use these tools. It took me a little to find out that the keys I created for my EC2 instance are not the same I need to access with the CLI tools. You need to create keys on the security page. I uploaded my X.509 cert and as I only work with one AWS account, I could reference these keys in my .profile file too:

export EC2_PRIVATE_KEY=/path/to/pk-AAAAAAAA.pem
export EC2_CERT=/path/to/cert-AAAAAAAA.pem

Now I am able to easily access AWS.

One thing I found out was, that I needed to sync my computers clock automatically. If you don’t do that, you’ll run into that error:

$ ec2-describe-regions
Client.InvalidSecurity: Request has expired

Once you synced the clock, it takes a few minutes then it will look better:

$ ec2-describe-regions
REGION	eu-west-1	ec2.eu-west-1.amazonaws.com
REGION	sa-east-1	ec2.sa-east-1.amazonaws.com
REGION	us-east-1	ec2.us-east-1.amazonaws.com
REGION	ap-northeast-1	ec2.ap-northeast-1.amazonaws.com
REGION	us-west-2	ec2.us-west-2.amazonaws.com
REGION	us-west-1	ec2.us-west-1.amazonaws.com
REGION	ap-southeast-1	ec2.ap-southeast-1.amazonaws.com

Now it is time stop my EC2 instance, upgrade it to a new type and restart it again.
I found out what my instance id is (looked at the web console, but surely there is a CLI trick too).

Then I tried:

$ ec2-stop-instances i-123456
Client.InvalidInstanceID.NotFound: The instance ID 'i-123456' does not exist

Well… I was sure this ID was there. Somewhere I found the tip to apply a region. I copied the region from the web console:

$ ec2-stop-instances i-123456 --region eu-west-1a
Unknown host: 'https://ec2.eu-west-1a.amazonaws.com'

Looking at the available regions, well, eu-west-1a should be eu-west-1 (without a).

This finally worked well:

$ ec2-stop-instances i-123456 --region eu-west-1
INSTANCE	i-123456	running	stopping

Quickly I “upgraded” the size of my instance:

$ ec2-modify-instance-attribute --instance-type m1.small i-123456 --region eu-west-1
Client.IncorrectInstanceState: The instance 'i-123456' is not in the 'stopped' state.

Ups – please wait a little time, otherwise you’ll get that above. A few seconds later I was able to perform that change:

$ ec2-modify-instance-attribute --instance-type m1.small i-123456 --region eu-west-1
instanceType	i-123456	m1.small

And now we need to start the instance again:

$ ec2-start-instances i-123456 --region eu-west-1
INSTANCE	i-123456	stopped	pending

Very well – the instance was starting up again as I could see on the web console. After it started, my app was not reachable. This happened because the elastic IP i had was not longer associated with my instance. Once I fixed that, everything went well and was available as usual.

That being said, I am deeply impressed by all that technology. I would prefer not do deal with such low level details and work a little bit more in the direction of OpenShift, which lets me deal only with my app (PaaS). But well, Amazon EC2 is now – OpenShift is tomorrow. Let’s see what the new day brings.


Viewing all articles
Browse latest Browse all 9364

Trending Articles