ある企業がAWS CodeArtifactを使ってプライベートなMavenパッケージを管理している。社内チームが公開されているMaven Central Repositoryのパッケージも利用するが、すべてのパッケージ取得をCodeArtifactを経由させて一元管理したい。CodeArtifactの機能でこの要件を最もシンプルに実現する方法はどれか。
- A. CodeArtifactとMaven Centralを並列で参照するようMavenのsettings.xmlに両方のリポジトリURLを記述する
- B. CodeArtifactリポジトリのupstreamリポジトリとしてMaven Centralに接続するゲートウェイリポジトリ(external connection)を設定する
- C. buildspec.ymlでprivateパッケージはCodeArtifactから取得し、publicパッケージはMaven Centralから直接取得するよう設定ファイルを分ける
- D. Lambda関数でMaven Centralからパッケージをダウンロードし、CodeArtifactに手動でアップロードするパイプラインを構築する
解答と解説を見る
正解: B
CodeArtifactはupstreamリポジトリとexternal connectionの仕組みを持つ。external connectionにpublic:mavencentral(またはnpmjs・pypiなど)を設定すると、CodeArtifactリポジトリがMaven Centralへのプロキシとして機能する。クライアントはCodeArtifactのエンドポイントのみを参照すれば、プライベートパッケージはCodeArtifactから直接取得し、不在のパッケージは自動的にMaven Centralからフェッチして返す。取得したパッケージはCodeArtifactにキャッシュされるため、以降のリクエストは高速になる。これにより全パッケージ取得を一元管理できる。C・Aは複数のリポジトリ参照先を管理する必要があり、設定の複雑さが増す。DはLambda関数を別途構築・管理する運用負荷が非常に高く、CodeArtifactのネイティブ機能で実現できる要件に対して過剰な実装である。