Amazon ECS タスクの起動時間を最適化する
タスク起動をスピードアップするために、以下の推奨事項を考慮してください。
-
コンテナイメージと binpack インスタンスをキャッシュします。
EC2 起動タイプを使用する場合、Amazon ECS コンテナエージェントのプル動作を
ECS_IMAGE_PULL_BEHAVIOR
:prefer-cached
のように設定できます。キャッシュされたイメージがない場合に、リモートでイメージがプルされます。それ以外の場合は、インスタンスにキャッシュされたイメージが使用されます。キャッシュされたイメージが削除されないように、そのコンテナの自動イメージクリーンアップはオフになっています。これにより、次回起動時のイメージのプルタイムが短縮されます。コンテナインスタンスのタスク密度が高い場合、キャッシュの効果はさらに大きくなります。コンテナインスタンスはbinpack
配置戦略を使用して設定できます。コンテナイメージのキャッシュは、通常はコンテナイメージのサイズが大きい Windows ベースのワークロード (数十 GB) に特に役立ちます。binpack
配置戦略を使用する場合は、Elastic Network Interface (ENI) トランキングを使用して、各コンテナインスタンスにawsvpc
ネットワークモードでより多くのタスクを配置することを検討することもできます。ENI トランキングを使用すると、awsvpc
モードで実行できるタスク数が増加します。たとえば、同時に 2 つのタスクしか実行できない c5.large インスタンスの場合、ENI トランキングでは最大 10 のタスクを実行できます。 -
最適なネットワークモードを選択する
awsvpc
ネットワークモードが理想的な例は多数ありますが、このネットワークモードは本質的にタスク起動レイテンシーを増加させる可能性があります。これは、awsvpc
モード内の各タスクについて、Amazon EC2 API を呼び出して ENI をプロビジョニングしてアタッチする必要があるため、タスク起動に数秒のオーバーヘッドが追加されるためです。対照的に、awsvpc
ネットワークモードを使用する主な利点は、各タスクにトラフィックを許可または拒否するセキュリティグループがあることです。つまり、タスクとサービス間の通信をよりきめ細かく制御できる柔軟性が増します。デプロイ速度を優先する場合は、bridge
モードを使用してタスクの起動をスピードアップすることを検討してください。詳細については、「Amazon ECS タスクにネットワークインターフェイスを割り当てる」を参照してください。 -
タスク起動のライフサイクルを追跡して、最適化の機会を見つけます。
多くの場合、アプリケーションが起動するまでにかかる時間を知ることは困難です。アプリケーションの起動時に、コンテナイメージの起動、起動スクリプトの実行、その他の設定を行うと、驚くほど時間がかかることがあります。タスクメタデータエンドポイントを使用してメトリクスを投稿し、
ContainerStartTime
からアプリケーションがトラフィックを処理できるようになるまでのアプリケーションの起動時間を追跡できます。このデータにより、アプリケーションが起動時間全体にどのような影響を与えているかを把握し、アプリケーション固有の不要なオーバーヘッドを減らし、コンテナイメージを最適化できる領域を見つけることができます。詳細については、「Amazon ECS のキャパシティーと可用性の最適化」を参照してください。 -
最適なインスタンスタイプを選択する (EC2 起動タイプの場合)
適切なインスタンスタイプは、タスクに設定したリソース予約 (CPU、メモリなど) に基づいて選択します。したがって、インスタンスのサイズを決定する際には、1 つのインスタンスに配置できるタスクの数を計算できます。適切に配置されたタスクの簡単な例は、m5.large インスタンス (2 vCPU と 8 GB のメモリをサポート) で 0.5 vCPU と 2 GB のメモリ予約を必要とする 4 つのタスクをホストすることです。このタスク定義の予約は、インスタンスのリソースを最大限に活用します。