1

クラウドストレージに保存された特定のデータストア* .backup_infoファイルを収集し、種類ごとに「最新の」backup_infoファイルとしてコピーするための最良の戦略を探しています。最新のbackup_infoファイルが見つかりました。最新のデータストアバックアップを自動的に保持

gs://MY-PROJECT.appspot.com/latest/Comment.backup_info 

基本的に、Cloud Datastoreにデータを持つGoogle App Engineアプリ(Python標準)があります。私は、文書Scheduled Backupsに記載されているように、自動的に定期的にバックアップを実行するためにcron-jobを実行することができます。また、手動で起動されるバックアップタスクを実行するPythonコードを書くこともできます。described in this SO answer私は、特定の種類の最新のbackup_infoファイルを見つけて、それをコピーして目的の場所に名前を変更するタスクを実行する小さなPython cronジョブを作成する予定です。

どちらの方法でも、特定の種類のバックアップが複数ある場合、元のバックアップ場所には1日中に多数のファイルとフォルダが混在します。例えばgs://MY-PROJECT.appspot.com/では、私が見つける:

VeryLoooooongRandomLookingString.backup_info 
OtherStringForSecondBackup.backup_info 
OtherStringForThirdBackup.backup_info 

を文字列には、すべてのバックアップの実行のためのユニークな識別子であるように思われます。私は、* .backup_infoファイルのリストを含んでいると仮定します。

VeryLoooooongRandomLookingString.Comment.backup_info 
OtherStringForSecondBackup.Comment.backup_info 
OtherStringForThirdBackup.Comment.backup_info 

バックアップ内のすべての種類(例: "コメント"。この種類のバックアップデータと実際のバックアップデータのリストが含まれているようです。

datastore_backup_CUSTOM_PREFIX_2017_09_20_Comment/ 
datastore_backup_CUSTOM_PREFIX_2017_09_20_1_Comment/ 
datastore_backup_CUSTOM_PREFIX_2017_09_20_2_Comment/ 

バックアップと種類ごとのデータフォルダ。ここでは種類の "コメント"のために、9月20日に3回バックアップされました。

  1. それは/_ah/datastore_admin/backup.createを呼び出すときに明示的にクエリパラメータ(またはHTTPヘッダ)などのカスタムUIDを指定することも可能です:

    私の質問は、データストアおよび/またはストレージに関連していますか?

  2. もしそうでなければ、バックアップが完了した後に、UIDのメッセージをフックなどに送信できますか?
  3. (1)と(2)が不可能な場合:ストレージの中で、どの種類の最新の* .backup_infoファイルを見つけるのが最適でしょうか? listbucket()はフィルタリングを許可していないようですが、特定の名前パターンを探している何百、何千ものファイルを繰り返すと効率的になるとは思いません。

答えて

0

私はこの問題に対して2つの解決策を見つけました。両方とも現在ベータ版の機能に基づいています。

短期で回答:

  1. Datastore Export & Import serviceは、カスタムおよび予測可能なパスのバックアップに

  2. long-running operationsのためにそのAPIは、パスのバックアップジョブ(例えばの出力URLを取得することができますことができますタイムスタンプ付き)。

  3. クラウドストレージイベントによってトリガーされるクラウド機能は、毎回バケット内の何千ものファイルをページングする代わりに、特定の[KIND].backup_infoファイルをバケットに追加するとすぐに処理することができます。

データストアのエクスポート&インポート

この新しいサービスは、エクスポートジョブ(manuallyまたはscheduled)を実行するためのAPIを持っています。ジョブは、パスを指定することができますし、予測可能な完全なパスを生成し、これだけの最新のバックアップがいつでも必要とされている場合は、既存のバックアップファイルが上書きされる可能性があり、例えば:cronジョブ、App EngineのハンドラのURLについては

gs://[YOUR_BUCKET]/[PATH]/[NAMESPACE]/[KIND]/[NAMESPACE]_[KIND].export_metadata 

/cloud-datastore-export(古い/_ah/datastore_admin/backup.createではなく)です。また、エクスポートの形式は古いエクスポートとは異なります。古い[KIND].backup_infoファイルと同じように、BigQueryにインポートすることもできます。バックアップバケツで、そのファイルが存在する場合に任意の変化(file.resourceState === 'not_exists')によってトリガーされる

クラウド機能

展開クラウド機能(JavaScriptの/ Node.jsの)、新しいです(file.metageneration === '1')と、実際には1であります別のバケット( "latest_backups"など)にコピーされます。コピーのカスタムメタデータを使用して、後で機能を実行するときにtimeCreatedを比較することができます(これにより、最近のバックアップファイルを誤って古いファイルに上書きすることはありません)。実際のバックアップペイロードをコピーまたは移動すると、[KINDNAME].backup_infoファイル内の参照が破損します。

関連する問題