Most of the functionality provided by the legacy bundled services is now provided by the Cloud Client Libraries. For more information, see the recommended alternatives listed below.
If migrating to an unbundled solution is not an option for your project, then you may be able to continue using legacy bundled services in your Java 11/17 apps as a fallback. This approach gives you flexibility to move to unbundled services later in the migration cycle.
After you migrate off of legacy bundled services, you can continue using App Engine or migrate to Cloud Run. Cloud Run is designed to improve upon the App Engine experience, and incorporates many of the best features of both the standard environment and the flexible environment. To compare features and understand how to migrate, see the App Engine and Cloud Run comparison guide.
Migration paths for App Engine bundled services
Blobstore
To store and retrieve data, use Cloud Storage through the Cloud Client Libraries. To get started, see Using Cloud Storage.
Datastore
You can use Firestore in Datastore mode as an alternative to the Datastore API. Firestore is the newest version of Datastore, and we recommend using the Cloud Client Libraries for Datastore.
Images
You can serve images from Cloud Storage, serve them directly, or use a third-party content delivery network (CDN).
To resize, convert, and manipulate images, use an image processing library such as ImageJ2, imgscalr, or thumbnailator
To use one of these third-party libraries, add the library as a dependency and update your code to call the library's APIs.
The App Engine Images service also provided functionality to avoid dynamic requests to your application by handling image resizing using a serving URL. If you want similar functionality, you can generate the re-sized images ahead of time and upload them to Cloud Storage for serving. Alternatively, you could use a third-party content delivery network (CDN) service that offers image resizing.
Logging
We recommend that you update your app to use Cloud Logging, which supports
features such as viewing logs in the Logs Explorer, downloading logs,
filtering messages by severity, and correlating app messages with specific
requests. Alternatively, if you prefer simplicity over data accuracy, you can write structured logs to stdout
or stderr
.
For more information, see
Writing and viewing logs.
To send email, use a third-party mail provider such as SendGrid, Mailgun, or Mailjet. All of these services offer APIs to send emails from applications. A recommended third-party alternative for inbound messaging is not available at this time.
Memcache
To cache application data, use Memorystore for Redis.
Modules
To obtain information and modify your application's running services, use a combination of environment variables and the App Engine Admin API:
Service information | How to access |
---|---|
Current application ID | GAE_APPLICATION environment variable |
Current project ID | GOOGLE_CLOUD_PROJECT environment variable |
Current service name | GAE_SERVICE environment variable |
Current service version | GAE_VERSION environment variable |
Current instance ID | GAE_INSTANCE environment variable |
Default hostname | Admin API apps.get method |
List of services | Admin API apps.services.list method |
List of versions for a service | Admin API apps.services.versions.list method |
Default version for a service, including any traffic splits | Admin API apps.services.get method |
List of running instances for a version | Admin API apps.services.versions.instances.list method |
For more information about the data available about your application's running services, see Java 11/17 runtime environment.
Namespaces
The Namespaces API enables multitenant apps to partition data across tenants simply by specifying a unique namespace string for each tenant.
While Datastore supports multitenancy directly, other Google Cloud services do not. If your multitenant app uses other Google Cloud services, you will need to handle multitenancy manually. To have completely isolated instances of services, you can create new projects programmatically using the Cloud Resource Manager API and access resources across projects.
OAuth
Instead of using the App Engine OAuth service to verify OAuth 2.0 tokens,
use the
oauth2.tokeninfo
method of the
OAuth 2.0 API.
Search
Host any full-text search database such as Elasticsearch on Compute Engine and access it from your service.
Task queue
Queue tasks for asynchronous code execution using the Cloud Tasks REST API, RPC API, or the Cloud Client Libraries, and use a Java 11/17 App Engine standard service as a Push target. For more information, see Migrating from Task Queues to Cloud Tasks.
For Java 11/17, see the following sample program interacting with the Cloud Tasks API.In many cases where you might use pull queues, such as queuing up tasks or messages that will be pulled and processed by separate workers, Pub/Sub can be a good alternative as it offers similar functionality and delivery guarantees.
User authentication
For an alternative to the Users API, use any of the HTTP-based authentication mechanisms described on the User authentication page.