5

因此,我正在尝试使用 cron.yaml 自动化我们的 GAE 数据存储备份。此外,我想使用 Google Cloud Storage 作为我们备份的目的地。我创建了一个存储桶并设置了 ACL。手动备份可通过 Datastore 管理控制台进行。我什至可以让 cron 工作。但是,我们将相同的代码库推送到 3 个不同的环境:开发、登台、生产。因此,我想根据应用程序名称将不同存储桶中的备份分开。

我希望暂存数据存储区转到 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 服务器来解决这个问题,但我想避免这种情况。

有没有人有什么建议?

4

2 回答 2

3

修改 cron handler 调用自己的代码,然后根据自己的 App ID 填写 bucket name 参数后,要么调用代码从你自己的代码开始备份,要么从你自己的代码 URLFetch 开始备份。

于 2012-06-05T04:40:50.140 回答
0

为了准确地说 Nick 所说的,您可以在代码中使用任务队列 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))
于 2017-10-05T11:33:13.590 回答