所以,我正在尝试使用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服务器取消它,但我想避免这种情况。
有人有任何建议吗?
答案 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))