DVAデプロイ
開発チームが Node.js アプリケーションのビルドに AWS CodeBuild を使用しています。各ビルドで `npm install` が毎回 node_modules を一から取得するため、ビルド時間が 8 分前後かかっています。依存パッケージはほとんど変化しません。buildspec.yml の変更のみでビルド時間を短縮したい場合、最も効果的な方法はどれですか。
Abuildspec の cache セクションで node_modules をパスに指定し、CodeBuild プロジェクトでローカルまたは S3 キャッシュを有効にする
✓ 正解
cache セクションにディレクトリを指定し、プロジェクトでローカル/S3 キャッシュを有効化すると CodeBuild がビルド間で node_modules を保持する。依存が不変なら install が差分処理で済み、buildspec 変更だけで時間短縮できるため最適。
Bbuildspec の env セクションに NODE_ENV=production を追加し、install フェーズを pre_build フェーズに移動する
NODE_ENV の指定や install を pre_build に移すだけでは、毎回パッケージをネットワークから取得する根本原因が解消されない。依存取得の繰り返しが残るためビルド時間は短縮されず、要件を満たさない。
CCodeBuild の環境タイプを BUILD_GENERAL1_LARGE に変更し、並列実行数を増やすよう buildspec に記述する
BUILD_GENERAL1_LARGE への変更は CPU/メモリを増やすがコストが上がる。依存取得はネットワーク I/O が主因で、CodeBuild は単一ビルド内でこの処理を並列化しないため、時間短縮効果は乏しい。
Dartifacts セクションで node_modules を成果物に含め、次回ビルドの開始時に S3 から手動で復元する
artifacts に node_modules を含め手動で S3 から復元する方式は手順が複雑で誤りやすい。CodeBuild には専用の cache 機構があり、それを使う方が自動的かつ確実なため、この手動運用は不適切。
解説
CodeBuild は buildspec の cache セクションで指定したディレクトリをビルド間で再利用できる。node_modules をキャッシュパスに登録し、プロジェクト側でローカルキャッシュ(DOCKER_LAYER/CUSTOM/SOURCE)または S3 キャッシュを有効化すると、依存が変わらない限り npm install が差分のみで完了し、ビルド時間を大幅に短縮できる。
選択肢Bの環境変数とフェーズ移動は、依存取得そのものを高速化しないため効果がない。
選択肢Cのインスタンスサイズ拡大はコスト増を招き、I/O主体の依存取得には効果が限定的で並列実行も npm install を速くしない。
選択肢Dの成果物経由の手動復元は仕組みが煩雑で、CodeBuild 標準のキャッシュ機構を使う方が確実かつ自動的。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →