2012-06-05 122 views
5

因此,我試圖使用cron.yaml自動化我們的GAE數據存儲備份。此外,我想使用Google雲端存儲作爲備份的目的地。我創建了一個存儲桶並設置了ACL。手動備份可從Datastore管理控制檯運行。我甚至可以讓cron工作。但是,我們將相同的代碼庫推向3種不同的環境:開發,分期,生產。所以,我想根據應用程序名稱將不同分區中的備份分開。自動備份到Google雲端存儲 - Google App Engine數據存儲與cron.yaml

我想暫存數據存儲到myapp_staging_bk存儲桶,在myapp_dev_bk存儲桶中開發,並活到myapp_live_bk。

cron.yaml:

cron: 
- description: My Daily Backup 
    url: /_ah/datastore_admin/backup.create?name=BackupToCloud&kind=LogTitle&kind=EventLog&filesystem=gs&gs_bucket_name=whitsend 
    schedule: every 12 hours 
    target: ah-builtin-python-bundle 

所有這一切都將是超級容易,如果我能想出辦法來拉在上面的URL中的應用程序名稱。事情是這樣的:

url: /_ah/datastore_admin/backup.create?name=BackupToCloud&kind=LogTitle&kind=EventLog&filesystem=gs&{myapp}_bk=whitsend 
    schedule: every 12 hours 

其中{} MYAPP將是在app.yaml中的應用程序的名稱。

https://developers.google.com/appengine/articles/scheduled_backups沒有說這種類型的設置。

我知道我可以用我們的CI服務器來解決這個問題,但我想避免這種情況。

有沒有人有任何建議?

回答

3

修改cron處理程序以調用您自己的代碼,然後在根據您的App ID填寫存儲桶名稱參數之後,調用代碼從您自己的代碼中啓動備份,或從您自己的代碼中獲取它。

0

爲了精確地說明Nick說的話,你可以在你的代碼中使用taskqueue API。 這就是cron作業的底線。

例如如果您使用python:

task = taskqueue.add(
    url='/_ah/datastore_admin/backup.create', 
    target='ah-builtin-python-bundle', 
    params={ 
     'name': 'my_backup', 
     'kind': ['kind1','kind2','kind3'], 
     'filesystem':'gs', 
     'gs_bucket_name':'[MY_GCS_BUCKET]', 
    }) 

response.write(
    'Task {} enqueued, ETA {}.'.format(task.name, task.eta)) 
相關問題