GCP のサービスアカウントで Google Cloud API を使うためには、環境変数 GOOGLE_APPLICATION_CREDENTIALS
にクレデンシャルファイルのパスを与える必要がある。これが正しく設定されていない場合、GCP の認証エラーが発生する。
さて、Heroku でクレデンシャルファイルを扱うにはどうすればよいのだろうか。安全に 管理したいので、クレデンシャルファイルは Git リポジトリにはコミットしない。どうにかして Heroku の Dyno 内にファイルを置く方法を模索することになる。
僕が取った手段は次の通りである。
- クレデンシャルファイルの 中身 を環境変数に渡す
- 上記の環境変数を
.procfile
の中でファイルにダンプする - ダンプしたファイルのパスを
GOOGLE_APPLICATION_CREDENTIALS
に指定する
具体的な手順
次のコマンドでクレデンシャルファイルの中身を環境変数 GOOGLE_CREDENTIALS
に入れる。
heroku config:set GOOGLE_CREDENTIALS="$(< /PATH/TO/credentials.json)"
次の内容の .profile
ファイルを作成する。このファイルはコンテナ起動時に実行される Bash シェルスクリプトである。
echo ${GOOGLE_CREDENTIALS} > /app/google-credentials.json
最後に環境変数 GOOGLE_APPLICATION_CREDENTIALS
を Heroku アプリに設定する。
heroku config:set GOOGLE_APPLICATION_CREDENTIALS=/app/google-credentials.json
これで Google Cloud API の認証は成功する。