GCP のサービスアカウントで Google Cloud API を使うためには、環境変数 GOOGLE_APPLICATION_CREDENTIALS にクレデンシャルファイルのパスを与える必要がある。これが正しく設定されていない場合、GCP の認証エラーが発生する。

さて、Heroku でクレデンシャルファイルを扱うにはどうすればよいのだろうか。安全に 管理したいので、クレデンシャルファイルは Git リポジトリにはコミットしない。どうにかして Heroku の Dyno 内にファイルを置く方法を模索することになる。

僕が取った手段は次の通りである。

  1. クレデンシャルファイルの 中身 を環境変数に渡す
  2. 上記の環境変数を .procfile の中でファイルにダンプする
  3. ダンプしたファイルのパスを 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 の認証は成功する。