GCP Container Registry を Artifact Registry に移行する
warning
Container Registry is deprecated and scheduled for shutdown. Artifact Registry now hosts images for the gcr.io domain by default in projects without previous Container Registry usage. After March 18, 2025, Container Registry will be shut down. To learn more about your options to upgrade to Artifact Registry, see Prepare for Container Registry shutdown.
"March 18, 2025" に shut down されるとのことなので Artifact Registry に移行する。
Cloud Build で firebase への deploy を試すために作った project なので Container Registry にはあるのはこれだけ↓
- firebase: firebase community builder を push したもの
- gcf: cloud functions 用の repository (自動的に作成されたもの)
自分が作成したのは "firebase" repository だけなのでこちらを移行できれば良さげ
移行に関する公式 Doc
Migration command
自動で migrate するための command 用意されてた
gcloud artifacts docker upgrade migrate \
--projects=PROJECTS
このコマンド一発でここまで↓やってくれるらしい
The migration tool completes the following steps:
- Creates gcr.io repositories in Artifact Registry for each of your listed gcr.io projects in the corresponding region.
- Suggests an IAM policy for each repository, and applies the policy or skips application depending on user preference.
- Redirects all traffic from gcr.io endpoint to Artifact Registry. Artifact Registry temporarily serves missing images by copying them from Container Registry at request time until all container images are copied to Artifact Registry.
- Copies all container images stored in your gcr.io buckets to the newly created gcr.io repositories hosted on Artifact Registry.
- Disables request-time copying. The gcr.io repository hosted on Artifact Registry no longer depends on Container Registry.
とりあえず実行してみるか
owner 権限だから大丈夫かと思ったが、権限足りなかった...
This operation requires the storage.buckets.update
storage admin role 付与する。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=user:$USER_EMAIL_ADDRESS \
--role='roles/storage.admin'
もう一度実行
recommended だったので yes 選択
エラー起きた
Artifact Registry service account に roles/storage.objectViewer 必要みたい
公式 Doc に書いてあったわ
Roles required by the Artifact Registry service account:
To ensure that the Artifact Registry service account has the necessary permissions to copy images from Container Registry to Artifact Registry, ask your administrator to grant the Artifact Registry service account the Storage Object Viewer (roles/storage.objectViewer) IAM role on the Container Registry project. For more information about granting roles, see Manage access to projects, folders, and organizations.
Your administrator might also be able to give the Artifact Registry service account the required permissions through custom roles or other predefined roles.
エラーメッセージの下に必要な command が表示されるのでそのまま打ち込む
The following command will grant the necessary access (may take a few minutes):
gcloud projects add-iam-policy-binding ....
再度実行
"cloudasset.googleapis.com" API enable する必要あるみたい。 yes 選択
次は IAM の変更について。
Container Registry に対する権限を持っていた service account に対して Artifact Registry repoAdmin role を付与するかどうか suggest される
[1] Apply above policy to the $PROJECT_ID/gcr.io Artifact Registry repository
Container Registry の IAM を引き継いで問題ないので 1 にする
今回は playground 環境なので気にしないが、 production 環境の場合は必要最低限のものを洗い出した方がいいとは思う
これで Artifact Registry の "grc.io" repository に対する権限付与が完了した模様。
そしたら次は "us.gcr.io" repository に対して 同様 wizard 出てきた。
同じプロセスを最初に作成した4つの repository で行うっぽい。
- gcr.io
- us.gcr.io
- asia.gcr.io
- eu.gcr.io
全部 " [1] Apply above policy to the ..." を選択する。
次は "*gcr.io" の traffic を Artifact Registry に redirect するかどうか。yes を選択。
これで完了!