We are in the middle of the migration. It is a horrible experience.
We tried to break it into small steps.
Still in python2, we first replaced memcache with redis and replaced search with elasticsearch. These steps were do-able.
Next we tried to make the python2 code compatible with python3 using futurize. Had a lot of problems with future_builtins and unicode, so we futurized except those.
After that we tried to migrate to Cloud Tasks, but that failed horrible because of the lack of transactional tasks. Our application heavily relies on that.
We thought up a solution, but that required the migration to Cloud ndb. So we have to combine these two steps.
That is where we currently are. Fighting with Cloud Tasks, Cloud NDB, namespaces, and getting it running using python3 on a local machine.
The most annoying thing is that there is no local Task Emulator available, and no Datastore Emulator viewer available.