Search code examples
google-app-enginecrondatabase-backups

Run appengine backup from task queue


In the 1.8.4 release of Google App Engine it states:

A Datastore Admin fix in this release improves security by ensuring that scheduled backups can now only be started by a cron or task queue task. Administrators can still start a backup by going to the Datastore Admin in the Admin Console.

The way to run scheduled backups with cron is documented, but how can we initiate backups from a task queue task?

Are there any other ways to programmatically run backup tasks?


Solution

  • You can create a task queue task with method GET and URL "/_ah/datastore_admin/backup.create" with your parameters specified as arguments to the URL and target the task to run on the 'ah-builtin-python-bundle' version. Example:

    url = '/_ah/datastore_admin/backup.create?filesystem=blobstore&name=MyBackup&kind=Kind1&kind=Kind2'
    taskqueue.add(
            url=url,
            target='ah-builtin-python-bundle',
            method='GET',
            )
    

    I have cron jobs that trigger my own handlers that then look up a config and create a task queue backup based on that config. This lets me change backup settings without having to update cron jobs and lets me have a lot more control.

    The options you can specify in the URL are the same as the documentation describes for CRON job backups so you can specify namespace and gs-bucket-name as well.

    I believe to do this in Java you have to create a queue with a target in the queue definition and add your tasks to that queue.