AWS ECS
ECSの概念
ECS(AWS EC2 Container ServiceもしくはElastic Container Service)は,AWS上でDockerコンテナを扱うサービス また,ECR(Elastic Container Registry)というのは,AWS上でコンテナのイメージを保存しておくサービス
最近では,EKS(Elastic Kubernetes Service)というものも出てきている
クラスター
このクラスターが持っているEC2のインスタンスのことをコンテナインスタンスと呼ぶ
インスタンスを集合体にしないといけないのは,1つのインスタンスにコンテナを複数立ち上げると色々面倒だから.
例えば,1つのインスタンスに2つのnginxコンテナを立てると,それらのポート番号は8080と8081としなければならない.
ロードバランサと各ポートの接続は自分でやらないとだし,コンテナが増えても使うマシンは1台なので負荷分散にならない
従って,1つのタスク定義に1インスタンスを割り当てる.そのコンテナインスタンスの集合がクラスター.
ここで,タスク定義というのはアプリケーションの動作に必要なコンテナはこれとこれとこれで...といったレシピ.
docker-composeで自分のアプリにはRails+MySQLが必要,ということを記すことに似ている.それのAWS版.
なお,このタスク定義は変更すると前のバージョンをリビジョンというものに保存し,なんかミスってもすぐに戻せる.
各コンテナインスタンスではecs-agentというコンテナが起動しており,これがオーケストレーションを実現している.
タスク
docker-compose run --rmみたいな機能で,バッチのジョブなどに使う.
例えばlinuxコンテナでtailを実行したらそのコンテナはkillされる,という感じ
https://gyazo.com/ee7a6a245ea6f8b96c18a82d8c8604d5
サービス
docker-compose run -dみたいな機能で,Webサービスのホスティングなどに使う.
複数のコンテナをひとまとめにして,いい感じに負荷分散してくれる.
以下は4つのnginxコンテナを立ててサービスで自動分散した例.
https://gyazo.com/e04c7b6d832e9be608146b305d225088
基本起動しっぱなしでリクエストを待ち受ける
死んだら新しいコンテナを立て直す(desired count=4と設定すると最低でも4コンテナは立つようにしてくれる)
外部からの接続を受けて動的にポート接続をやってくれる.
ある程度賢くコンテナを分散してくれる
チュートリアル
これがいい感じだった。
しかし、未だにわからないのがネットワークモード。