|Google App Engine Logo|
Google App Engine and Amazon Web Services (AWS) are entirely different animals. So, comparing the two is not 100% straight forward; and I think that's on purpose. Amazon gives you one or more virtual computers in their "cloud" on demand along with services to accompany your virtual environment. Google App Engine, on the other hand is all about
just running applications; much of the details of how those applications are deployed and run is hidden from the end user/developer.
For an overview of EC2 and how to setup an EC2 instance on AWS, see my Amazon EC2: Moving to the Cloud post.
Amazon allows you to run whatever kind of applications you want in AWS. Google restricts your applications to either Python or Java. The catch with Amazon is that you have to setup the environment (or find an EC2 instance that's pre-built with what you want) to host any applications that you want to run. For example, if you wanted to run a Java web application on AWS then you would have to install JBoss or some other Java application server on an EC2 instance. With Google App Engine, you are provided with the Java hosting environment without having (or being able) to dig into the details of how the application server is setup.
Google App Engine is also priced quite a bit different from AWS. Amazon bills you based on the time you spend using it's services whereas Google App Engine bills you based on the number of applications you host and level of service that you need. They have a very simple tiered pricing structure. For more information on Google App Engine pricing and AWS pricing, see the following links.
Google App Engine Pricing
AWS EC2 Pricing
Setting up a Google App Engine account and deploying an application to Google App Engine is quite a bit easier than AWS, and anyone can setup a free account. I haven't used the Python runtime, but I have used the Java runtime on Google App Engine. And I found it to be very simple for low to medium complexity Java web applications. For a basic web application, you need only include the appengine-api-*.jar in the WEB-INF/lib directory of your WAR and your appengine-web.xml file in the WEB-INF directory of your WAR as detailed HERE.
The nice part about Google App Engine is that in most cases, you can literally run a the exact same WAR on Tomcat or JBoss (or pick you Java servlet container) and in Google App Engine without any modification. The bad part about Google App Engine is that some key components are not supported. For instance, JAXB is not supported. So, you can forget about running Axis2 on Google App Engine. EJB's are also not supported. So, many existing Java EE applications will not be able to run on Google App Engine without modification.
JDBC is also not supported. The reason behind the lack of JDBC is that Google App Engine does not provide an available relational database. Instead, JPA or JDO can be used to communicate with a backing store. For a complete list of what is supported and what is not supported in Java for Google App Engine, see http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine
Google App Engine looks like it can be a cool solution for small to medium web applications. However, if you are considering migrating existing applications to Google App Engine then some care should be taken to ensure that it is fully compatible. More complex applications will likely have difficulty migrating to Google App Engine.
So, how does Google App Engine stack up against Amazon Web Services? I actually think it stacks up well. And it differentiates itself enough both with its offering and its pricing to make it a strong contender against AWS EC2 for some cases. Google is trying to carve itself an interesting niche in the cloud computing market. And if I were a Java or Python shop looking for lower cost cloud services for basic to moderately complex application hosting, I think I would definitely have to look at Google App Engine.