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

Cloud Functionsで叩けるシェルコマンド一覧

Cloud Functionsでgcloudコマンドが叩きたくなったんですけど、gcloudがインストールされているか分からなかったので、$PATHを調べるついでに、$PATHが通っている全てのコマンドも調べてみました。

続きを読む

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

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

booth.pm

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

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

続きを読む