Cloud storageやBigqueryをpythonなどから操作するクライアントライブラリを使用する時に、下記のようなエラーに遭遇しました。
raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started
サービスアカウントの認証が原因のようです。そのためサービスアカウントの作成と、それにロール(権限みたいなものを)を与え、認証鍵のjsonファイルを作成します。
クライアントライブラリ使用時はこのjsonファイルを参照することで認証をパスします。
1. サービスアカウントの作成
https://cloud.google.com/docs/authentication/production?hl=ja を参考に以下の操作を行います。
リンク先の中段「サービス アカウントを作成する」以下の記載通りに作成すれば良いです。
2. 鍵の作成
1.で参照したリンク先の続きの記述を参考にサービスアカウントの鍵(jsonファイル)を作成します。
作成した鍵はクライアントライブラリを実行する環境(ローカルなど)にダウンロードしておきます。
3. サービスアカウントにロールを与える
Google cloud shellの左サイドメニューの「IAMと管理」を選択し下記画面でロールの追加を行います。今回はCloud StorageとBig Queryが使えるように設定します。
4. 認証方法
shell上から鍵のある場所のpathを環境変数に追加する方法と、pythonから認証するパターンの2つがあります。
4.1 環境変数パターン
shell から以下のように打ちます。
export GOOGLE_APPLICATION_CREDENTIALS="/鍵を置いた場所/[鍵のファイル名].json"
但しこれだとshellを立ち上げるたびに行う必要があります。(おそらく./bash_profileとかに書き込めば毎回打ち込む必要はないんだろうが)
4.2 pythonコード上で行うパターン
big_query_client = bigquery.Client.from_service_account_json(
'/鍵を置いた場所/[鍵のファイル名].json')
storage_client = storage.Client.from_service_account_json(
'/鍵を置いた場所/[鍵のファイル名].json')
として、それぞれのサービスのクライアントオブジェクトを作成します。