Cloud runにおけるFirestore利用について
概要
公式ドキュメントを読んでも明示的に示したものがなかったので、スニペット的に記述します。
本記事では、具体的なコードについてほとんど示しません。ここで示すことは、サービスアカウントとその権限周りについてです。
Cloud run単体ではFirestoreを利用できません。この時、自分が始めに調べた時はFirebaseからapi keyを発行するというやり方でしたが、これは処理が遅くなります。一応公式でも記載がありますが、それに少しだけ情報を付加したものです。
ここでは、Cloud runにサービスアカウントを付与し、そのサービスアカウントにFirestoreへのアクセスを許可するというものです。以下の項目に分けて記します。
- サービスアカウントの生成・権限付与
- Cloud runサービスにサービスアカウントを紐づけ
サービスアカウントの生成・権限付与
画像には、設定する際のタブの位置を示しています。「サービスアカウント」タブでは作成、
「IAM」タブでは権限の付与をします。このとき、Firestoreの読み書きで必要な権限は「Cloud Datastore ユーザー」です。
Cloud runサービスにサービスアカウントを紐づけ
次にCloud runでdeployしたサービスに先ほど作成したサービスアカウントを紐づけをします。これはGUI・CUI、どちらでもできます。
GUI
CUI
ここではGCPのクライアントソフトの具体的なインストール方法や設定方法については説明しません。これはnpmから簡単にインストールできるので、もしもできたら以下のコマンドで設定できます。
gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
また、cloud runサービスのdeploy時に設定することもできます。以下がそのコマンドです。
gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
おわりに
以上の設定が出来れば、Cloud runでdeployした環境上でFirestoreにアクセスできるようになります。
自分の場合、Pythonライブラリを使用していますが、とくにapi keyを設定しなくても大丈夫です。
この辺りの日本語のまとまった資料とかってないですよね。今はもうTerraform等を使用するから、こういったのってあまりないんですかね。
Discussion