ECSのタスク、サービス、クラスタ、コンテナインスタンスの意味についてまとめました
ECSのタスク、サービス、クラスタ... といった言葉の意味がいまいちよくわからなかったので、それぞれの言葉が指すインスタンスを作成するときに何を設定するかに基づいてまとめたメモです。
もとの説明をいい感じに引用して... とかの時間がなかったのでひとまずポスト。
クラスタ
- ネットワークとか、リソース管理の仕方(EC2使う or Fargate*1, EC2の調達の仕方)とか*2
- リソースの管理の仕方 => クラスタに属する EC2 の設定も管理している*3。特定のインスタンスタイプのEC2を決まった台数、特定のネットワーク内に調達することに関心がある*4
ECSのコンテナインスタンス
- ECSのコンテナインスタンス = Amazon ECS コンテナエージェントが入ったEC2インスタンス*5
- クラスタのところで設定した項目はほぼコンテナインスタンスに適用される。クラスタはそこに所属するコンテナインスタンスの設定を管理してる
- 登録解除 != 停止. 登録解除しただけだと前のコンテナ起動した時のローカルファイルが残ってるので注意
- ECSのコンテナインスタンスを確保 => ECSのコンテナインスタンス中のコンテナエージェントがタスク実行のリクエストを受け付ける
タスク定義
- クラスタが所定の台数Dockerの動くEC2のインスタンスを確保してくれているはずなので、そこにdocker-composeで投げるdocker-compose設定ファイル的なもの*6*7
- docker-composeの内容を書く = その内容は
docker-compose 投げた
先のEC2インスタンスがどういう性能を持っていないといけないか知っている
ECSタスクのスケジューリング *11
- 長期実行するステートレスサービスおよびアプリケーション用(要するにrailsのフロントとか)を常に指定した台数起動したい => サービススケジューラを使う
- サービススケジューラがタスクの実行台数を管理する単位がサービス
- service taskはサービスで管理されてるタスク
タスク = docker-composeで動く一連のコンテナの単位
の数をスケーリング != EC2インスタンスの数(こっちに対して課金)をスケーリング
- その場で実行する => 単発で実行されるバッチジョブとか RunTask
*1:この起動タイプはタスクを作成するときにも設定できる
*2:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_clusters.html#cluster_concepts
*3:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create_cluster.html
*4:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/scale_cluster.html 2015 年 11月24日以降に作成したクラスターなら、 AWS CloudFormation スタックに関連付けた Auto Scaling グループを作成すると管理画面から何台起動させるか、といったことが変更できる
*5:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_agent.html AMIで指定する単位だからほぼEC2だろう
*6:クラスタが何台分、と決めている枠の中でタスクを割り振る。クラスタの中にコンテナインスタスタンスが5台起動していて、タスクが3つなら、そのタスクで定義されたプロセスは3つしか動かないし、逆にクラスタの中にコンテナインスタンスが3台でタスクが5つなら複数のタスクが動くコンテナインスタンスが出てくる?
*7:同じタスク定義の中で定義されているコンテナは必ず同じインスタンスで動く http://www.slideshare.net/AmazonWebServicesJapan/aws-blackbelt-2015-ecs の36ページ
*8:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html#constraints (インスタンスタイプの指定はdockerで元になるOSが入ったimageを指定イメージに近い)
*9:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size
*10:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs_services.html
*11:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs_services.html