http://aws.amazon.com/cloudformation/aws-cloudformation-temp...
Look at "Application Framework Examples" and the templates for "A simple Ruby on Rails "Hello World" application" to start. You can build your whole stack with a single click.
Later on, if you decide you want to be devops instead of dev, you can learn about how these templates were written. Go here to roll your own:
http://aws.amazon.com/cloudformation/aws-cloudformation-arti...
In the meantime, keep learning Rails and node, and let AWS Cloud Formation set the servers up for you. That's sort of the point of the cloud.
following other people companies who are using AWS can be a great way discover ways of using AWS. Netflix operates a great blog. http://techblog.netflix.com/
If you're interested in in just renting a server, and putting Wordpress on it, there are tutorials for that, and you'll have to deal with setting up a web server, domain name etc... But perhaps you're interested in learning about how build out a scalable protein folding cluster, and the set of challenges will be completely different. AWS only provides the hardware and you must create whatever you wish to implement.
AWS can build your stack (DNS, servers, DB, LB, etc) for you using "Cloud Formation":
http://aws.amazon.com/cloudformation/aws-cloudformation-temp...
Look at "Application Framework Examples" and the templates for "A simple Ruby on Rails "Hello World" application" to start. You can build your whole stack with a single click.
Later on, if you decide you want to be devops instead of dev, you can learn about how these templates were written. Go here to roll your own:
http://aws.amazon.com/cloudformation/aws-cloudformation-arti...
EC2 itself just provides blank virtual machines and gives you full control over them. At a high-level, you'll be setting up your web server and db, pulling your application code, and running it. It's really not too dissimilar from setting up your app on your local machine.
The complexity around EC2 comes from the need to scale an application. Then you'll want to add load-balancers and more instances. While you can add these by the GUI console, you'll want to learn to use the EC2 Command Line tools[2] or the API via a library like Boto[3]. You may want to look through Amazon's suggested architectures to understand how to put these tools into play[4].
[1] http://www.heroku.com [2] http://aws.amazon.com/developertools/351 [3] https://github.com/boto/boto [4] http://aws.amazon.com/architecture/
For those that are familiar with the command line and remote servers, but new to EC2, Flurdy's tutorials are pretty solid
Besides that if you plan on making any public AMIs, the blog posts by Eric Hammond of Alestic are required reading and his example github repo for this task should be checked out.
One attitude to take when using Infrastructure as a Service (IaaS) is to always expect failure - nodes can easily disappear when a problem occurs and take out your entire website.
The best backup plan you can have for this is to capture the entire configuration of your stack in some version controlled way. One of the tools I use for this falls under the domain of "configuration management", with the best products being Chef[1] or Puppet[2], or just writing a normal bash script that installs your Rails stack and checks out your code from github.
When utilizing these technologies, I usually do the following:
1. Create a virtual image that has your CM tools + dependencies installed on it. 2. Add a bootstrap script that runs at boot (usually /etc/rc.local on Linux). This script will acquire and parse user-data[3] that is provided in the provisioning request to EC2[4], an then kick off your main configuration logic. 3. Capture the image and use it as your base image that you perform deployments from.
Feel free to let me know if you have any questions with this method! It's a bit overkill at the learning phases of IaaS clouds and OS administration, but it will save you a TON of time down the road as a programmer.
[1] Chef: http://www.opscode.com/chef/ [2] Puppet: http://puppetlabs.com [3] http://docs.amazonwebservices.com/AWSEC2/2007-03-01/Develope... [4] This user-data should contain runtime arguments that your configuration scripts can use to run properly (e.g. a specific git commit version or the hostname of your database node).
Do you want guides to the EC2 API?
A linode VPS is just a standard linux server, while EC2 has lots of quirks.
For instance, AWS/EC2 has a variety of types of storage, and their persistence properties aren't always what you'd expect. So, EC2 requires you learn how to run a linux server plus a bunch of AWS specific stuff. Linode only requires basic linux administration skills.
If you are set on EC2, I found boto very useful for keeping track of my AWS resources.
PS: I have started using EC2 in the past few months only. Their forums are also pretty informative and supportive.
We also have a community of cloud experts that contributed on a weekly basis best practices, case studies and bunch of AWS goodies. http://www.newvem.com/amazon-cloud-knowledge-center/
This is what I found useful when I was first setting up Node.js on EC2.