データストア管理

Datastore モードの Firestore では、一括削除とバックアップ機能を備えたオプション モジュールである Datastore Admin を有効にできるようにしていましたが、より信頼性の高いものに置き換えられました。

Datastore Admin にアクセスする

すでに Datastore Admin を有効にしている場合は、https://ah-builtin-python-bundle-dot-PROJECT_ID.appspot.com/_ah/datastore_admin?app_id=PROJECT_ID に移動して引き続きモジュールにアクセスできます。ここで、PROJECT_ID は Google Cloud プロジェクトの ID です。Datastore Admin を無効にすると、モジュールを再度有効にできなくなります。

Datastore Admin の機能を使用する際の注意事項

  • コピー、削除、バックアップを実行した際に、最近の更新が反映されない場合があります。
  • Datastore Admin のオペレーションはすべてアプリケーション内で実行されるため、割り当ての計算対象になります。
  • バックアップや復元時には書き込みを無効にすることを強くおすすめします。
  • コピーや復元時には、同じキーを持つ既存のエンティティが上書きされます。コピーや復元を複数回実行しても、重複は作成されません。コピーや復元によって、対象外のデータが削除されることはありません。
  • バックアップと復元にデフォルト以外のキューを使用する場合には、queue.yaml で対象として ah-builtin-python-bundle のみを指定できます。その他の対象は使用できません。

データベース アクセス権限

デフォルトでは、Datastore Admin は同じプロジェクト内の Datastore データベースにアクセスでき、Datastore の Identity and Access Management 権限は必要ありません。

データのバックアップ

データの復元またはエクスポートに使用するバックアップ ファイルを作成するには、次の手順に従ってください。

  1. プロジェクトにストレージ バケットを作成します(まだ行っていない場合)。必要に応じて、プロジェクトの App Engine デフォルト サービス アカウントにこのバケットへのアクセス権があることをアクセス制御リストで確認します。これはすでにデフォルトで設定されていることがあり、必要に応じてこれに優先する設定を指定できます。

  2. (推奨)Cloud Datastore への書き込みを無効にします

  3. データストア管理を開く

  4. バックアップを作成するエンティティの種類を選択します。

  5. [Backup Entities] をクリックして、バックアップ フォームを表示します。

  6. 日付スタンプを含むバックアップ名が表示されます。

    1 日に複数のバックアップを作成する場合には、この値を変更してください。同じ名前のバックアップが存在すると、バックアップは作成されません。

  7. バックアップ ジョブではデフォルトのキューが使用されます。ほとんどの場合、キューを変更する必要はありません。

    バックアップと復元にデフォルト以外のキューを使用する場合には、queue.yaml で対象として ah-builtin-python-bundle のみを指定できます。その他の対象は使用できません。

  8. バックアップ ストレージの場所として Google Cloud Storage を選択します。

  9. Cloud Storage を選択すると、バックアップを保存するバケット名を [BUCKET_NAME] の形式で入力するように求めるプロンプトが表示されます。必要に応じて [BUCKET_NAME]/backups/foo のようにディレクトリ構造を後ろに付けてバケット名を指定することもできます。指定したフォルダがない場合は作成されます。

  10. [Backup Entities] をクリックして、バックアップ ジョブを開始します。ジョブ ステータス ページが表示されます。 ジョブ ステータスをバックアップする

  11. [Back to Datastore Admin] をクリックして、バックアップのステータスを確認します。

  12. バックアップが完了したら、無効になっている Cloud Datastore への書き込みを有効に戻します

バックアップと復元に関する考慮事項

バックアップと復元機能を使用すると、誤って削除したデータの復元やデータのエクスポートを行うことができます。すべてのエンティティをバックアップすることも選択した種類のエンティティだけをバックアップすることもできます。また、これらのバックアップのうち必要なバックアップだけを復元することもできます。

バックアップは Cloud Storage に保存されます。

