Posted by Wesley Chun (@wescpy), Developer Advocate, Google Cloud
Today we're introducing the first video showing long-time App Engine developers how to migrate
from the App
Engine ndb client library that connects to Datastore. While the legacy App Engine
ndb
service is still available for Datastore access, new features and
continuing innovation are going into Cloud
Datastore, so we recommend Python 2 users switch to standalone product client
libraries like Cloud
NDB.
This video and its corresponding codelab show developers how to migrate the sample app introduced in a previous video and gives them hands-on
experience performing the migration on a simple app before tackling their own applications. In
the immediately preceding "migration module" video, we transitioned that app from App
Engine's original webapp2
framework to Flask, a popular framework in
the Python community. Today's Module 2 content picks up where that Module 1 leaves off,
migrating Datastore access from App Engine ndb
to Cloud NDB.
Migrating to Cloud NDB opens the doors to other modernizations, such as moving to other standalone services that succeed the original App Engine legacy services, (finally) porting to Python 3, breaking up large apps into microservices for Cloud Functions, or containerizing App Engine apps for Cloud Run.
App Engine's Datastore matured to becoming
its own standalone product in 2013, Cloud Datastore. Cloud NDB is the replacement
client library designed for App Engine ndb
users to preserve much of
their existing code and user experience. Cloud NDB is available in both Python 2 and 3,
meaning it can help expedite a Python 3 upgrade to the second
generation App Engine platform. Furthermore, Cloud NDB gives non-App
Engine apps access to Cloud Datastore.
As you can see from the screenshot below, one key difference between both libraries is that
Cloud NDB provides a context manager, meaning you would use the Python
with
statement in a similar way as opening files but for Datastore
access. However, aside from moving code inside with
blocks, no other
changes are required of the original App Engine ndb
app code that
accesses Datastore. Of course your "YMMV" (your mileage may vary) depending on the complexity
of your code, but the goal of the team is to provide as seamless of a transition as possible
as well as to preserve "ndb
"-style access.
The "diffs" between the App Engine ndb and Cloud NDB versions of the sample app
To try this migration yourself, hit up the corresponding codelab and use the video for guidance. This Module 2 migration sample "STARTs" with the Module 1 code completed in the previous codelab (and video). Users can use their solution or grab ours in the Module 1 repo folder. The goal is to arrive at the end with an identical, working app that operates just like the Module 1 app but uses a completely different Datastore client library. You can find this "FINISH" code sample in the Module 2a folder. If something goes wrong during your migration, you can always rollback to START, or compare your solution with our FINISH. Bonus content migrating to Python 3 App Engine can also be found in the video and codelab, resulting in a second FINISH, the Module 2b folder.
All of these learning modules, corresponding videos (when published), codelab tutorials, START and FINISH code, etc., can be found in the migration repo. We hope to also one day cover other legacy runtimes like Java 8 and others, so stay tuned! Developers should also check out the official Cloud NDB migration guide which provides more migration details, including key differences between both client libraries.
Ahead in Module 3, we will continue the Cloud NDB discussion and present our first optional migration, helping users move from Cloud NDB to the native Cloud Datastore client library. If you can't wait, try out its codelab found in the table at the repo above. Migrations aren't always easy; we hope this content helps you modernize your apps and shows we're focused on helping existing users as much as new ones.