DatastoreのエンティティをBigQueryに自動でバックアップする

Datastore --エクスポート--> GCS --インポート--> BigQuery

GCSの変更をフックして呼ばれたCloud FunctionsからBigQueryにインポートするAPIを叩く。

GAEのcron.yamlを使って毎晩Datastoreからエクスポートさせると、自動でバックアップがBigQueryに溜まって、データウェアハウスが出来上がるようなことをしました。

 

全体の流れを1文にすると「GAEからcronでDatastoreのエンティティをpubsub Nortificationsを設定したバケットにエクスポートして、pubsub NortificationsでCloud Functionsをコールしてエクスポート済みのエンティティをBigQueryにインポートする」みたいな感じのことをします。

 

事前にバックアップを保存するようのGCSのバケットを作る

Creating Storage Buckets  |  Cloud Storage Documentation  |  Google Cloud

 

DatastoreをGCSにエクスポート

Exporting and Importing Entities  |  Cloud Datastore Documentation  |  Google Cloud

 

BigQueryにインポート

Loading Data From Cloud Datastore Exports  |  BigQuery  |  Google Cloud

 

オブジェクトの変更をフックしてCloud Functionsを呼ぶ

Registering Object Changes  |  Cloud Storage Documentation  |  Google Cloud

 

GAEのcron.yamlを使って定期実行

cron.yaml Reference  |  App Engine standard environment for Go  |  Google Cloud

 

「エクスポートのスケジューリング」っていうド直球なドキュメントもあった(やってることはGAEでcronを叩いてるだけ)

Scheduling an Export  |  Cloud Datastore Documentation  |  Google Cloud

 

バックアップ先のtableを持つBigQueryのDatasetとエクスポートしたエンティティのあるGCSバケットは同じリージョンか、マルチリージョンである必要がある点に注意します。

 

all_namespaces_all_kindsでエクスポートするとBigQuery側で読めなかったので、kindごとにテーブルを作ることになった(色々頑張ったけど、ドキュメントをよく読んだら無理だよって書いてた)

 

テーブルにtime-based partitioningを設定できて、日付ごとに擬似フィールドを使ってパーティションを貼ってくれる機能があったのでそれを使えばいい。

   

前にAWS使ったときはEC2だけしか使わなかったり、Alexa SkillとしてlamdaとS3を連携させたりぐらいしかしたことなかったけど、こんな感じでパブリッククラウド感満載なことをしてみると、いろんなパーツを組み合わせていく感じでちょっと楽しいね。

初めてLaTeXで技術書を書いて売るまでにやったこと

先日、コミックマーケット94で「Dockerではじめるゲームボーイアドバンス開発本」という技術書を頒布しました。

booth.pm

BOOTHでモノクロ紙書籍+カラーPDFが購入できます。在庫余ってるのでみんな買ってください()

初めて技術書を書いたので、それまでに色々やったこととか困ったことについての話。

続きを読む

Windowsで使ってたHDDがLinuxでマウントできない話

最近自宅のメインPCをWindowsからLinuxに変えて、SSDは完全に初期化してインストールしたんですけど、HDDの方はデータ残したら、HDDがうまくマウントできなくなって困った話

続きを読む

Golangで謎エラーが出た

MacでGoをアップデートしたら、見たことないエラーが出てきてびっくりしたのでその話。

続きを読む

Pythonで日本語 + パイプを使うと死ぬ

イマイチPythonに慣れないので、普段はちょっとした自動化とかは基本的にシェルスクリプトと併用してるんですけど、コマンドラインで直接実行すれば動作するのに、シェルスクリプトからPythonを呼び出すと動作しないみたいなことがあったので、その時にやった対策の話。

続きを読む