1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Cloud RunでRubyを使ってFirestoreにアクセスする(サンプル付き)

Last updated at Posted at 2020-03-01

背景

ちょっとした処理をGCEのf1-microインスタンスでdockerを使って定期実行していたのですが、なぜか昨年11月頃から動作が重くなり処理が完了できなくなりました。そもそもspec不足だろうとは思ったので、最近知ったCloud RunならRubyのまま移行できるのではないか、と考えました。

Cloud Runではボリュームに相当する機能が使えないので、ファイルに保存していたデータを別の方法で保存する必要が発生しました。試行錯誤の結果、今回はFirestoreに保存するのが良さそうという結論になったので、この記事を書いています。

サンプル

Ruby2.6なのは、現時点ではRuby2.7でgrpcのgemがbundleできないからです。あと数日で出来そうな気配はあります

要点

Cloud Runは、処理の内容が何であっても、HTTPリクエストを受け取って実行する仕組みです。なので、既存の処理を、リクエストが来たら実行するwebアプリケーションに書き換える必要があります。

Cloud Runは、同じプロジェクトであれば、設定を全く行わずに、Firestoreにアクセスできるようになっています。

動かしかた

1つ1つのプロセスは各サービスの基本的なものなので、公式ドキュメントやGoogleなどで調べられると思います。

Firestoreのデータ

GCPの同じプロジェクトでFirebaseを動くようにして、Firestoreも動くようにして、以下のようにデータを入れます。

Firestore

コンテナのビルド

gcloud builds submit . --project=your-awesome-project --config=cloudbuild.yaml

プロジェクト名は置き換えましょう。

サービスの設定

新しいサービス_アカウントの作成_–_Cloud_Run_–_kokkai-iinkai_–_Google_Cloud_Platform.png Cloud Run2

サービスが設定されたら自動的に最初のデプロイが行われるので、すぐ実行できるようになります。

実行

実行1 実行2 実行3

Firestoreのデータを引っ張ってこれていることがわかります。

ここまででCloud Runを動かす話は終わりです。ついでに開発時に手元で動作させる方法について書きます。

手元での動かしかた

サービスアカウントの鍵を発行

サービスアカウント

発行時にJSONを手元にダウンロードして保存します。

鍵の配置

レポジトリの下にdataディレクトリを作って鍵ファイルを置いて、

.env.sample
# Replace file name
GOOGLE_APPLICATION_CREDENTIALS=/data/your-awesome-project-deadbeef1234.json

鍵ファイルの名前に書き換えて、.envとして保存します。この環境変数はFirestore用のgemが読み取ります。

起動

docker-compose up

で、 http://localhost:8080 にアクセスして、{:foo=>"bar", :hoge=>"piyo"}と表示されればOKです。

TIPS

  • STDOUT.sync = trueを入れておかないと処理のログが出ないかも

cronみたいな定期実行する方法

Cloud Scheduler

こんな感じの設定でいける

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?