自动备份到Google云端存储 - 使用cron.yaml进行Google App Engine数据存储

时间:2012-06-05 00:15:01

标签: google-app-engine

所以,我正在尝试使用cron.yaml自动化我们的GAE数据存储区备份。此外,我想使用Google云端存储作为备份的目的地。我创建了一个存储桶并设置了ACL。手动备份可在Datastore管理控制台中运行。我甚至可以让cron工作。但是,我们将相同的代码库推送到3个不同的环境:dev,staging,production。所以,我想根据应用程序名称将备份分成不同的桶。

我想暂存数据存储区转到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服务器取消它,但我想避免这种情况。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:3)

修改cron处理程序以调用您自己的代码,然后根据您的应用程序ID填写存储桶名称参数后,调用代码从您自己的代码开始备份,或从您自己的代码中URLFetch它。

答案 1 :(得分:0)

为了确切知道Nick说的话,您可以在代码中使用taskqueue API。 这就是cron工作所做的事情。

e.g。如果你使用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))