Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

背景

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

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

サンプル

https://github.com/skuroki/hello_google_run_with_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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away