背景
Google Cloud RunでRubyを使ってFirestoreにアクセスする(サンプル付き)の続きです。
元々解決したかったのは「Googleドライブのための認証を行う時にファイルへの書き込みを行っていた」のをどうやってCloud Runに持ってくるかという話でした。
認証情報の保存方法はファイルとRedisの2通りがあります。
先述の通りCloud Runの仕様上ファイルへの書き込みは止める必要があり、Redisは
- Memorystore for Redisには無料枠がないっぽい
- GCEのVMインスタンスにRedisを立てても、Cloud Runから内部ネットワーク経由でアクセスする方法がないっぽい
ために諦め、TokenStoreの実装は難しくなかったので、Firestoreを使うTokenStoreをでっち上げて使う方法を試してみた所、うまく行きました。
サンプル
動かし方
前回の記事と異なる点のみ記載します。
Googleドライブとの連携の設定
Developer ConsoleからOAuth 2.0 クライアント ID
を開きます(作ってないなら作る)。
クライアント ID
とクライアント シークレット
を確認します。
Cloud Runでのサービス起動時に
環境変数にクライアント ID
とクライアント シークレット
を設定します。
(無理やり)ブラウザから操作する
OAuth2の認証を利用する都合、ブラウザから操作する必要があります。
ブラウザからのリクエストにヘッダ項目を追加できるプラグインを使います。私はModHeaderを使いました。
Cloud Shell上でgcloud auth print-identity-token
コマンドを実行してトークンを取得したあと、追加のリクエストヘッダを設定して
サービスのURLを開きます。
リンク先で認証を行って、コードをコピーして、元のページのコード入力欄にペーストして、送信します。コピー元で改行になっていたところにスペースが入っているかもしれないので、そこは削除しましょう。
Googleドライブのファイルの名前が一覧表示されます。
Firestoreに保存された認証情報
このように、認証情報が保存されています。