Closed11

GCP Container Registry を Artifact Registry に移行する

nbstshnbstsh

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 に移行する。

nbstshnbstsh

Cloud Build で firebase への deploy を試すために作った project なので Container Registry にはあるのはこれだけ↓

  • firebase: firebase community builder を push したもの
  • gcf: cloud functions 用の repository (自動的に作成されたもの)

自分が作成したのは "firebase" repository だけなのでこちらを移行できれば良さげ

nbstshnbstsh

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.

とりあえず実行してみるか

nbstshnbstsh

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'
nbstshnbstsh

もう一度実行

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 ....
nbstshnbstsh

再度実行

"cloudasset.googleapis.com" API enable する必要あるみたい。 yes 選択

nbstshnbstsh

次は 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 ..." を選択する。

nbstshnbstsh

次は "*gcr.io" の traffic を Artifact Registry に redirect するかどうか。yes を選択。

これで完了!

nbstshnbstsh

Artifact Registry みてみる

以下の repository がちゃんと作成されている

  • gcr.io
  • us.gcr.io
  • asia.gcr.io
  • eu.gcr.io

nbstshnbstsh

gcr.io の中身見てみる

ちゃんと "firebase" repo の image がコピーされていることを確認

このスクラップは17日前にクローズされました