【正解】D
【0からの解説】
①前提知識:Artifact Registry には 3 種類のリポジトリ モードがあります。
・standard(標準)リポジトリ:自分で push したイメージやパッケージを保存する通常のリポジトリ。
・remote(リモート)リポジトリ:Docker Hub などのアップストリーム(外部の公開レジストリ)のプロキシとして動作し、初回の pull 時に取得したイメージを自動的にキャッシュします。以後は同じイメージを Artifact Registry から返すため、アップストリームの障害やレート制限の影響を受けにくくなり、ビルドの再現性も高まります。
・virtual(仮想)リポジトリ:複数の上流リポジトリ(standard や remote)をまとめて 1 つのエンドポイントとして公開する集約用リポジトリ。優先度(priority)に従って上流リポジトリを検索します。
②要件の整理:(a) パブリックなアップストリームへの依存を減らす、(b) すべてのコンテナ依存関係をキャッシュする、(c) 手作業とメンテナンスを最小限にする、の 3 点です。アップストリーム レジストリは複数(「アップストリーム レジストリごとに」)ある前提です。
③正解の理由:アップストリームごとに remote リポジトリを作れば、イメージは pull されたときに自動でキャッシュされ、手動のアップロード作業は不要です((a)(b)(c) を満たす)。さらにそれらを 1 つの virtual リポジトリの背後にまとめれば、CI パイプラインは単一のエンドポイントだけを参照すればよく、アップストリームを追加・変更しても virtual リポジトリの上流設定を変えるだけでパイプライン側の設定変更が不要になります。複数のアップストリームを扱う場合のメンテナンス負荷を最も小さくできる構成が D です。
【誤りの選択肢】
A:remote リポジトリによる自動キャッシュは正しい方向ですが、アップストリームごとに別のエンドポイントを CI パイプラインが個別に参照する必要があります。アップストリームの追加・変更のたびにパイプラインの設定(イメージ参照)を書き換える必要があり、virtual リポジトリで 1 か所に集約する D に比べてメンテナンス負荷が大きくなります。
B:standard リポジトリは自動キャッシュの機能を持たないため、使用するイメージを人手で取得してアップロードし、新しいバージョンが出るたびに更新し続ける必要があります。「手作業とメンテナンスを最小限に」という要件に反します。
C:virtual リポジトリで集約している点は良いものの、その上流が standard リポジトリなので、結局イメージを手動でアップロードする作業が残ります。キャッシュが自動化されないため要件を満たしません。
【参考】
リモート リポジトリの概要 | Artifact Registry仮想リポジトリの概要 | Artifact Registry