Container Registry から Artifact Registry に自動的に移行する

自動移行ツールを使用して、Container Registry から Artifact Registry でホストされている gcr.io リポジトリに移行します。

Artifact Registry gcr.io リポジトリへの移行は、ダウンタイムやサービスの停止を必要とせずに、トラフィックを受信する Container Registry エンドポイントで実行できます。

自動移行ツールでは、次の操作を実行できます。

  • 対応するリージョンに一覧表示された gcr.io プロジェクトごとに、Artifact Registry で gcr.io リポジトリを作成します。
  • 各リポジトリの IAM ポリシーを提案し、ユーザーの好みに応じてポリシーを適用するか、適用をスキップします。
  • gcr.io エンドポイントからのすべてのトラフィックを Artifact Registry にリダイレクトします。
  • リダイレクトをすでに有効にしている場合でも、Container Registry に保存されているすべてのコンテナ イメージを Artifact Registry gcr.io リポジトリにコピーします。

始める前に

  1. Install the Google Cloud CLI.

  2. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  3. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  4. Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API


    この手順を省略すると、自動移行ツールによって Artifact Registry API を有効にするよう求められます。

必要なロール

自動移行ツールを使用して Artifact Registry の gcr.io リポジトリに移行するには、次のロールが必要です。

サービス アカウントのロール:

artifact-registry-same-project-copier@system.gserviceaccount.com のメールアドレスまたは Artifact Registry サービス アカウントgcr.io 移行サービス アカウントを使用して、Artifact Registry の gcr.io リポジトリに移行できます。

移行に使用するサービス アカウントに、Container Registry から Artifact Registry にイメージをコピーするために必要な権限があることを確認するには、移行に使用するサービス アカウントに、Container Registry のプロジェクト、フォルダ、または組織に対する Storage オブジェクト閲覧者 roles/storage.objectViewer)IAM ロールを付与するよう管理者に依頼します。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

管理者は、カスタムロールや他の事前定義ロールを使用して、移行に使用するサービス アカウントに必要な権限を付与することもできます。

ユーザーロール:

Artifact Registry でホストされている gcr.io リポジトリに移行するために必要な権限を取得するには、移行する Google Cloud 組織またはプロジェクトに対する Artifact Registry Container Registry 移行管理者ロール roles/artifactregistry.containerRegistryMigrationAdmin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Artifact Registry でホストされている gcr.io リポジトリに移行する

gcloud artifacts docker upgrade migrate コマンドを使用して、単一の Google Cloud プロジェクトまたは複数の Google Cloud プロジェクトを同時に移行できます。

gcr.io リポジトリに移行するには、次のコマンドを実行します。

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS

PROJECTS は、Artifact Registry でホストされている gcr.io リポジトリに移行する単一プロジェクトのプロジェクト ID、または Artifact Registry でホストされている gcr.io リポジトリに移行するプロジェクト ID のカンマ区切りのリストです。

移行ツールは次の手順を実施します。

  • 対応するリージョンに一覧表示された gcr.io プロジェクトごとに、Artifact Registry で gcr.io リポジトリを作成します。
  • 各リポジトリの IAM ポリシーを提案し、ユーザーの設定に応じてポリシーを適用するか、適用をスキップします。
  • gcr.io エンドポイントからのすべてのトラフィックを Artifact Registry にリダイレクトします。Artifact Registry は、すべてのコンテナ イメージが Artifact Registry にコピーされるまで、リクエスト時に Container Registry からコピーすることで、不足しているイメージを一時的に提供します。
  • gcr.io バケットに保存されているすべてのコンテナ イメージを、Artifact Registry でホストされている新しく作成された gcr.io リポジトリにコピーします。
  • リクエスト時のコピーを無効にします。Artifact Registry でホストされている gcr.io リポジトリが Container Registry に依存しなくなりました。

Container Registry から pull された過去 30~180 日間のイメージのみをコピーする場合は、--recent-images=DAYS フラグを指定します。DAYS は、ツールが pull をチェックする日数(30~180 日)に置き換えます。

最近アップロードされた各イメージの特定の数のバージョンをコピーする場合は、--last-uploaded-versions=VERSIONS フラグを含めることができます。VERSIONS は、各イメージでコピーするバージョン数に置き換えます。コピー中に新しい画像がアップロードされると、指定されたバージョン数よりも多くのバージョンがコピーされることがあります。

--recent-images フラグと --last-uploaded-versions フラグは相互に排他的であり、同時に使用することはできません。

エラーやタイムアウトが発生した場合は、コマンドを安全に再実行できます。完了した手順はスキップされます。

カナリア読み取りで移行を遅くする

--canary-reads フラグを使用すると、読み取りの割合のみを Artifact Registry にロールアウトできます。書き込みはロールアウトされません。Artifact Registry から pull された不足しているイメージは、リクエスト時に Container Registry からコピーされます。

カナリア読み取りによる移行には、次の 2 つの利点があります。

  • Artifact Registry へのロールアウトは、まず少数のリクエストでテストできます。
  • プロセスのほとんどでイメージが Container Registry に push されるため、ロールバックする方が安全です。

次の手順をおすすめします。

  1. カナリア リードの割合を 1% に設定するには、次のコマンドを実行します。

    gcloud artifacts docker upgrade migrate \
        --projects=PROJECTS \
        --canary-reads=1
    
  2. すべてが正常に動作していることを確認します。

  3. カナリア リードの割合を 10% に設定するには、次のコマンドを実行します。

    gcloud artifacts docker upgrade migrate \
        --projects=PROJECTS \
        --canary-reads=10
    
  4. すべてが正常に動作していることを確認します。

  5. カナリア リードを 100% に設定するには、次のコマンドを実行します。

    gcloud artifacts docker upgrade migrate \
        --projects=PROJECTS \
        --canary-reads=100
    

この時点で、すべての読み取りは Artifact Registry に送信され、すべての書き込みは引き続き Container Registry に送信されます。

移行を完了するには、--canary-reads フラグなしで artifacts docker upgrade migrate コマンドを実行して、Artifact Registry にも書き込みを送信します。

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS

カナリア読み取りをロールバックする

カナリア読み取りをロールバックするには、次のコマンドを実行します。

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS \
    --canary-reads=0

gcloud artifacts settings disable-upgrade-redirection コマンドまたは gcloud artifacts settings enable-upgrade-redirection コマンドを実行すると、カナリア読み取りも無効になります。

AnalyzeIamPolicy の割り当て

多数のプロジェクトを移行していて、AnalyzeIamPolicy 割り当てが不足している場合は、--no-use-analyze-iam フラグを使用できます。移行に --no-use-analyze-iam フラグを使用すると、使用しない場合よりも処理が遅くなりますが、AnalyzeIamPolicy 割り当てに対するリクエストの送信を回避できます。

次のステップ