GCPを体系的に学ぶ:6段階ロードマップ
この記事にはアフィリエイト広告が含まれています。 冒頭まとめ Google Cloudのエラーを検索して1件ずつ直しているのに、翌日は別のサービスで同じような壁に当たる。この繰り返しから抜けるには、覚える順序を変える必要があります。 Google Cloudのエラーの多くは、4つの境界のどこかで起きています。誰として呼んでいるかという境界、そのAPIがプロジェクトで有効になっているかという境界、何を許されているかという境界、そしてネットワークの到達性の境界です。エラー文はこの境界のどれで止まったかを示していますが、境界の存在を知らないと文言が読めません。 他のクラウドと比べたときの最大の違いは、2つ目です。Google Cloudでは、権限があってもAPIが有効でなければ呼べません。公式ドキュメントは、ほとんどのGoogle APIを使う前にGoogle Cloudプロジェクトで有効化する必要があると明記しています(Service Usage overview)。この段階を知らないと、権限の設定を延々と見直すことになります。 学ぶ順序は、認証情報とプロジェクト、APIの有効化、IAMの評価順序、サービスアカウント、ネットワークの到達性、トラブルシューティングの6段階です。各段階には「次へ進む目安」を置きました。飛ばした段階は、後の段階のエラーとして別の顔で現れます。 個別に直すだけでは理解しにくい理由 検索で見つかる対処は、多くの場合その環境で有効だった手順です。なぜ有効だったかは書かれていないことがあります。 たとえば、アクセスが拒否されたときに編集者や所有者の役割を付けたら通った、という手順があります。確かにエラーは消えます。しかし何が足りなかったのかは分からないままです。次に同じ構成を作るとき、同じ広い役割を付けることになります。 同じことがAPIの有効化でも起きます。gcloud services enable を実行したら動いた、という手順は、それが権限の問題ではなく有効化の問題だったことを教えてくれません。区別できないままだと、次は逆の場面で有効化を試して時間を使います。 エラー文も同じです。Google Cloudの拒否は、認証に失敗したのか、APIが無効なのか、権限が無いのかを示しています。この区別は、次に説明する全体像を知っていれば読み取れます。 最初に理解するべきGoogle Cloudの全体像 先に、すべての操作が通る道筋を押さえます。ここを飛ばすと、後のすべての段階で判断がぶれます。 どのサービスへの操作も、同じ関門を順に通ります。第一に、どの認証情報を使うかが決まります。第二に、対象のプロジェクトが決まります。第三に、そのプロジェクトでそのAPIが有効かどうかが確認されます。第四に、その主体にその操作が許されているかが判定されます。 この4つは独立しています。認証情報が正しくてもAPIが無効なら止まります。APIが有効でも権限が無ければ止まります。順番に確認しないと、直したはずのものが直っていない状態が続きます。 もう1つ、資源の階層が重要です。組織、フォルダ、プロジェクト、そして個々の資源という階層があり、上位に設定した内容は下位へ引き継がれます。したがって、プロジェクトの設定だけを見ても答えが出ないことがあります。 まずは手元の環境が誰として、どのプロジェクトに対して動いているかを確認してください。 gcloud auth list gcloud config list gcloud auth list は有効なアカウントを、gcloud config list は対象プロジェクトとリージョンを示します。ここが想定と違えば、この先の調査はすべて無駄になります。 学習ステップ1:認証情報とプロジェクト 何を理解する段階か:認証情報がどこから読まれるか、そして gcloud と自分のコードで使われる認証情報が別であることです。 なぜエラー解決に必要か:gcloud では通るのにコードでは拒否される、という症状の大半はここです。 最低限覚える概念:アプリケーションのデフォルト認証情報(ADC)は、認証ライブラリが実行環境に応じて自動的に認証情報を探す仕組みです。公式ドキュメントによれば、ADCは次の場所を順に探します。GOOGLE_APPLICATION_CREDENTIALS 環境変数、gcloud auth application-default login コマンドで作られた認証情報ファイル、そしてメタデータサーバーが返す接続済みのサービスアカウントです(How Application Default Credentials works)。 ここに重要な注意があります。公式ドキュメントは、gcloud CLI自体はGoogle Cloudの資源へアクセスするためにADCを使わないと明記しています(Set up Application Default Credentials)。つまり gcloud auth login で入れた認証情報と、ライブラリが使う認証情報は別管理です。 この2つを混同すると、手元では gcloud が動くのにコードだけ認証エラーになる、という状況が生まれます。コードを動かすなら gcloud auth application-default login が必要です。 ...