Posted by Wesley Chun (@wescpy), Developer Advocate, Google Cloud
Introduction
Not too long ago, we mentioned containerizing App Engine apps for Cloud Run, with or with out Docker. However what about Cloud Features… can App Engine customers make the most of that platform one way or the other? Again within the day, App Engine was at all times the proper determination, as a result of it was the solely choice. With Cloud Features and Cloud Run becoming a member of within the serverless product suite, that is not the case.
Again when App Engine was the one alternative, it was chosen to host small, single-function apps. Sure, when it was the one choice. Different builders have created large monolithic apps for App Engine as properly… as a result of it was additionally the one choice. Quick ahead to right now the place code follows extra service-oriented or event-driven architectures. Small apps might be moved to Cloud Features to simplify the code and deployments whereas giant apps might be break up into smaller parts, every working on Cloud Features.
Refactoring App Engine apps for Cloud Features
Small, single-function apps might be seen as a microservice, an API endpoint “that does one thing,” or serve some utility doubtless known as because of some occasion in a bigger multi-tiered software, say to replace a database row or ship a buyer electronic mail message. App Engine apps require some type internet framework and routing mechanism whereas Cloud Operate equivalents might be free of a lot of these necessities. Refactoring these kinds of App Engine apps for Cloud Features will like require much less overhead, helps ease upkeep, and permit for frequent parts to be shared throughout functions.
Massive, monolithic functions are sometimes made up of a number of items of performance bundled collectively in a single massive bundle, akin to requisitioning a brand new piece of apparatus, opening a buyer order, authenticating customers, processing funds, performing administrative duties, and so forth. By breaking this monolith up into a number of microservices into particular person capabilities, every part can then be reused in different apps, upkeep is eased as a result of software program bugs will determine code nearer to their root origins, and builders will not step on every others’ toes.
Migration to Cloud Features
On this newest episode of Serverless Migration Station, a Serverless Expeditions mini-series centered on modernizing serverless apps, we take a more in-depth have a look at this product crossover, protecting methods to migrate App Engine code to Cloud Features. There are a number of steps you could take to organize your code for Cloud Features:
- Divest from legacy App Engine “bundled companies,” e.g., Datastore, Taskqueue, Memcache, Blobstore, and many others.
- Cloud Features helps trendy runtimes; improve to Python 3, Java 11, or PHP 7
- In case your app is a monolith, break it up into a number of impartial capabilities. (You can even hold a monolith collectively and containerize it for Cloud Run in its place.)
- Make acceptable software updates to assist Cloud Features
The primary three bullets are outdoors the scope of this video and its codelab, so we’ll deal with the final one. The adjustments wanted to your app embrace the next:
- Take away unneeded and/or unsupported configuration
- Take away use of the online framework and supporting routing code
- For every of your capabilities, assign an acceptable identify and set up the request object it would obtain when it’s known as.
Concerning the final level, word that you may have a number of “endpoints” coming right into a single operate which processes the request path, calling different capabilities to deal with these routes. You probably have many capabilities in your app, separate capabilities for each endpoint turns into unwieldy; if giant sufficient, your app could also be extra suited to Cloud Run. The pattern app on this video and corresponding code pattern solely has one operate, so having a single endpoint for that operate works completely fantastic right here.
This migration sequence focuses on our earliest customers, beginning with Python 2. Concerning the primary level, the
app.yaml
file is deleted. Subsequent, virtually all Flask sources are eliminated apart from the template renderer (the app nonetheless must output the identical HTML as the unique App Engine app). All app routes are eliminated, and there is not any instantiation of the Flaskapp
object. Lastly for the final step, the primary operate is renamed extra appropriately tovisitme()
together with a request object parameter.This “migration module” begins with the (Python 3 model of the) Module 2 pattern app, applies the steps above, and arrives on the migrated Module 11 app. Implementing these required adjustments is illustrated by this code “diff:”
Migration of pattern app to Cloud Features Subsequent steps
In case you’re fascinated with attempting this migration by yourself, be happy to attempt the corresponding codelab which leads you step-by-step by this train and use the video for extra steering.
All migration modules, their movies (when revealed), codelab tutorials, START and FINISH code, and many others., might be discovered within the migration repo. We hope to additionally someday cowl different legacy runtimes like Java 8 in addition to content material for the next-generation Cloud Features service, so keep tuned. In case you’re curious whether or not it is potential to write down apps that may run on App Engine, Cloud Features, or Cloud Run with no code adjustments in any respect, the reply is sure. Hope this content material is helpful to your consideration when modernizing your individual serverless functions!