Amazon ECS のタスクにメモリを割り当てるにはどうすればよいですか?

所要時間4分
0

Amazon Elastic Container Service (Amazon ECS) を使用してタスクにメモリを割り当てたいと考えています。

簡単な説明

Amazon ECS では、メモリはタスクレベルと各コンテナレベルの両方で定義できます。タスクレベルで定義されるメモリは、タスクのメモリのハードリミットです。コンテナレベルでは、メモリをタスクに割り当てるために memoryReservation (ソフト制限) と memory (ハード制限) の 2 つのパラメータがあります。Amazon EC2 インスタンスでホストされるタスクの場合、タスクレベルのメモリフィールドはオプションで、任意の値を使用できます。タスクレベルのメモリ値が指定されている場合、コンテナレベルのメモリ値はオプションです。各パラメータの値は、タスクの実行時に Amazon ECS コンテナインスタンスの使用可能なメモリユニットから減算されます。この計算は、タスク定義のソフト制限、ハード制限、またはタスクレベルのメモリに基づきます。詳細については、「クラスター予約」を参照してください。

注: memory および memoryReservation パラメータは、Amazon ECS タスク定義の コンテナ定義パラメータ として設定されます。コンテナレベルの memorymemoryReservation の両方の値を指定する場合、 memorymemoryReservation より大きい必要があります。memoryReservation を指定した場合、その値はコンテナが配置されているコンテナインスタンスの使用可能なメモリリソースから減算されます。それ以外の場合、 memory の値が使用されます。詳細については、メモリ をご参照ください。

解決方法

開始する前に、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが含まれている Amazon ECS クラスターがあることを確認します。クラスターの作成の詳細については、「Creating a cluster using the classic console」(従来のコンソールを使用したクラスターの作成) を参照してください。クラスターおよびコンテナインスタンスの設定の詳細については、「コンテナインスタンスメモリ管理」を参照してください。

コンテナインスタンスのメモリ割り当てを表示する

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. 作成したクラスターを選択します。
  4. [ECS Instances] ビューを選択し、[Container Instance] 列から、作成したクラスターに含まれているコンテナインスタンスを選択します。
    注: [Details] ペインには、[Available] 列のメモリが [Registered] 列のメモリと等しいことが示されます。
  5. インスタンスのリソース使用量の統計については、SSH を使用してインスタンスに接続し、docker stats コマンドを実行します。

ソフト制限でタスク定義を作成する

  1. Amazon ECS コンソールから、ナビゲーションペインで、[Task Definitions] (タスク定義) を選択します。
  2. [Create new Task Definition] を選択します。
  3. 起動タイプとして、[EC2]、[Next step] の順に選択します。
  4. [Task Definition Name] に名前を入力します。
  5. [Container Definitions] セクションで、[Add container] を選択します。
  6. [Container name] に名前を入力します。
  7. [Image] に、nginx または環境に適した Docker イメージを入力します。
  8. [Memory Limits (MiB)] で、 [Soft limit] を選択し、700 と入力します。
  9. [Add] (追加)、[Create] (作成) の順に選択します。

ソフト制限でタスク定義を実行する

  1. Amazon ECS コンソールのナビゲーションペインで [Clusters] (クラスター) を選択し、作成したクラスターを選択します。
  2. [Tasks] (タスク) ビューを選択し、[Run new Task] (新しいタスクの実行) を選択します。
  3. [Launch Type] (起動タイプ) として [EC2] を選択し、ソフトリミットで作成したタスク定義を選択して、[Run Task] (タスクを実行) を選択します。注: ECS を初めて使用する場合、[Task Definition] (タスク定義) と [Cluster] (クラスター) には、以前に作成したタスク定義とクラスターの名前をあらかじめ入力できます。
  4. ソフトリミットが設定されたタスクの [Last status] (最終ステータス) 列に [RUNNING] (実行中) と表示されたら、次のステップに進みます。
    注: タスクのステータスを [RUNNING] (実行中) に更新するには、ページを更新します。
  5. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] ペインには、[Available] 列のメモリが [Registered] 列のメモリより小さいことが示されます。
  6. インスタンスのリソース使用状況に関する統計については、SSH を使用してインスタンスに接続し、docker stats コマンドを実行します。
  7. ナビゲーションペインで、[Clusters] を選択し、クラスターを選択します。
  8. [Tasks] ビューを選択し、ソフト制限のタスクを選択して、[Stop] を選択します。
  9. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] (詳細) ペインには、[Available] (使用可能) 列のメモリが [Registered] (登録済み) 列のメモリと等しいことが示されます。

