無限ノック › DOP 練習問題一覧 › 問題
DOPSDLC の自動化

DevOpsエンジニアはCodeBuildを使用してNode.jsアプリケーションをビルドしています。npm installステップが毎回8分かかり、ビルド時間の大半を占めています。package.jsonはほとんど変更されません。最もコスト効率よくビルド時間を短縮する方法はどれですか?

A
CodeBuildプロジェクトのLOCAL_CUSTOM_CACHEモードを有効化し、/root/.npm ディレクトリをカスタムキャッシュパスとして指定する
✓ 正解
npmはダウンロード済みパッケージを/root/.npmにキャッシュするため、LOCAL_CUSTOM_CACHEでこのディレクトリを保持すると次回ビルドでネットワークダウンロードを省略できる。S3コスト不要でnpm ciの整合性も維持され最もコスト効率が高い。
B
CodeBuildプロジェクトにS3キャッシュを設定し、node_modulesディレクトリをキャッシュパスに指定する。buildspecのinstallフェーズでキャッシュが存在すればnpm ciをスキップするロジックを追加する
ビルドホストをまたいだキャッシュ永続化は可能だが、大量ファイルのS3アップロード・ダウンロードオーバーヘッドが発生する。npm ciをスキップすると依存関係の整合性・再現性が失われDevOpsベストプラクティスに反するため不適切。
C
AWS CodeArtifactリポジトリをnpmの上流として設定し、CodeBuildがCodeArtifactのキャッシュからパッケージを取得するようnpmrcを構成する
npmjsのプロキシキャッシュとして機能するがパッケージダウンロードのネットワーク往復は毎回発生するためローカルキャッシュより速度向上が限定的で、CodeArtifactリポジトリの管理コストと利用料も追加で発生する。
D
CodeBuildのカスタムDockerイメージにnode_modulesをプリインストールしてECRに保存し、そのイメージをビルド環境として使用する
node_modulesをプリインストールしたDockerイメージはビルド起動時から即利用可能だが、package.jsonが変更されるたびにイメージ再ビルドとECRへのプッシュが必要となり、運用コストと維持管理の手間が大きくなる。

解説

npmはダウンロードしたパッケージを/root/.npmにキャッシュします。CodeBuildのLOCAL_CUSTOM_CACHEで/root/.npmをキャッシュパスに指定すると、次回以降のnpm installはネットワークダウンロードなしにキャッシュからパッケージを展開でき大幅な高速化が可能です。追加のAWSサービスコストが発生せず、npm installやnpm ciもそのまま実行されるため依存関係の整合性も維持されます。 S3キャッシュでnode_modulesをキャッシュしnpm ciをスキップする方法はビルドホストをまたいだキャッシュ永続化が可能ですが、大量ファイルのS3アップロード・ダウンロードオーバーヘッドが発生し、npm ciをスキップすると依存関係の再現性と整合性が失われるためDevOpsのベストプラクティスに反します。 CodeArtifactはnpmjsのプロキシキャッシュとして機能しますが毎回ネットワークアクセスが必要であり、ローカルキャッシュより速度向上が限定的で追加のサービスコストも発生します。 カスタムDockerイメージにnode_modulesをプリインストールする方法はビルド時間を短縮できますが、package.jsonが変更されるたびにイメージの再ビルドとECRへのプッシュが必要となり運用コストが増大します。

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

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

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