無限ノック › DVA 練習問題一覧 › 問題
DVAデプロイ

ある開発チームがAWS CodeBuildでJavaのMavenプロジェクトをビルドしています。ビルドのたびにMavenが全依存ライブラリをインターネットからダウンロードするため、ビルドに15分かかっています。ビルド時間を短縮するために依存ライブラリをキャッシュしたいと考えています。buildspec.ymlで設定する最も効果的な方法はどれですか?

A
`pre_build`フェーズに`mvn dependency:go-offline`を追加して依存ライブラリをビルド前にローカルへ事前ダウンロードする
`mvn dependency:go-offline`はその実行時に依存ライブラリをダウンロードしますが、CodeBuildのビルドコンテナは毎回新規作成されるため次のビルドにキャッシュが引き継がれず、ビルド時間短縮の効果がありません。
B
S3キャッシュを設定したCodeBuildプロジェクトで、buildspec.ymlの`cache.paths`に`/root/.m2/repository`を指定する
✓ 正解
CodeBuildのS3キャッシュ機能とbuildspec.ymlの`cache.paths`を組み合わせることで、Mavenローカルリポジトリをビルド間で永続化でき、2回目以降のビルドで依存ライブラリのダウンロードをスキップして大幅に時間を短縮できます。
C
Maven依存ライブラリを含むカスタムDockerイメージを作成してAmazon ECRに保存し、ビルド環境イメージとして利用する
依存ライブラリを含むカスタムDockerイメージはビルド高速化に有効ですが、ライブラリ更新のたびにイメージの再ビルドとECRへのプッシュが必要になり、S3キャッシュより運用コストと管理負荷が高くなります。
D
`MAVEN_OPTS`環境変数でローカルリポジトリのパスを変更してMavenの依存ライブラリ解決を高速化する
MAVEN_OPTSによるローカルリポジトリパスの変更はMavenの設定変更に過ぎず、CodeBuildのビルドコンテナは毎回新規作成されるため依存ライブラリを永続化できず、ビルド時間の短縮には効果がありません。

解説

CodeBuildのキャッシュ機能を使うと、ビルド間でファイルを再利用できます。S3キャッシュを設定することでMavenのローカルリポジトリ(`/root/.m2/repository`)をビルド間で永続化でき、2回目以降のビルドではダウンロード済みの依存ライブラリがキャッシュから復元されるため、大幅にビルド時間を短縮できます。 buildspec.ymlの設定例: cache: paths: - '/root/.m2/repository/**/*' CodeBuildプロジェクトでキャッシュタイプを「Amazon S3」に設定し、キャッシュバケットを指定する必要があります。インスタンスレベルのローカルキャッシュ(LOCAL_CUSTOM_CACHE)も利用可能です。 選択肢Aの`mvn dependency:go-offline`はその実行時に依存関係をダウンロードするコマンドですが、CodeBuildのビルドコンテナは毎回新規作成されるためキャッシュは次のビルドに引き継がれません。 選択肢CのカスタムDockerイメージへの事前インストールは速度向上に効果的ですが、依存ライブラリが更新されるたびにイメージの再ビルドとECRへのプッシュが必要になり、管理コストが高くなります。 選択肢DのMAVEN_OPTSによるパス変更はMavenの設定変更に過ぎず、ビルドコンテナが毎回破棄・再作成されるCodeBuildの仕組みでは依存ライブラリを永続化できません。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る