仮想リポジトリの概要

このドキュメントでは、仮想リポジトリの概要について説明します。仮想リポジトリの作成方法については、仮想リポジトリを作成するをご覧ください。

Artifact Registry の割り当てと上限は、仮想リポジトリに適用されます。

仮想リポジトリの仕組み

仮想リポジトリは、1 つ以上のアップストリーム リポジトリから同じ形式でアーティファクトをダウンロード、インストール、デプロイするための単一のアクセス ポイントとして機能します。アップストリーム リポジトリは、Artifact Registry の標準リポジトリまたはリモート リポジトリになります。

その他のリポジトリ モードは以下のとおりです。

  • 標準: デフォルトのリポジトリ モード。標準リポジトリに非公開パッケージなどのアーティファクトを直接アップロードまたは公開します。ダウンロードは個々の標準リポジトリから直接行えますが、仮想リポジトリでリポジトリのグループにアクセスするとツールの構成が簡素化されます。
  • リモート(言語パッケージのリポジトリのみ): Maven Central や PyPI などの公開リポジトリ内のアーティファクトのプルスル― キャッシュ。 外部依存関係をより細かく制御できるようにパブリック リポジトリのプロキシとして機能します。

ユースケースと利点

シンプルなクライアント構成

リポジトリへの読み取りアクセスのみが必要なタスクでは、単一の Artifact Registry リポジトリを構成するだけで複数のアップストリーム リポジトリに保存されているアーティファクトにアクセスできます。

例:

  • Maven パッケージの仮想リポジトリは、Artifact Registry 標準リポジトリの非公開 Java パッケージと、Maven Central の公開パッケージをキャッシュに保存するリモート リポジトリの公開 Java パッケージを提供できます。
  • 仮想リポジトリは、さまざまなチームが所有する複数のアップストリーム標準リポジトリから非公開の Python パッケージを提供できます。各チームは各自のアップストリーム リポジトリへの書き込みアクセス権を持っていますが、仮想リポジトリを使用して他のチームからパッケージをダウンロードします。
依存関係の安全な解決

リクエストされたアーティファクトが複数のアップストリーム リポジトリ内にある場合に Artifact Registry が選択するリポジトリをより詳細に制御できるように、アップストリーム リポジトリに優先度を割り当てることができます。

Python pip ツールなどの一部のツールでは、非公開リポジトリと公開リポジトリが混在してクライアントに構成されている場合に検索順序を制御する方法が提供されていません。このタイプの構成は、依存関係の混乱攻撃に対して脆弱です。この場合、悪意のあるコードを含むパッケージの新しいバージョンが公開リポジトリにアップロードされて、クライアントがその不正なバージョンを選択します。

このリスクを軽減するために、リモート リポジトリと仮想リポジトリを併用できます。

  1. 公開リポジトリのプロキシとしてリモート リポジトリを作成する。
  2. プライベート パッケージの標準リポジトリを作成する。
  3. 両方のリポジトリに同じパッケージのバージョンが存在する場合は、標準リポジトリを優先するように構成された仮想リポジトリを作成する。
  4. 仮想リポジトリからのみ読み取るようにパッケージ管理システムとその他のツールを構成し、クライアント ロジックにリポジトリの選択が含まれないようにする。

依存関係の管理に関するその他のベスト プラクティスについては、依存関係の管理をご覧ください。

仮想リポジトリがアップストリーム リポジトリを選択する仕組み

各アップストリーム リポジトリには、構成された優先度が必要です。優先度は、順位ではなく重みとして機能する整数です。つまり、優先度の高い値を持つリポジトリが、優先度の低いリポジトリよりも優先されます。

複数のアップストリーム リポジトリにあるアーティファクトをリクエストすると、Artifact Registry は次の優先順位付けロジックを使用します。

  • 値が最も高いリポジトリを優先する。たとえば、10 の値は 1 の値よりも高い優先度として扱われる。
  • 複数のアップストリーム リポジトリが同じ優先度を持つ場合、アーティファクトはそれらのリポジトリのいずれかから提供できる。

仮想リポジトリと追加のリポジトリを検索するようにクライアントを直接構成する場合、クライアントは Artifact Registry の外部にあるリポジトリからアーティファクトをダウンロードする可能性があります。

たとえば、PyPI と仮想リポジトリを検索するように Python pip ツールを構成すると、pip はどのリポジトリから来たかにかかわらず、常にパッケージの最新バージョンを選択するため、パッケージは PyPI から直接ダウンロードされる可能性があります。pip が仮想リポジトリのみを検索するように構成されている場合は、すべてのアップストリーム リポジトリ(PyPI のプロキシとして機能するアップストリーム リモート リポジトリを含む)の優先度を制御できます。

サポートされているリポジトリ形式

次の Artifact Registry リポジトリ形式の仮想リポジトリを作成できます。

言語パッケージ:

OS パッケージ:

Artifact Registry を初めて使用する場合は、クイックスタートを利用して、これらの形式の標準リポジトリの設定について確認できます。

制限事項

Artifact Registry の割り当てと上限に加えて、仮想リポジトリには次の制限があります。

  • アップストリーム リポジトリは、仮想リポジトリと同じリージョンまたはマルチリージョンに存在する必要があります。ただし、Google Cloud プロジェクトが異なっていても構いません。
  • Maven 仮想リポジトリでは、バージョン ポリシーをスナップショットまたはリリースに設定できません。

プレビュー期間中は、Apt リポジトリと Yum リポジトリに次の制限事項が適用されます。

  • 標準リポジトリはアップストリーム リポジトリとしてのみ使用できます

Apt と Yum の標準リポジトリでは、パッケージがインポート、アップロード、または削除されると、パッケージ インデックスが非同期で更新されます。小規模なリポジトリの場合、インデックスの再生成にかかる時間は数秒です。大規模なリポジトリの場合、再インデックス化に数分以上かかることがあります。再インデックス化が完了すると、リポジトリの変更が Apt および Yum クライアントに表示されます。

次のステップ