3DプリンタとITとプリキュアのブログ

大学でプログラミングに出会って、ズブズブにハマってしまった情報系学生の書くブログです。

どこかでゴミcommitが混ざってしまったときはgit bisectを使おう

開発中に適当にcommitしていたら気がついたらビルドできなくなっていて、どのcommitからビルドできなくなったのか分からなかったので、地道にマージしてはいけなかったcommitを探してたんですけど、どうもこういうのを上手に探す方法があることを知ったのでその話。

 

続きを読む

Google Cloud Functionsで環境変数っぽいものを使う

Cloud Functionsで開発環境と本番環境でプロジェクト名とかもろもろの環境変数を使いたくなったんですけど、探してみたらまだBeta版の機能だけど、こういうのがありました。

Using Environment Variables  |  Cloud Functions Documentation  |  Google Cloud

続きを読む

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を連携させたりぐらいしかしたことなかったけど、こんな感じでパブリッククラウド感満載なことをしてみると、いろんなパーツを組み合わせていく感じでちょっと楽しいね。