ECSによるCPUとメモリのリソース管理 - toge510/aws GitHub Wiki

タスクレベル、コンテナレベルで定義されたCPUやメモリのリソースが、EC2やFargateで使用可能なCPUやメモリのリソースとどのように関係するのか?

ECSの構成要素

  • デプロイの基本単位はタスク
  • タスクを実行して、タスクがコンテナを実行する。
  • タスクには1または複数のコンテナが含まれる。

利用可能なECS起動タイプ

EC2

  • お客様が所有および管理し、料金を支払う EC2 インスタンス上で ECS タスクを実行する方法。タスクごとの支払いは必要ない。
  • 同じ Linux カーネルの上で複数のタスクが動作し、互いにカーネルリソースを共有する。

Fargate

  • AWS によって完全に管理されるコンテナ用のサーバーレス環境。お客様は基盤となるインフラストラクチャを管理することなくコンテナを実行できる。実行したタスクに対してのみ課金。
  • 各タスクが専用の Linux カーネルを持ち、他のタスクと CPU やメモリ、ENI (Elastic Network Interface) を共有しない。

コンテナの一般的な背景およびコンテナが CPU とメモリにアクセスする方法

コンテナの2つの一般的なおおまかなルール

  • 特に制限や上限を設けない限り、あるホスト (OS) 上で起動したコンテナは、そのホスト上で利用可能なすべての CPU とメモリ容量にアクセスできる。
  • 特に保護や保証されていない限り、あるホスト (OS) 上で実行されているすべてのコンテナは、そのホスト上で動作する他のプロセスと同じように CPU、メモリおよびその他のリソースを共有する。

デフォルトでは、CPU やメモリなどのリソースへのアクセスに関して、コンテナは他の Linux プロセスと同じように動作する

ECS のリソース管理オプション

ECS が提供する以下のような容量の制限と予約の仕組み

  • ECS はタスク (およびそのコンテナ) があるホスト上で使用できる容量を制限するだけでなく、タスク (およびそのコンテナ) が使用可能であると期待する容量を予約する仕組みを提供する。
  • ECS はコンテナがタスク内で使用できる容量を制限するだけでなく、コンテナが使用可能であると期待する容量を予約する仕組みを提供する。

  • Fargateでは、タスクサイズを定義する必要がある。

https://tech.classi.jp/entry/2022/05/24/120000

https://sreake.com/blog/datadog-agent/

https://nopipi.hatenablog.com/entry/2020/12/13/223713

https://dev.classmethod.jp/articles/tsnote-why-do-the-cpu-utilization-metrics-in-ecs-appear-lower-than-they-actually-are/

https://qiita.com/Tossy_tossy/items/c1017f747e2d2bb2b5b5

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#ECS

https://fintan.jp/page/6185/

https://qiita.com/ldr/items/da9bff1ede29143c4c74

https://zenn.dev/krabben16/articles/send-fargate-container-metrics-to-dd-with-cdk-ts