Amazon ECS タスクの起動時間を最適化する - Amazon Elastic Container Service

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 つのタスクをホストすることです。このタスク定義の予約は、インスタンスのリソースを最大限に活用します。