Python 2.7 has reached end of supportand will bedeprecatedon January 31, 2026. After deprecation, you won't be able to deploy Python 2.7applications, even if your organization previously used an organization policy tore-enable deployments of legacy runtimes. Your existing Python2.7 applications will continue to run and receive traffic after theirdeprecation date. We recommend thatyoumigrate to the latest supported version of Python.

An Overview of App Engine

Region ID

TheREGION_ID is an abbreviated code that Google assignsbased on the region you select when you create your app. The code does notcorrespond to a country or province, even though some region IDs may appearsimilar to commonly used country and province codes. For apps created after February 2020,REGION_ID.r is included in App Engine URLs. For existing apps created before this date, the region ID is optional in the URL.

Learn moreabout region IDs.

An App Engine app is made up of a single application resourcethat consists of one or moreservices. Each service can be configured to usedifferent runtimes and to operate with different performance settings. Withineach service, you deployversions of that service. Each version then runswithin one or moreinstances, depending on how much traffic you configured itto handle.

Components of an application

Your App Engine app is created under your Google Cloud project when youcreate anapplication resource. The App Engineapplication is a top-level container that includes the service, version, andinstance resources that make up your app. When you create yourApp Engine app, all your resources are created in theregion that you choose, including your app codealong with a collection of settings, credentials, and your app's metadata.

Each App Engine application includes at least one service, thedefaultservice, which can hold many versions, depending on your app's billing status.For more information, seeLimits below.

The following diagram illustrates the hierarchy of an App Engineapp running with multiple services. In this diagram, the app has two servicesthat contain multiple versions, and two of those versions are actively runningon multiple instances:

Hierarchy graph of an app's services, versions, and instances

Other Google Cloud services, for example Datastore, areshared across your App Engine app. For more information, seeStructuring webservices.

Services

Useservices in App Engine to factor your large apps into logicalcomponents that can securely share App Engine features and communicatewith one another. Generally, your App Engine services behave likemicroservices.Therefore, you can run your whole app in a single service or you can design anddeploy multiple services to run asa set of microservices.

For example, an app that handles your customer requests might include separateservices that each handle different tasks, such as:

  • API requests from mobile devices
  • Internal, administration-type requests
  • Backend processing such as billing pipelines and data analysis

Each service in App Engine consists of the source code from your app andthe corresponding App Engine configuration files. The set of files thatyou deploy to a service represent a singleversion of that service and eachtime that you deploy to that service, you are creating additional versionswithin that same service.

Versions

Having multiple versions of your app within each service allows you to quicklyswitch between different versions of that app for rollbacks, testing, or othertemporary events. You can route traffic to one or more specific versions of yourapp bymigrating orsplittingtraffic.

Instances

The versions within your services run on one or moreinstances.By default, App Engine scales your app to match the load. Your apps willscale up the number of instances that are running to provide consistentperformance, or scale down to minimize idle instances and reduces costs.For more information about instances, seeHow Instances areManaged.

Application requests

Each of your app's services and each of the versions within those services musthave a unique name. You can then use those unique names to target and routetraffic to specific resources using URLs, for example:

https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

Note that the combined length ofVERSION-dot-SERVICE-dot-PROJECT_ID, whereVERSION is the name of your version,SERVICE is the name of your service, andPROJECT_ID is your project ID, cannot be longer than 63 characters and cannot start or end with a hyphen. If the combined length islonger than 63 characters, you might see ErrorDNS address could not be found.

Incoming user requests are routed to the services or versions that areconfigured to handle traffic. You can also target and route requests to specificservices and versions. For more information, seeHandling Requests.

Logging application requests

When your application handles a request, it can also write its own loggingmessages tostdout andstderr. For details about your app's logs, seeWriting ApplicationLogs.

Limits

The maximum number of services and versions that you can deploy depends on yourapp's pricing:

LimitFree appPaid app
Maximum services per app5210
Maximum versions per app15210

There is also a limit to the number of instances for each service with basic ormanual scaling:

Maximum instances per manual/basic scaling version
Free appPaid app USPaid app EU
2025 (200 forus-central)25

There is also a limit to the number of characters in the URL of yourapplication.

DescriptionLimit
Maximum characters in Project URL forVERSION-dot-SERVICE-dot-PROJECT_ID URL63

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-15 UTC.