Fargate 上の Linux コンテナにおける Amazon ECS のコンテナイメージのプル動作
すべての Fargate タスクは、専用のシングルユース、シングルテナントのインスタンスで実行されます。Fargate 上で Linux コンテナを実行すると、コンテナイメージまたはコンテナイメージレイヤーはインスタンスにキャッシュされません。したがって、タスクで定義されたコンテナイメージごとに、コンテナイメージ全体を各 Fargate タスクのコンテナイメージレジストリからプルする必要があります。イメージをプルするのにかかる時間は、Fargate タスクを開始するのにかかる時間と直接相関しています。
イメージのプル時間を最適化するために、次の点を考慮してください。
- コンテナイメージの近接性
-
コンテナイメージのダウンロードにかかる時間を短縮するには、データをコンピューティングにできるだけ近い場所に配置します。コンテナイメージをインターネット経由または AWS リージョン 間でプルすると、ダウンロード時間に影響する可能性があります。コンテナイメージは、タスクを実行するのと同じリージョンに保存することをお勧めします。コンテナイメージを Amazon ECR に保存する場合は、VPC インターフェイスエンドポイントを使用することでイメージのプル時間をさらに短縮できます。詳細については、「Amazon ECR ユーザーガイド」の「Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。
- コンテナイメージのサイズ削減
-
コンテナイメージのサイズは、ダウンロード時間に直接影響します。コンテナイメージのサイズまたはコンテナイメージレイヤーの数を減らすことで、イメージのダウンロードにかかる時間を短縮できます。軽量なベースイメージ (最小の Amazon Linux 2023 コンテナイメージなど) は、従来のオペレーティングシステムのベースイメージに基づくイメージよりも大幅に小さくすることができます。最小イメージの詳細については、「Amazon Linux 2023 ユーザーガイド」の「AL2023 の最小コンテナイメージ」を参照してください。
- 代替の圧縮アルゴリズム
-
多くの場合、コンテナイメージレイヤーは、コンテナイメージレジストリにプッシュされるときに圧縮されます。コンテナイメージレイヤーを圧縮することで、ネットワーク経由で転送され、コンテナイメージレジストリに保存されるデータの量を削減できます。コンテナランタイムによってコンテナイメージレイヤーがインスタンスにダウンロードされた後、そのレイヤーは解凍されます。使用される圧縮アルゴリズムとランタイムに使用できる vCPU の量は、コンテナイメージの解凍にかかる時間に影響します。Fargate では、タスクのサイズを増やすか、よりパフォーマンスの高い zstd 圧縮アルゴリズムを利用することで、解凍にかかる時間を短縮できます。詳細については、GitHub の「ztsd
」を参照してください。Fargate のイメージを実装する方法については、「Reducing AWS Fargate Startup Times with zstd Compressed Container Images 」を参照してください。 - コンテナイメージの遅延読み込み
-
大きなコンテナイメージ (> 250 mb) の場合、すべてのコンテナイメージをダウンロードするのではなく、コンテナイメージを遅延読み込みするのが最適である場合があります。Fargate では、Seekable OCI (SOCI) を使用して、コンテナイメージレジストリからコンテナイメージを遅延読み込みできます。詳細については、GitHub の「soci-snapshotter
」と「Seekable OCI (SOCI) を使ったコンテナイメージの遅延読み込み」を参照してください。