ハード制限のあるタスク定義の新しいリビジョンを作成する

  1. Amazon ECS コンソールから、ナビゲーションペインで、[Task Definitions] (タスク定義) を選択します。
  2. ソフト制限を使用して作成したタスク定義を選択し、[Create new revision] を選択します。
  3. [Container Definitions] セクションの [Container Name] 列で、ソフト制限のタスク定義に追加したコンテナを選択します。
  4. [Memory Limits (MiB)] で、[Hard limit] を選択し、1000 と入力します。
  5. [Update] (更新)、[Create] (作成) の順に選択します。

ハード制限で改訂されたタスク定義を実行する

  1. Amazon ECS コンソールのナビゲーションペインで [Clusters] (クラスター) を選択し、作成したクラスターを選択します。
  2. [Tasks] (タスク) ビューを選択し、[Run new Task] (新しいタスクの実行) を選択します。
  3. [Launch Type] (起動タイプ) を [EC2] として選択します
  4. [Task Definition] (タスク定義) で、作成したハード制限を持つタスク定義を選択し、[Run Task] (タスクを実行) を選択します。
  5. ハードリミットが設定された修正済みタスクの [Last status] (最終ステータス) 列に [RUNNING] (実行中) と表示されたら、次のステップに進みます。
    注: タスクのステータスを [RUNNING] (実行中) に更新するには、ページを更新します。
  6. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] (詳細) ペインには、[Available] (利用可能) 列の使用可能なメモリが [Registered] (登録済み) 列のメモリより小さいことが示されます。
  7. インスタンスのリソース使用状況に関する統計については、SSH を使用してインスタンスに接続し、docker stats コマンドを実行します。
  8. ナビゲーションペインで、[Clusters] を選択し、クラスターを選択します。
  9. [Tasks] ビューを選択し、ハード制限のあるタスクを選択して、[Stop] を選択します。
  10. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] (詳細) ペインには、[Available] (使用可能) 列のメモリが [Registered] (登録済み) 列のメモリと等しいことが示されます。

ソフト制限とハード制限の両方を使用してタスク定義の新しいリビジョンを作成する

  1. Amazon ECS コンソールから、ナビゲーションペインで、[Task Definitions] (タスク定義) を選択します。
  2. ハード制限を使用して作成したタスク定義を選択し、[Create new revision] を選択します。
  3. [Container Definitions] セクションの [Container Name] 列で、ハード制限のあるタスク定義に追加したコンテナを選択します。
  4. [Memory Limits (MiB)] で、 [Soft limit] を選択し、700 と入力します。
  5. [Add Hard limit] を選択し、 1200と入力します。
  6. [Update] (更新)、[Create] (作成) の順に選択します。

