GoogleAppEngine
datastore
GoogleCloudPlatform

Datastoreのスケジュールバックアップを新方式へ移行

Cloud Datastore Admin バックアップが2019/2/28に廃止となってしまうので新方式に移行してみました。

Cloud Datastore : フルマネージドのエクスポートとインポート機能を正式リリース

エクスポートのスケジューリングを参考にして進めていきます。

バックアップ用GCSバケット作成

gsutil mb -p [PROJECT_NAME] -c [STORAGE_CLASS] -l [BUCKET_LOCATION] gs://[BUCKET_NAME]/

Cloud Storage バケットと Cloud Datastore で同じロケーションを使用する必要があります。
Datastoreのロケーションの確認方法

権限をApp Engineのデフォルトサービスアカウントに割り当てる

Cloud Datastore Import Export Admin

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member serviceAccount:YOUR_PROJECT_ID@appspot.gserviceaccount.com \
--role roles/datastore.importExportAdmin

Cloud Storage バケットの書き込み権限

gsutil iam ch serviceAccount:YOUR_PROJECT_ID@appspot.gserviceaccount.com:objectCreator \
gs://BUCKET_NAME

アプリケーションファイル

Application files

基本は参考URLのままですが、 cron.yaml を修正しました。
※これを書いている時点では、日本語ドキュメントがベータ版のままで cloud_datastore_admin.py のコードが古いため英語ページからコードをコピーしました。

  • kind パラメータを追加しエクスポート対象のKindを指定する
  • schedule を時間指定にする
  • timezone を日本時間にする
cron.yaml
cron:
  - description: "Daily Cloud Datastore Export"
    url: "/cloud-datastore-export?namespace_id=&\
        kind=Kind1&\
        kind=Kind2&\
        output_url_prefix=gs://BUCKET_NAME[/NAMESPACE_PATH]"
    target: cloud-datastore-admin
    schedule: 'every day 00:00'
    timezone: Asia/Tokyo

デプロイ

gcloud app deploy app.yaml cron.yaml --project YOUR_PROJECT_ID

テスト

  1. Cron ジョブページを開いて、Daily Cloud Datastore Exportジョブの[今すぐ実行] をクリックする
  2. ジョブが完了するのを確認したら、Cloud Storage ブラウザを開いて、作成したバケットにエクスポートがあるのを確認する

インポート

default namespaceに、 Kind1 , Kind2 Kindをインポートする場合

gcloud datastore import gs://[BUCKET_NAME]/[PATH]/[FILE].overall_export_metadata --namespaces='(default)' --kinds='Kind1','Kind2' --project=YOUR_PROJECT_ID

エクスポート時と同様にCloud Storage バケットと Cloud Datastore で同じロケーションを使用する必要がありました。