我想定期以编程方式备份我的应用的数据存储区。
根据https://developers.google.com/appengine/articles/scheduled_backups
,似乎可以创建一个备份数据存储区的cron但是,我需要一个更细粒度的解决方案:为动态更改名称空间创建不同的备份文件。
是否可以通过GET / POST简单地调用/_ah/datastore_admin/backup.create网址?
答案 0 :(得分: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,比如'filesystem',把那些参数放在params dict旁边'kind'。
答案 1 :(得分:2)
以编程方式根据环境备份数据存储
除了杰米的答案之外,还有这个。我需要根据环境(登台/生产)将数据存储备份到云存储。不幸的是,这不能再通过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")
)
答案 2 :(得分:0)
您现在可以使用托管导出和导入功能,可以通过gcloud或Datastore Admin API访问: