直面した問題
GCPの新規プロジェクトを職場の上長に作成してもらい、dockerでテストアップしようとした際に以下のエラーが発生しました。
denied: Permission "artifactregistry.repositories.uploadArtifacts" denied on resource "projects/hogehoge" (or it may not exist)
エラーを和訳してみると、指定したプロジェクトが実際には存在しないか、権限が不足している場合に発生するみたいです
プロジェクトは何度も確認しましたが存在はしてる。なので権限周りで設定変わってしまったかな?とGCPの「IAMと管理」をいじってみましたが解決できず半日溶かしてしまいました...
エラーの原因
今回のケースでは、GCPに作成してもらったプロジェクト名が、以前に作成したものと同じだったことが問題でした。
GCPでは プロジェクト名はユニークである必要はありませんが、プロジェクトIDは一意 です。
そのため、プロジェクト名ではなく プロジェクトID を明示的に指定する必要があります。
解決策
1. 現在のプロジェクトIDを確認する
GCPのプロジェクトを選択するプルダウンが左上にあるのでクリック
↓
プロジェクト名の右にプロジェクトIDが載っているのでそれをコピー
2. 正しいプロジェクトIDを指定する
次に、GCPのプロジェクトIDを明示的に指定して、Artifact Registryへのアップロードを試します。自分はmakefileを使用してテストアップをしているのでGCPのプロジェクト名のところにIDを指定します
export GCP_PROJECT ?= projectID
export APP_NAME ?= hogehoge-hp
stage/docker/build:
docker build --rm -f Dockerfile --platform=linux/amd64 -t asia-northeast1-docker.pkg.dev/${GCP_PROJECT}/${APP_NAME}/stage:latest . --build-arg is_auth=true --build-arg env=stage
stage/docker/push:
docker push asia-northeast1-docker.pkg.dev/${GCP_PROJECT}/${APP_NAME}/stage:latest
補足
自分は今回のプロジェクトではDBにfirebaseを使用したのですが
firebaseのプロジェクト名を作成するときも同じです
GCPのプロジェクトIDを指定してあげないと連携が取れません
そもそも自分はいつもfirebaseのプロジェクト名を手入力でしていたのですが
プロジェクト名を決めるところの左下に
すでに Google Cloud プロジェクトがある場合
Google Cloud プロジェクトに Firebase を追加
といったリンクがあるのでそこから選択してあげればなんの問題もありませんでした
こちらでも半日溶かしてしまいました...
自分はそもそもGCPとfirebaseはそれぞれ独立していて全く別のものだと勘違いしていたのですが、実際は密接に繋がっている表裏一体のものでした
今までそんな認識の齟齬があったのにGCPとfirebaseの連携が取れていたのは
自分がなんとなくGCPのプロジェクト名を同じ名前つけていたからでした
今回プロジェクトIDを指定してあげないといけなかったので気付けました
そこの認識も正せたので良かったです。
まとめ
- GCPのプロジェクト名は重複可能だが、プロジェクトIDは一意だから注意
- 一応必要なIAM権限が付与されているかも確認してみる
同様の状況で陥ってるかたの参考になれば幸いです