I recently started prototyping an application on App Engine and quickly realized I'd rather be on Amazon infrastructure instead. The vendor lock in is extremely bad, but more concerning to me is how complicated their pricing is. It seems like it's nearly impossible to estimate your costs until you have real traffic, and by then you are locked in.
Take their datastore pricing for example:
Read / Write 0.06 per 100,000 operations
but what actual constitutes a read/write depends entirely on the operation
Entity Get (per entity) 1 read
New Entity Put (per entity, regardless of entity size) 2 writes + 2 writes per indexed property value + 1 write per composite index value
Existing Entity Put (per entity) 1 write + 4 writes per modified indexed property value + 2 writes per modified composite index value
Entity Delete (per entity) 2 writes + 2 writes per indexed property value + 1 write per composite index value
Query* 1 read + 1 read per entity retrieved
It seems like it can get expensive very quickly, and that's just the datastore operations, it doesn't include the datastore storage or anything else you are billed for like instance hours or traffic.
You can download the data from the data store and import it into another database. Sure you would need to write some code to interact with the new data services, but had you not deployed to app engine in the first place you would have had to write that code anyway. All the other APIs are optional and if you are worried about vendor lock in then implement them yourself (again something which you would have to do if not on app engine).
If you are on App Engine though chances are you will use the other APIs like the Taasks API. If you run your own software stack instead you can move it wherever without rewriting any code. With App Engine you either rewrite your code or use app scale.
Take their datastore pricing for example:
Read / Write 0.06 per 100,000 operations
but what actual constitutes a read/write depends entirely on the operation
Entity Get (per entity) 1 read
New Entity Put (per entity, regardless of entity size) 2 writes + 2 writes per indexed property value + 1 write per composite index value
Existing Entity Put (per entity) 1 write + 4 writes per modified indexed property value + 2 writes per modified composite index value
Entity Delete (per entity) 2 writes + 2 writes per indexed property value + 1 write per composite index value Query* 1 read + 1 read per entity retrieved
It seems like it can get expensive very quickly, and that's just the datastore operations, it doesn't include the datastore storage or anything else you are billed for like instance hours or traffic.