バックアップにインデックスは含まれません。復元後、アプリケーションと一緒にアップロードされたインデックス定義を使用して、必要なインデックスが自動的に再構築されます。

バックアップ ファイルを使用して、BigQuery などの他の Google Cloud サービスにデータをエクスポートすることもできます。

復元では、エンティティに新しい ID は割り当てられません。復元では、バックアップ作成時の ID が使用されます。同じ ID のエンティティはすべて上書きされます。エンティティの復元が完了するまで ID は保持されます。これにより、復元の実行中に書き込みが有効になっても、新しいエンティティと ID が競合することはありません。バックアップ後に追加された新しいエンティティは維持されます。

バックアップからすべてのデータを復元することも、特定の種類のエンティティだけを復元することもできます。また、Cloud Storage でバックアップを作成している場合、バックアップ元と異なるアプリケーションにデータを復元することもできます。

バックアップを中止する

バックアップ ジョブの実行中は、Cloud Datastore 管理画面の [Pending Backups] リストにジョブが表示されます。

実行中のバックアップを停止するには:

  1. データストア管理を開く
  2. [Pending Backups] 画面で、リストからバックアップを選択して [Abort] をクリックします。

バックアップ ジョブを中止すると、App Engine はその時点までに保存されていたバックアップ データを削除します。ただし、中止後に一部のファイルが残る場合があります。中止オペレーションの完了後に、Google Cloud Storage でバックアップに選択した場所に移動して、これらのファイルを削除してください。該当するファイル名はパターン datastore_backup_[BUCKET_NAME] で始まります。

バックアップに関する情報を検索する

エンティティの種類、Google Cloud Storage 内での保存場所、開始時間と終了時間などのバックアップ情報の確認が必要になる場合があります。バックアップの情報を表示する手順は次のとおりです。

  1. データストア管理を開く
  2. [Backups] または [Pending Backups] リストで、1 つ以上のバックアップを選択します。
  3. [Info] をクリックして、これらのバックアップの情報を表示します。
  4. [Back] をクリックして、メインの Cloud Datastore 管理画面に戻ります。

データを復元する

バックアップから復元するには:

  1. (推奨)アプリケーションで Cloud Datastore への書き込みを無効化します。復元したデータと Cloud Datastore に新しく書き込まれるデータとの間で矛盾が生じないように、この操作を行ってください。
  2. データストア管理を開く
  3. 利用可能なバックアップのリストで、復元するバックアップを選択します。
  4. [復元] をクリックします。
  5. 確認のページが開き、チェックボックス付きのエンティティが表示されます。デフォルトでは、すべてのエンティティが復元されます。復元しないエンティティのチェックボックスをオフにします。
  6. このページには、復元に使用されるデフォルトのキューも表示され、事前に定義されたパフォーマンス特性が構成されています。別のパフォーマンス特性のキューが必要な場合には、異なる構成のキューに変更します。ただし、選択したキューについて、queue.yaml で対象に ah-builtin-python-bundle が指定されている必要があります。
  7. [復元] をクリックして、復元を開始します。ジョブ ステータス ページが表示されます。
  8. [Back to Datastore Admin] をクリックして、復元のステータスを表示します。 ステータスを復元する
  9. 復元の完了後、書き込みが無効になっている場合には、アプリケーションからの Cloud Datastore への書き込みを有効に戻します

別のアプリケーションにデータを復元する

Google Cloud Storage でデータをバックアップすると、バックアップの作成で使用したアプリケーションと異なるアプリケーションにバックアップを復元できます。

