Actually, I have a question. Why not just any old container on the back-end, and mostly focus on the protocol between the web browser and the backend? Why are you bothering to build an abstraction layer between the cloud service provider and your VM?
1. I want developers to have a unified, integrated API. For example, the UI controls can connect to a database object and get data change notifications. That makes it easy to, e.g., show a table control that updates when rows change.
2. I want to (eventually) handle data and processing that exceeds a single node's capacity. For example, a map function over an array should automatically be distributed over as many cores/machines as needed. In a sense, the program should be able to tap into as many resources as it needs/can afford without special code.
Of course, I could have done both of those things in different ways, without a unified platform layer, but where's the fun in that?