gcpug / nouhau

Google Cloud Platformのノウハウを共有するRepository
https://gcpug.jp
MIT License
655 stars 23 forks source link

Cloud Datastore Import/Export Example #35

Open sinmetal opened 6 years ago

sinmetal commented 6 years ago

Exportした内容を別のGCP ProjectにImportしようとすると、地味にハマる

IAM

https://cloud.google.com/datastore/docs/export-import-entities?hl=en#permissions

だいたいドキュメントに書いてあるとおりだが、Importを実行しているのは {projectid}@appspot.gserviceaccount.com のようなので、こいつをRoleを割り当ててやる必要がある。

Kind指定

うまいやり方があるのかもしれないが、 sinmetalが試した限りでは、全Kind Importするか、指定した1つのkindしかImportすることができなかった。 また、kindを指定する場合、Exportする側も1つのkindだけ指定してExportしておく必要があった。

以下はHoge Kindのみを持っていきたい時の gcloud datastore のサンプル。 Export時に overall_export_metadata を末尾に持つファイルが複数できあがるが、指定するのは最もrootにいる overall_export_metadata を指定する。

Export

gcloud datastore export --async --kinds='Hoge' gs://datastore-backup/hoge

Import

gcloud datastore import --kinds='Hoge' gs://datastore-backup/hoge/hoge.overall_export_metadata
ryo-yamaoka commented 5 years ago

私が試したところExport時に --kinds を複数指定しておけばImport時に個別指定ができました。Kind未指定でExportした場合は一括復元しかできません。

Export

gcloud datastore export gs://datastore-backup/hoge --kinds='hoge,fuga,piyo,gero' --async

Import

Kind未指定・全指定でバックアップ内容を全て復元

gcloud datastore import gs://datastore-backup/hoge/hoge.overall_export_metadata --async

gcloud datastore import gs://datastore-backup/hoge/hoge.overall_export_metadata --kinds='hoge,fuga,piyo,gero' --async

Export時に指定したKindの一部だけの復元も可

gcloud datastore import gs://datastore-backup/hoge/hoge.overall_export_metadata --kinds='hoge' --async