ソフト制限とハード制限の両方で改訂されたタスク定義を実行する

  1. Amazon ECS コンソールのナビゲーションペインで [Clusters] (クラスター) を選択し、作成したクラスターを選択します。
  2. [Tasks] (タスク) ビューを選択し、[Run new Task] (新しいタスクの実行) を選択します。
  3. [Launch Type] (起動タイプ) を [EC2] として選択します
  4. [Task Definition] (タスク定義) で、ソフト制限とハード制限の両方で作成したタスク定義を選択し、[Run Task] (タスクの実行) を選択します。
  5. タスクの [Last status] (最終ステータス) 列に [RUNNING] (実行中) と表示されたら、次のステップに進みます。
    注: タスクのステータスを [RUNNING] (実行中) に更新するには、ページを更新します。
  6. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] ペインには、[Available] 列のメモリが [Registered] 列のメモリより小さいことが示されます。
  7. インスタンスのリソース使用状況に関する統計については、SSH を使用してインスタンスに接続し、docker stats コマンドを実行します。
  8. ナビゲーションペインで、[Clusters] (クラスター) を選択し、クラスターを選択します。
  9. Tasks ビューを選択し、ソフト制限とハード制限の両方を持つタスクを選択して、 Stopを選択します。
  10. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] (詳細) ペインには、[Available] (使用可能) 列のメモリが [Registered] (登録済み) 列のメモリと等しいことが示されます。

[Task Level Memory] (タスクレベルのメモリ) 制限を使用してタスク定義の新しいリビジョンを作成する

  1. Amazon ECS コンソールから、ナビゲーションペインで、[Task Definitions] (タスク定義) を選択します。
  2. ハードおよびソフト制限を使用して作成したタスク定義を選択し、[Create new revision] (新しいリビジョンを作成) を選択します。
  3. [Task Size] (タスクサイズ) セクションの [Task memory (MiB)] (タスクメモリ (MiB)) に 1000 と入力します
  4. [Container Definitions] (コンテナ定義) セクションの [Container Name] (コンテナ名) 列で、ハードおよびソフト制限のタスク定義に追加したコンテナを選択します。
  5. [Memory Limits (MiB)] (メモリ制限 (MiB)) で、右側の x アイコンを選択して [Soft limit] (ソフトリミット) を解除します
  6. 次に、[Hard limit] (ハードリミット) の値 1200 を選択して削除します。
  7. [Update] (更新)、[Create] (作成) の順に選択します。

[Task Level Memory] (タスクレベルのメモリ) 制限で改訂されたタスク定義を実行する

  1. Amazon ECS コンソールのナビゲーションペインで [Clusters] (クラスター) を選択し、作成したクラスターを選択します。
  2. [Tasks] (タスク) ビューを選択し、[Run new Task] (新しいタスクの実行) を選択します。
  3. [Launch Type] (起動タイプ) を [EC2] として選択します
  4. [Task Definition] (タスク定義) で、タスクレベルのメモリで作成したタスク定義を選択し、[Run Task] (タスクを実行) を選択します。
  5. タスクの [Last status] (最終ステータス) 列に [RUNNING] (実行中) と表示されたら、次のステップに進みます。
    注: タスクのステータスを [RUNNING] (実行中) に更新するには、ページを更新します。
  6. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] ペインには、[Available] 列のメモリが [Registered] 列のメモリより小さいことが示されます。
  7. インスタンスのリソース使用量の統計については、SSH を使用してインスタンスに接続し、docker stats コマンドを実行します。
    注: docker stats コマンドによって表示されるメモリ制限が、コンテナの 1000 MiB ではない場合があります。これは、[Task Level Memory] (タスクレベルのメモリ) が docker デーモンではなく ECS Agent によって管理されるためです。
  8. ナビゲーションペインで、[Clusters] (クラスター) を選択し、クラスターを選択します。
  9. [Tasks] (タスク) ビューを選択し、タスクレベルのメモリのあるタスクを選択して、[Stop] (停止) を選択します。
  10. [ECS Instances] (ECS インスタンス) ビューを選択し、[Container Instance] (コンテナインスタンス) 列からインスタンスを選択します。
    注: [Details] (詳細) ペインには、[Available] (使用可能) 列のメモリが [Registered] (登録済み) 列のメモリと等しいことが示されます。

関連情報

Amazon ECS CloudWatch メトリクス

Amazon EC2 インスタンスタイプ

Limit a container's access to memory (メモリへのコンテナのアクセスを制限する)

タスクサイズ

AWS公式
AWS公式更新しました 1年前
コメントはありません