テックタッチアドベントカレンダー2日目担当する@smith-30です。
1日目は@taisa831 による やってよかった読書会技術書7冊でした。読書って難しいと上辺だけさらって読了することに目的が移ってしまうのですが、アウトプットの場があれば自分の理解が深まるしいいなと思いました。
このページについて
ecs 触ったことがなかったのでとりあえずドキュメントや動画漁って要点をまとめています
内容
ECS とは
Amazon Elastic Container Service
AWS上でコンテナ管理をあらゆるスケールでおまかせできちゃうやつ
コンテナは タスク という概念で考えられている
- スケール
- 制御・監視
- ロングランニング etc..
コンテナは、task definition と呼ばれる設定項目から管理が可能。例えば、CPUとかメモリとかディスクIOとか。その定義からコンテナインスタンスが立ち上がる。コンテナインスタンス(dockerが入っている)の中には ecs-agent(oss) が常駐していて、定義情報を受け付けてコンテナを立ち上げる(dockerを起動)。ecs-agentは、ecsと連携を取りながらコンテナの操作を行っていく。
スケジューラ
コンテナ同士の起動順序やコンテナの起動を管理する。
タスク定義をagentに発行するなどする。こいつ自体はECSの上で動いている。
また、コンテナを定期的にポーリングして状態を把握するようにし、稼働するタスクの数などを管理している。
service スケジューラはロングランニングなwebアプリケーションに有用(rest-apiなど)。
minimumHealthPercent, maximumPercentでコンテナを動かしながら新しいバージョンに切り替えていくことが可能(blue/green デプロイ)。これすごい便利だな。。
ログ
cloudwatch から lambda や elasticsearch にも流せる。fluentd をサイドカーにして集約させるパターンを動かしてみたい。
設定
大きく2つに分かれる
- task(image) 定義
- egister-task-definition から設定
- cpu, memory, 環境変数の設定など
- service 定義
- create-service から設定
- 実行状態にしておきたいtask数
- 更新時の blue/green デプロイメント戦略の設定
EKSもあるけどどっち使えばいいの?
この記事を見るに、既存のkubernates 環境をAWS上へ持って来たい、あるいはAWS環境にアプリケーション実行環境までAWSにロックインされずにコンテナオーケストレーションやりたい場合によさそう。ポータビリティを維持したいとか。
ECSはAWSでしか使えないので。ただし、大規模やマルチテナントには低コストでよいとは書いてあるのでインフラ面をおまかせして動かしていく分には問題なさそう。
プロセス死んだらどうなる?
service として登録している場合は、立ち上げてくれる。立ち上げも連続的ではなく、エクスポネンシャルバックオフで実行される。スクリプトをservice登録して試してみた。
service 間通信どうする?
elb を vpc 内に置いてendpointをサービス側に登録したり、gateway的なサービス使ったりする。
バッチとして使いたいときはどうする?
service ではなく、 run-task で登録したtaskを実行する。
その他
12 factor appの原則を守ってタスク(コンテナ)を作ろう
3日目は@92thunderが担当します、フロントエンド周りかな、楽しみ。
参考
- https://dev.classmethod.jp/cloud/aws/cmdevio2019-container/
- https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-docker-on-aws
- https://www.slideshare.net/AmazonWebServicesJapan/20180214-aws-black-belt-online-seminar-amazon-container-services
- https://www.youtube.com/watch?v=3oC98Vt-uy0