無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

開発者が AWS CodeBuild を使って Python アプリケーションをビルドしています。`buildspec.yml` の `install` フェーズで `pip install -r requirements.txt` を実行していますが、ビルドのたびに同じパッケージを毎回ダウンロードするため、ビルドに 15〜20 分かかっています。最小限の変更でビルド時間を大幅に短縮するための最も効果的な方法はどれですか?

A
`buildspec.yml` の `cache` セクションで S3 キャッシュを設定し、`pip` のキャッシュディレクトリ(`/root/.cache/pip`)をキャッシュ対象パスに指定する。
✓ 正解
CodeBuild の S3 キャッシュ機能を使うと、`pip` のローカルキャッシュディレクトリをビルド間で S3 を介して再利用できます。2回目以降のビルドではパッケージを再ダウンロードせずキャッシュから復元するため、ビルド時間を大幅に短縮できます。`buildspec.yml` の `cache.paths` に `/root/.cache/pip` を追加するだけで設定できます。
B
CodeBuild のコンピューティングタイプを `BUILD_GENERAL1_LARGE` にアップグレードしてネットワーク帯域幅と処理速度を向上させる。
コンピューティングタイプのアップグレードはCPU性能を向上させますが、ネットワークダウンロードがボトルネックの場合は効果が限定的であり、キャッシュの方が根本的な解決策です。
C
`pip install` コマンドに `--no-deps` フラグを追加して依存関係の解決処理をスキップする。
`--no-deps` フラグは依存パッケージのインストール自体をスキップするオプションです。依存パッケージのダウンロードは省かれますが、requirements.txt に直接記載されていない依存関係が実行時に欠落し、アプリが動作しなくなるリスクがあります。
D
CodePipeline のステージに並列アクションを追加し、複数の CodeBuild プロジェクトで依存パッケージを分散してインストールする。
CodePipeline の並列化は独立したステージの同時実行に有効ですが、単一の `pip install` コマンドをこの方法で分散させることはできません。

解説

CodeBuild の S3 キャッシュ機能を使うと、`pip` のローカルキャッシュディレクトリをビルド間で S3 を介して再利用できます。2回目以降のビルドではパッケージを再ダウンロードせずキャッシュから復元するため、ビルド時間を大幅に短縮できます。`buildspec.yml` の `cache.paths` に `/root/.cache/pip` を追加するだけで設定できます。 選択肢BのコンピューティングタイプのアップグレードはCPU性能を向上させますが、ネットワークダウンロードがボトルネックの場合は効果が限定的であり、キャッシュの方が根本的な解決策です。 選択肢C の `--no-deps` フラグは依存パッケージのインストール自体をスキップするオプションです。依存パッケージのダウンロードは省かれますが、requirements.txt に直接記載されていない依存関係が実行時に欠落し、アプリが動作しなくなるリスクがあります。 選択肢D の CodePipeline の並列化は独立したステージの同時実行に有効ですが、単一の `pip install` コマンドをこの方法で分散させることはできません。

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

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

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