DVAデプロイ
開発チームがNode.jsアプリケーションをAWS CodeBuildでビルドしています。各ビルドで毎回`npm install`が実行され数百のパッケージをダウンロードするため、ビルド時間が10分を超えています。依存関係は頻繁には変わりません。ビルド時間を短縮する最も適切な方法はどれですか。
Abuildspec.ymlのcacheセクションでnode_modulesをパスに指定し、CodeBuildプロジェクトにS3キャッシュまたはローカルキャッシュを構成する
✓ 正解
CodeBuildのcacheは依存関係ディレクトリをビルド間で保持し再ダウンロードを省くため、変更の少ないnode_modulesのビルド時間短縮に直接効く。S3キャッシュかローカルキャッシュを選べる点も要件に合致する。
BCodeBuildのコンピューティングタイプをより大きいインスタンスに変更し、並列ビルドを有効にする
コンピューティングタイプを大きくしてもnpm installのボトルネックはネットワークダウンロードであり、CPU/メモリ増強では本質的な時短にならずコストだけ増える。CodeBuildに任意の並列ビルド設定はない。
Cビルドごとにnode_modulesをCodeCommitリポジトリにコミットしてソースから取得する
node_modulesをリポジトリにコミットするとリポジトリが肥大化し、OS/アーキ依存のバイナリで環境差異が生じる。依存管理のアンチパターンでありキャッシュより劣る。
DCodePipelineの並列アクションを使い、複数のCodeBuildプロジェクトでパッケージを分割インストールする
複数CodeBuildへの分割は構成が複雑化し依存解決の一貫性が崩れる。インストール処理自体の重複は残るため、キャッシュ再利用ほどの効果は得られない。
解説
CodeBuildのキャッシュ機能は、ビルド間で再利用可能なディレクトリ(node_modules等の依存関係)を保存し、再ダウンロードを回避することでビルド時間を短縮します。buildspec.ymlの`cache.paths`に対象ディレクトリを指定し、プロジェクト設定でS3キャッシュ(永続・チーム共有向き)またはローカルキャッシュ(同一ホスト再利用向き)を有効化します。
依存関係が頻繁に変わらないケースに最適です。
選択肢Bのコンピューティングタイプ拡大は、ダウンロード自体がネットワークI/Oに依存するため効果が限定的でコスト増を招く。
選択肢CのCodeCommitへのnode_modulesコミットは、リポジトリ肥大化と環境差異の問題を生み、依存管理のアンチパターン。
選択肢Dの分割インストールは構成が複雑化し、依存解決の一貫性が崩れる上にキャッシュほどの効果がない。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →