Posted at

DockerでEC2、ECS、EKSの運用想定まとめ

簡単に(後ほど整える)


EC2


  • 1つのサーバーに複数コンテナ

  • 1サーバーの中に1webサービスがある。ただそれだけ。

  • 同じサーバー内なので複数コンテナはport管理が必要

  • RDSとかELBとか使ってたら1EC2サーバーにはアプリケーションコンテナだけ

  • ローカルかデプロイサーバーを立ててあらかじめデプロイ先のインスタンスを複数起動し、デプロイツールによって複数台に展開は可能

  • スケール前提のものでない or 最初の構成から増減することがなければ良

  • スケールはしずらい(できるが、Dockerの範疇を超える)


ECS


  • 複数サーバーに複数コンテナ

  • 複数サーバーを管理するのはECS Cluster

  • サービスをタスクで起動させる(ここでいうサービスとはざっくりコンテナのこと)

  • タスクの定義はコンソール上から行う

  • コンソール上でdocker-compose.yml(厳密にはECS用の記法がある)定義して実行するような感じ

  • ELBの設定も必要

  • コンテナを動かすEC2インスタンスの起動はタスクの実行単位で勝手に割り当て生成されるので、ポートの管理が不要

  • スケール前提の設定ができる


ECS(Fargate)


  • Fargateというのは要するに、実体はECSで、内部のEC2部分(インフラ層)を気にしなくて良いという所だけが違う(起動タイプが違う)

  • いわゆるマネージドサービス

  • なぜこのサービスができたかというと、元々のECSは、実際スケールするとなると大変だから

  • どう大変かというとコンテナをスケールするとなった時、インスタンスのリソースを超えてしまう場合EC2自体をまずスケールする必要がある

  • つまりEC2起動タイプ(通常のECS)の場合管理対象が増える可能性がある

  • EC2起動タイプでインスタンスの監視やスケールの自動化を行いたかったら、CloudWatchやCloudformationが必要になるがFargateはそこ勝手にスケールしてくれる

  • それで少しEC2起動タイプより高い

  • 資金を差し置いてEC2の監視コストやリソースをあえて必要とする場合を除いてはFargateの方が良さそう


EKS


  • 複数サーバーに複数コンテナ

  • EKSはECSでいうクラスターの設定やタスクの設定をもコードで管理できる

  • webサービス単位でも複数管理できる

  • ECSはAWSでしか使えないがEKSはそうではなく、移管もし易い

  • これから作る大きいシステムで運用を捗らせたいなら使うべき

  • 運用事例は日本ではまだ少ない


参考記事

http://www.mpon.me/entry/2017/11/19/200000

https://qiita.com/NewGyu/items/9597ed2eda763bd504d7

http://www.atmarkit.co.jp/ait/articles/1806/11/news029.html

https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=2025

https://www.aquasec.com/wiki/plugins/servlet/mobile?contentId=2854889#content/view/2854889

https://www.aquasec.com/wiki/plugins/servlet/mobile?contentId=2855092#content/view/2855092


雑感

ひとまずDocker化しておくこと自体はどれで運用するにしても良さそう