2013-04-04 5 views
4

Я хотел бы регулярно создавать резервные копии своего хранилища данных приложения.AppEngine datastore - резервное копирование программно

Представляется возможным создать хроны, что резервное копирование хранилища данных, в соответствии с https://developers.google.com/appengine/articles/scheduled_backups

Однако, мне требуется более мелкозернистое решение: Создание различных резервных копии файлов для динамического изменения пространств имен.

Можно ли просто вызвать /_ah/datastore_admin/backup.create url с помощью GET/POST?

ответ

3

Да; Я делаю именно это, чтобы реализовать некоторую логику, которая не может быть выполнена с помощью cron.

Используйте TaskQueue API для добавления запроса URL, например:

from google.appengine.api import taskqueue 
taskqueue.add(url='/_ah/datastore_admin/backup.create', 
       method='GET', 
       target='ah-builtin-python-bundle', 
       params={'kind': ('MyKind1', 'MyKind2')}) 

Если вы хотите использовать несколько параметров, которые могли бы пойти в хрон URL, как «файловая система», поставить те, в Params dict вместе с «добрым».

+0

Пытаюсь сделать так, получая 404 , есть идеи?? – Gilad

+0

Включили ли вы datastore_admin для своего приложения? См. Https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Enable_datastore_admin –

+0

Удалось ли вам это сделать? –

2

Программные резервное хранилище данных на основе среды

Это происходит в дополнении к ответу Джейми. Мне нужно было создать резервную копию хранилища данных в облачном хранилище на основе среды (промежуточной сборки/производства). К сожалению, этого больше не может быть достигнуто с помощью cronjob, поэтому мне нужно было сделать это программно и создать cron для моего скрипта. Я могу подтвердить, что работает ниже, поскольку я видел, что некоторые люди жаловались, что они получают 404. Однако он работает только в живой среде, а не на локальном сервере разработки.

from datetime import datetime 

from flask.views import MethodView 

from google.appengine.api import taskqueue 
from google.appengine.api.app_identity import app_identity 


class BackupDatastoreView(MethodView): 

    BUCKETS = { 
     'app-id-staging': 'datastore-backup-staging', 
     'app-id-production': 'datastore-backup-production' 
    } 

    def get(self): 

     environment = app_identity.get_application_id() 

     task = taskqueue.add(
      url='/_ah/datastore_admin/backup.create', 
      method='GET', 
      target='ah-builtin-python-bundle', 
      queue_name='backup', 
      params={ 
       'filesystem': 'gs', 
       'gs_bucket_name': self.get_bucket_name(environment), 
       'kind': (
        'Kind1', 
        'Kind2', 
        'Kind3' 
       ) 
      } 
     ) 

     if task: 
      return 'Started backing up %s' % environment 

    def get_bucket_name(self, environment): 

     return "{bucket}/{date}".format(
      bucket=self.BUCKETS.get(environment, 'datastore-backup'), 
      date=datetime.now().strftime("%d-%m-%Y %H:%M") 
     ) 
+0

Как вы определили свою резервную копию очереди? –

+0

Как проверить, завершена ли задача? – innohead

+0

Я предполагаю, что вы можете опросить задание один раз каждые X минут, чтобы узнать, все еще обрабатывается задача – viorel