gcloudコマンドで Container Registry から Artifact Registry に移行する

GMO NIKKOのT.Nです。

Google Cloud の Container Registry が非推奨になったことで、
既に Artifact Registry に移行したプロジェクトや、これから移行するプロジェクトも多いと思います。

2024年3月から自動移行ツールが使用できるようになったため、
今回は自動移行ツールでの移行について書きました。

移行方法

移行方法は以下の Google Cloud のサイトに記載されています。
https://cloud.google.com/artifact-registry/docs/transition/auto-migrate-gcr-ar?hl=ja

移行用のコマンドを実行すると、移行に必要な手順が自動的に実行されます。

移行先は以下の二通りがあります。

今回は標準の Artifact Registry リポジトリに移行する方を行いました。

実行するコマンド

標準の Artifact Registry リポジトリへの移行は、
以下のコマンドで行うことができます。

  • GCR_HOSTNAME
    • Container Registry のホスト名(gcr.io、us.gcr.io、asia.gcr.ioなど。)
  • GCR_PROJECT
    • 移行元の Google Cloud プロジェクト ID
  • AR_PROJECT
    • 移行先の Google Cloud プロジェクト ID
  • AR_REPOSITORY
    • 移行先のリポジトリ名

今回はasia.gcr.ioからの移行だったので、
asiaのマルチリージョンのリポジトリを、事前に Artifact Registry に作成しておきました。

移行コマンドを実行するためには、
Artifact Registry サービスアカウントに以下のロールを設定する必要があります。

  • roles/storage.objectViewer (Storage オブジェクト閲覧者)

ロールを設定していないと以下のようなエラーが出ます。


移行コマンドを実行すると、
移行が始まり、IAMの設定に関する選択肢が表示されます。
回答するとimageのコピーが始まり、待っていると移行が完了します。

完了後には、
設定ファイルなどで Container Registry を参照している箇所を、
必要に応じて Artifact Registry を参照するように修正します。

今回の弊社での移行では、
移行後に Artifact Registry にDockerイメージをpushした時に、
以下のようなメッセージが表示されたので、

denied: Unauthenticated request. Unauthenticated requests do not have permission “artifactregistry.repositories.uploadArtifacts” on resource “projects/******************/locations/asia/repositories/******” (or it may not exist)

以下のコマンドで、~/.docker/config.jsonの内容を変更しました。

まとめ

今回は gcloudコマンドで Container Registry から Artifact Registry に移行する方法についての記事でした。
今後移行するプロジェクトの参考になると良いです。