別のアプリケーションにバックアップ データを復元するには:

  1. 次の権限を使用して、元のアプリケーションのストレージ バケットで、Identity and Access Management(IAM)ポリシーを作成します

    • プリンシパル: [PROJECT_ID]@appspot.gserviceaccount.com
    • ロール: Storage Legacy Bucket ReaderStorage Legacy Object Reader

    [PROJECT_ID] は、復元先のアプリケーションのプロジェクト ID です。

  2. 元のアプリケーションで新しいバックアップを作成します。

  3. (推奨)復元したデータと Cloud Datastore に新しく書き込まれるデータとの間で矛盾が生じないように、復元先のアプリケーションで Cloud Datastore の書き込みを無効にします

  4. データストア管理を開く

  5. [Import Backup Information] というラベルが付いたボタンの横のテキスト ボックスに、バックアップが格納されている元のアプリケーションのバケットを /gs/[BUCKET_NAME] という形式で指定します。ストレージ バケットをバックアップする
    または、特定のバックアップのファイル ハンドルを指定します。バックアップのファイル ハンドルを表示するには、元のアプリケーションの [管理] ページを開いてバックアップを選択し、[情報] をクリックします。[Handle] の横にファイル ハンドルが表示されます。

  6. [Import Backup Information] をクリックします。
    バックアップをハンドルで指定しなければ、指定したバケットで利用可能なバックアップが表示されます。必要なバックアップを選択して、次のいずれかをクリックします。

    • Add to backup list: アプリケーションで利用可能なバックアップのリストにバックアップを残す場合。
    • Restore from backup: このバックアップを復元し、アプリケーションで利用可能なバックアップのリストに残さない場合。
  7. 確認のページが開き、チェックボックス付きのエンティティが表示されます。デフォルトでは、すべてのエンティティが復元されます。復元しないエンティティのチェックボックスをオフにします。

  8. このページには、復元に使用されるデフォルトのキューも表示され、事前に定義されたパフォーマンス特性が構成されています。別のパフォーマンス特性のキューが必要な場合には、異なる構成のキューに変更します。

  9. [Restore] をクリックして、復元を開始します。ジョブ ステータス ページが表示されます。

  10. 復元の完了後、無効になっている Cloud Datastore への書き込みを有効に戻します

リソースの使用状況を確認する

頻繁にバックアップを実行すると、コストが高くなる可能性があります。データストアの管理ジョブを実行すると、実際には基盤となる MapReduce ジョブを実行することになります。MapReduce ジョブによって、ストレージ オペレーションとストレージの使用率に加えて、フロントエンド インスタンス時間が増加します。

リソースの使用状況を確認するには:

  1. Google Cloud コンソールの [App Engine] ページにアクセスします。

    [App Engine] ページに移動

  2. ページの上部にあるプルダウン メニューを使用して、default サービスと ah-builtin-python-bundle バージョンを選択します。

データベースへの書き込みを有効または無効にする

通常は、復元を行う前に書き込みを無効にすることをおすすめします。これにより、復元内容とデータベースに書き込まれる新しいデータ間の競合を回避できます。

書き込みを無効にすると、以下の場所からエンティティが変更されなくなります。

  • Datastore 閲覧者。
  • Datastore API を使用するアプリケーション。

書き込みを有効または無効にするには:

  1. [管理] ページに移動します。

    [管理] ページに移動

  2. 書き込みを有効にするには [書き込みを有効にする] をクリックします。書き込みを無効にするには [書き込みを無効にする] をクリックします。ボタンのテキストは、プロジェクトの状態によって異なります。

Datastore Admin リソースの使用状況を表示する

Datastore Admin ジョブを実行すると、実際には基盤となる MapReduce ジョブを実行することになります。MapReduce ジョブによって、ストレージのオペレーションとストレージの使用率に加えて、フロントエンド インスタンス時間が増加します。

リソースの使用状況を確認するには:

  1. Google Cloud コンソールの [App Engine] ページにアクセスします。

    [App Engine] ページに移動

  2. ページの上部にあるプルダウン メニューを使用して、default サービスと ah-builtin-python-bundle バージョンを選択します。

Datastore Admin へのアクセスを無効にする

  1. 次のコマンドを実行し、PROJECT_ID を Google Cloud プロジェクトの ID に置き換えます。

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://appengine.googleapis.com/v1/apps/PROJECT_ID/services/default/versions/ah-builtin-python-bundle