ある企業が AWS 上でコンテナ化されたアプリケーションを Amazon ECS Fargate で運用しており、アプリケーションの起動時間が遅いという問題があります。コンテナイメージのサイズが 3GB あり、ECR からのプル時間が起動の大部分を占めています。コンテナの起動時間を短縮するには、どの方法が最も効果的ですか?
- A. コンテナイメージを圧縮して S3 に保存し、起動時に展開する
- B. Fargate から EC2 のオートスケーリングに移行し、AMI にコンテナイメージを焼き込む
- C. Amazon ECR のイメージレイヤーキャッシュを活用するよう Dockerfile を最適化し、頻繁に変更されるレイヤーを最後に配置する。さらに、Amazon ECR に保存するイメージを OCI インデックスと Lazy Loading(SOCI: Seek-Optimized Container Image)を使用することで、イメージ全体のダウンロード完了前にコンテナを起動する
- D. コンテナを事前に大量に起動しておき、リクエストが来たら既存のコンテナを使用する
解答と解説を見る
正解: C
Dockerfile の最適化(変更頻度の低いレイヤーを先に配置)でレイヤーキャッシュを活用できます。AWS は ECS Fargate で SOCI(Seek-Optimized Container Image)インデックスをサポートしており、イメージ全体のダウンロードを待たずにコンテナを起動(Lazy Loading)できます。3GB のイメージでも数秒以内の起動が可能になります。またマルチステージビルドでイメージサイズそのものを削減することも重要です。 A: S3 への保存と展開は ECR より遅く、コンテナ起動のフローを複雑にします。 D: 事前起動は高い待機コストが発生します。Fargate のサーバーレスの特性を失うことになります。 B: EC2 への移行は AMI への焼き込みは可能ですが、Fargate のマネージドな特性を失い、EC2 クラスターの管理負荷が生じます。
📚 関連サービスの解説: Amazon ECR