Migrating push queues to Cloud Tasks (Go)

Before you upgrade to the latest App Engine services SDK version, review the migration overview.

You can migrate to Cloud Tasks automatically by updating your App Engine services SDK to the latest version. After you upgrade, the SDK automatically redirects PushQueue calls to the Cloud Tasks frontend APIs for you. Cloud Tasks retains your existing task queues and tasks, so no additional migration is required.

Behind the scenes, the updated SDK uses the Cloud Tasks APIs to maintain feature parity with Task Queues features, the SDK supports the following:

  • Batch task creation: The SDK uses batch APIs to support adding up to 100 tasks in a single call.
  • Task-level retries: The SDK supports task-specific retry configurations.
  • Transactional tasks: The SDK enqueues tasks within Datastore transactions. To maintain reliability, either create or modify the cron.yaml file.

Pricing and quotas

Migrating your push queues to Cloud Tasks might affect the pricing and quotas for your app.

Pricing

Review the Cloud Tasks pricing to estimate your monthly cost before migrating.

Similar to Task Queues, sending requests to your App Engine app with a Cloud Tasks push target is free. However, unlike Task Queues, Cloud Tasks charges for operation performed, such as creating, deleting, or managing tasks. This might lead to higher overall monthly cost compared to the complimentary App Engine Task Queue.

Quotas

Cloud Tasks requests also count towards your App Engine requests quotas.

Like Task Queues, Cloud Tasks has service-specific quotas. Migrating to Cloud Tasks will likely change your quotas.

Before you begin

The following sections discuss the cost and quota considerations before migrating push queues to Cloud Tasks.

  1. Make sure that you have access to the App Engine source code.

  2. Enable the Cloud Tasks and Cloud Scheduler APIs:

    Enable APIs

  3. To ensure that the App Engine service account has the necessary permissions to let the SDK dispatch tasks to the Cloud Tasks API, ask your administrator to grant the Cloud Tasks Enqueuer (roles/cloudtasks.enqueuer) IAM role on project.

Update the App Engine services SDK

  1. Ensure your application uses the latest version of the App Engine services SDK.

    In your go.mod file, update the google.golang.org/appengine/v2 module to version v2.1.0-preview or higher.

    module my-app
    
    go 1.26
    
    require (
        google.golang.org/appengineppengine/v2.1.0-preview
    )
  2. Enable Cloud Tasks routing

    runtime: 1.26
    service: my-service-b
    
    env_variables:
      APPENGINE_USE_CLOUDTASK_PUSH_QUEUE: "true"
    
  3. Deploy your app:

    gcloud app deploy
    
  4. Verify push queues in Cloud Tasks to verify that you app is using Cloud Tasks.

Configure transactional tasks (optional)

If your app enqueues tasks within Datastore transactions, the SDK relies on an internal cron job to ensure that any tasks that fail to enqueue during the datastore commit are eventually processed.

To handle push queue transactional tasks, create or update your cron.yaml file to periodically call the internal processor. For example:

cron:
- description: "Process push queue transactional tasks"
  url: /_ah/cloudtask/sweep
  schedule: every 30 minutes # Change this based on the usage pattern

What's next