2012-06-05 42 views
5

Vì vậy, tôi đang cố gắng tự động sao lưu GAE Datastore bằng cron.yaml. Hơn nữa, tôi muốn sử dụng Google Cloud Storage làm điểm đến cho các bản sao lưu của chúng tôi. Tôi đã tạo một thùng và thiết lập ACL. Sao lưu thủ công hoạt động từ bảng điều khiển Quản trị Datastore. Tôi thậm chí có thể có được cron để làm việc. Nhưng, chúng tôi đẩy cùng một codebase đến 3 môi trường khác nhau: dev, dàn dựng, sản xuất. Vì vậy, tôi muốn tách các bản sao lưu trong các nhóm khác nhau dựa trên tên ứng dụng.Tự động sao lưu vào Google Cloud Storage - Google App Engine Datastore với cron.yaml

Tôi muốn dàn dựng kho dữ liệu để chuyển đến thùng myapp_staging_bk, dev trong nhóm myapp_dev_bk và trực tiếp đến 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 

Tất cả điều này sẽ là siêu dễ dàng nếu tôi có thể tìm ra một cách để kéo tên ứng dụng trong url ở trên. Một cái gì đó như thế này:

url: /_ah/datastore_admin/backup.create?name=BackupToCloud&kind=LogTitle&kind=EventLog&filesystem=gs&{myapp}_bk=whitsend 
    schedule: every 12 hours 

nơi {myapp} sẽ là tên của ứng dụng có trong app.yaml.

https://developers.google.com/appengine/articles/scheduled_backups không nói gì về loại thiết lập này.

Tôi biết tôi có thể tắt chức năng này với máy chủ CI của mình, nhưng tôi muốn tránh điều này.

Có ai có bất kỳ đề xuất nào không?

Trả lời

3

Sửa đổi trình xử lý cron để gọi mã của riêng bạn, sau đó gọi mã để bắt đầu sao lưu từ mã của riêng bạn hoặc URLTìm nạp mã từ mã của riêng bạn sau khi điền thông số tên nhóm dựa trên ID ứng dụng của bạn.

0

Để chính xác những gì Nick đã nói, bạn có thể sử dụng API nhiệm vụ trong mã của bạn. Đó là những gì cron job làm theo mui xe.

ví dụ: nếu bạn sử dụng 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)) 
Các vấn đề liên quan