はじめに
本記事はContainer RegistryからArtifact Registryに移行する方法について記載しています。
リリースノートのMay 15, 2023よりContainer Registryは非推奨になり、Artifact Registryに置き換わります。
Artifact Registryの移行に関する概要及び機能の比較については、Container Registry からの移行より確認できます。
Artifact Registry
Artifact Registryは、Dockerイメージに限らず、ビルド アーティファクトを保存、管理、保護します。
次のアーティファクト形式のリポジトリを作成できます。
- コンテナ イメージ: Docker、Helm
- 言語パッケージ: Java、Node.js、Python
- OS パッケージ: Debian、RPM
料金はArtifact Registry の料金から確認できます。
脆弱性スキャンを使用してコンテナイメージに対するスキャンを行うことができます。
料金については有効にしている場合、課金されます。
移行手順
標準リポジトリの移行手順は、公式ドキュメントの標準リポジトリへの移行より確認できます。
所感として移行作業自体は問題なく、簡単に終えることができました。
イメージをコピーするツールが用意されているため、Container RegistryからArtifact Registryにイメージをコピーできます。既存のイメージをArtifact Registryにプッシュする作業は不要です。
また、公式ドキュメントでは権限設定の記載がありますが、既に権限を持っている場合は不要です。
API有効化
Artifact Registry を使用するためには、Google CloudコンソールからArtifact Registry APIを有効にします。
リポジトリ作成
Artifact Registryを開き「リポジトリを作成」を押します。
「作成」を押します。
イメージのコピー
Container Registry からのイメージをコピーするを参考にしながら、移行ツールとしてgcraneを利用します。
gcraneのダウンロード後、以下のようなコマンドを実行します。
※PROJECT_ID
のみ任意の値に変更
- asia.gcr.ioの例
gcrane cp -r asia.gcr.io/PROJECT_ID asia-docker.pkg.dev/PROJECT_ID/asia.gcr.io
コマンドを実行後、イメージのコピーが完了するのを待ちます。
確認
イメージのコピーが完了すると、以下のような4つのリポジトリについて作成されたことが確認できます。
エクスクラメーションマークのアイコンを押すと、以下のようなメッセージが確認できます。
既知のイメージについて、全てコピーできたことが確認できます。
Container Registryを使用していた場合は、Cloud Storageにイメージが保存されます。
従ってArtifact Registryに移行完了後、無駄な課金を発生させないたためには、Cloud Storageに残っているイメージは削除しましょう。
(※削除する場合は、Container Registryのイメージが参照されていないことを確認すること)
公式のツールではありませんが、gcr-cleanerというツールが存在します。
ルーティング
Container RegistryからArtifact Registryにアクセスを切り替えるために、ルーティングを有効にします。
権限確認
以下のような画面が表示される場合は、権限が不足しています。
「Artifact Registryにルーティング」を押すと以下のようなメッセージが表示されるため、不足している権限が確認できます。
権限追加
コンソールから権限を追加する場合は、IAMを開いて対象のプリシンパルにアクセス権を付与します。
再度、Artifact Registryの設定画面にアクセスすると、「Artifact Registryのルーティング」のボタンが確認できます。
「Artifact Registryにルーティング」を押します。
Artifact Registryに対するルーティングが有効になりました。
コンソールからContainer Registryにアクセスすると、Artifact Registryにリダイレクトされます。
検証
Artifact Registryが使用できる状態になったため、イメージのプッシュができることも確認します。
イメージのプッシュ
テストとしてイメージのプッシュを行うために、nginxのイメージを取得します。
$ docker pull nginx
タグ付けを行います。
$ docker tag nginx asia.gcr.io/<Project ID>/test-image
イメージをプッシュします。
$ docker push asia.gcr.io/pj-ccoe-prd/test-image
イメージがプッシュされて、アップロードされたことを確認します。
動作確認
Cloud Runの場合は、影響を受けるジョブの「コンテナ イメージの URL」を編集して、Artifact RegistryのURLに更新するだけです。
設定変更後、問題なくジョブを実行できることを確認します。
おわりに
Dockerイメージ以外も扱うことができるようなので、CI/CDツールと統合するなどパイプラインの構築に使えると思います。