I would like to add a custom domain to a module other than the default one in Google App Engine Managed VMs. For example, I have the following sub-domains:
listed in the application console:
api.example.com points to the default module. And I would like the other domain
admin.example.com to point to the module
admin. However, by merely adding the custom domain in the settings, both
admin.example.com are pointed to the same module: the default module. Then how to point the custom domain and route the traffic to the
admin module? The answer is on the dispatch file. But first need to understand the concept of modules in Google App Engine.
Source: Google App Engine Docs
The above chart illustrates the architecture of a Google App Engine application:
- Application: “An App Engine application is made up of one or more modules”. 
- Module: “Each module consists of source code and configuration files. The files used by a module represents a version of the module. When you deploy a module, you always deploy a specific version of the module.”  “All module-less apps have been converted to contain a single default module.”  Every application has a single default module.
- Version: “A particular module/version will have one or more instances.”
- Instance: “Each instance runs its own separate executable.”
Another concept is the resource sharing:
- “App Engine Modules let developers factor large applications into logical components that can share stateful services and communicate in a secure fashion.” 
- “Stateful services (such as Memcache, Datastore, and Task Queues) are shared by all modules in an application.” 
Remember that Google Cloud Platform is project based. If there are a web application and a mobile application, and they are both making requests to another application, the API. Then there should be three projects. However, in this case, both
admin share the same services, such as the same database and file storage. We should put them together in the same application as separate modules.
With that in mind, how to route requests to a specific module? “Every module, version, and instance has its own unique URI (for example,
v1.my-module.my-app.appspot.com). Incoming user requests are routed to an instance of a particular module/version according to URL addressing conventions and an optional customized dispatch file.”  Since a custom domain is used, we have to use the customized dispatch file. And this is done by creating a dispatch file
dispatch.yml to route requests based on URL patterns.
application field is not necessary, otherwise, you will get:
Glob characters (such as asterisk) can be used, and support up to 10 routing rules.
Deploy the dispatch file is simple:
And it should require almost no time to wait. Once it is ready, the requests sent to
admin.example.com will be routed properly to the
Here is the gcloud versions tested: