In November 2016 GAE Flex went Beta, and since some changes were introduced I want to write my thoughts about it, but first I want to rewind and go to the beginning.
Back to the future
In March 2014 at Google Cloud Platform event Managed VM were announced. Idea was simple yet powerful. Since the beginning main criticism of Google App Engine if I may say so was it's restrictiveness, sandbox, which means that for particular runtime, not all standard libraries in language (Python, Java...) are possible to use, or even some third party libraries. This discouraged lot of people from using GAE, although it has many excellent features as well, like autoscaling, easy deployment, many integrated services which make development of web applications easier.
Other alternative is to use normal virtual machine (Google Compute Engine), which means almost infinite flexibility but on the other hand installing everything, setup & administration, configuring load balancer and who knows what not... basically almost need extra person who handles everything regarding Ops :).
with Managed VMs you got best from both worlds. Extended flexibility regarding software and libraries you can use but still keeping auto scaling. Main feature regarding Managed VMs is use of Docker containers. Your code runs in Docker container and Google takes care that it's deployed corectly and that it serves requests. If necessary (and based on configuration), additional instances are created.
I admit I didn't have opportunity to use Managed VMs in some real life project except usual try & play. But in my head I had always this idea that "Managed VMs EXTENDS Standard GAE", I purposely emphasize word extend by which I understand keeping same functionality as in Standard environment but also providing extra flexibility (use of third party/binary libraries).
Time went by, I don't event remember when it was renamed from Managed VMs to Flexible Environment, anyway I had this year practical use case where I wanted to try out Flexible environment but was kinda not so super excited and I wrote about my experience here.
When I read Flex beta announcement (received by email) I couldn't believe my eyes. Support for Standard GAE services (datastore, taskqueues, memcache etc) was gone in Flex. That means that if you want to use Flexible environment and communicate with Standard GAE services you need to use web API or client libraries. That's about as much regarding extending GAE. If you want to use Flexible environment as standalone than you are fine. Of course you can separate your app into (micro)services but I feel on local computer it doesn't work well together. Client libraries for different GCP products are under development, so checkout if they work for you. I guess it would be too much convenient in Flex to have all standard service libraries using as in Standard env. I almost shed a tear for lack of this I confess. On the other hand it's interesting how sometimes takes for product/service to crystalize it's path as it was case for Managed VM/GAE Flex
Back to the future 2
So let's see what can we expect from Flexible GAE as of Beta.
- Instances are created across multiple zones in a region
- Custom machine types. This means you can configure granularly CPU, RAM and disk resources as you wish, no need to conform to standard GCE machine types.
- In yaml settings file "flex: true" should be used to indicate flexible environment
- Finalized list of official flex runtimes/images. for Python for example, now there is only one runtime (both for 2.7 and 3.4)
20.24$ per month with sustainable usage discount GCE Custom type -> 1 Core/ 1GB RAM
43.58$ per month (unfortunately no sustainable usage discount :) ) GAE Flex -> 1 Core/ 1GB RAM
176.44$ per month or $0.3 per hour (with free daily instance hours included) GAE Standard -> F4_1G/B4_1G instance type (2.4GHz (which is as 1 virtual CPU core I assume) and 1GB memory
So yes, GAE Flex fall in between GAE Standard and GCE also in terms of pricing.
In the end with more choices potentially more confusion can arise. So select environment according to your needs and future development, there is no other (simple) way than to study out documentation or get advice from somebody.
To have better understanding and get more info, check out official documents: