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
アプリケーションファイル
基本は参考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
テスト
- Cron ジョブページを開いて、Daily Cloud Datastore Exportジョブの[今すぐ実行] をクリックする
- ジョブが完了するのを確認したら、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 で同じロケーションを使用する必要がありました。