4

我想定期以编程方式备份​​我的应用程序的数据存储。

根据https://developers.google.com/appengine/articles/scheduled_backups,似乎可以创建一个备份数据存储的 cron

但是,我需要一个更细粒度的解决方案:为动态更改命名空间创建不同的备份文件。

是否可以简单地使用 GET/POST 调用 /_ah/datastore_admin/backup.create url?

4

3 回答 3

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')})

如果您想使用更多会进入 cron url 的参数,例如“文件系统”,请将这些参数放在 params 字典中的“种类”旁边。

于 2013-04-17T19:03:29.970 回答
2

基于环境以编程方式备份​​数据存储

这是杰米回答的补充。我需要根据环境(暂存/生产)将数据存储备份到 Cloud Storage。不幸的是,这不能再通过 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")
        )
于 2015-06-09T14:35:16.763 回答
0

您现在可以使用托管导出和导入功能,该功能可以通过 gcloud 或 Datastore Admin API 访问:

导出和导入实体

安排导出

于 2018-03-02T00:51:50.007 回答