ECS
なぜコンテナ
アプリ/ミドルウェア/ランタイム/複数人開発などにおけるアップデートや環境構築が素早くできる。環境の統一がステートレスにできるので属人的なインフラ管理ノウハウみたいなものが発生しにくい。
なぜECS
複数ホストでのコンテナ環境の管理を楽にするため
ECSの基礎
外観
https://scrapbox.io/files/63e20f1733b8aa001e8b0f12.png
用語整理
Cluster
Taskが実行されるEC2 Instance群。
各種EC2全てにecs-agentというDockerコンテナを起動している。それをECS Clusterとして例えば人間が指示を出すとその全てのagentに命令がいくので結果的に一括管理できる、という仕組み。
Task
Instance上で実行される実際のコンテナ(群)のこと。コンテナが死んだらTaskは終了。
Task Definition
Taskで使うコンテナおよび周辺設定の定義。要はどんなコンテナを起動するのか?の情報定義。
Service
ロングランニングアプリケーション(主にweb app)を希望する状態に保ち続ける役目
Task Definition,Taskの数,LB,ポートマッピング,AutoScaleの管理などをやる。
Manager
ClusterのリソースとTaskの状態を管理
Scheduler
Clusterの状態を見てTaskを配置
Agent
EC2 InstanceとManagerの連携を司る
概略
ECSは、Cluster(複数EC2の集合)の上で/Dockerコンテナを使って/Service(&Task)を動作させるものであり、その中心は主にService!
Serviceの利用例としては、FrontEnd ServiceやAPIサービスやWebAppサービスなどの役割でのグループ化
Task Definition(どんなコンテナを起動するか)とNumber of Tasks(何個起動するか)とコンテナとELBの紐付け(リクエスト分散の仕方)を管理する
TaskとServiceの違いは?
Taskは意味のあるコンテナのまとまり(FrontendやAPIなど)
ServiceはそのTaskを複数並行でまとめて、例えば複数AZのEC2で起動させたりなどの冗長化をやってくれる。
TaskはあくまでただのコンテナなのでELBと自分を紐付けたりできない。
なのでバッチ処理などはService無しでTaskだけでも良い
リソース
ECS全般
公式資料
実践編
Rails環境の移行の話