💭

ECS、ECRについて簡単にまとめる

2022/06/12に公開

ECSについて勉強してみたので、簡単にまとめてみる。

ECR(Elastic Container Registry)

コンテナイメージのリポジトリ。各サーバーが実行時に必要なimageをECRに取りにいく感じ。ECSに統合することができるため、本番環境へのデプロイがスムーズになる。aws版のdocker hubみたいなイメージ。

ECS(Elastic Container Service)

Dockerコンテナを簡単に実行、停止、管理できるサービス。ECSを使うことで、複数のコンテナを統合して管理できる(コンテナオーケストレーション)。aws上でいい感じにdocker pull(ECRから)して、docker runしてくれる感じ。

ec2上にdocker engineをインストールして、その上でコンテナを管理するという方法があるが、この場合、コンテナごとにポート変えないといけなかったり、コンテナで何かしら不具合起きたら、sshでログインして原因特定して治して、起動し直さないといけなかったり、アクセス集中してサーバー台数増やす時にまた環境構築しないといけなかったり、何かと人の目が必要になってくる。

そこでecsの出番となる。ecsでは上記のような問題を全て解決してくれる。ポートマッピング、コンテナの状態の監視、自動復旧などをおこなってくれる。

Clusterとは

タスクやサービスを使う論理的なグループ。コンテナを動かすec2やfargateの集合体のことを言う。クラスターはリージョン固有の存在で、跨ぐことはできない。

Service

Taskをまとめて管理するもの。同じサービス内で起動しているTaskは同じTask Definitionからできている。

Task Definitionとは

ECSでコンテナを起動するための情報を記載したもの。どのimage使って、コンテナ起動するのかとか、cpuとメモリはどうするのかとかportはどうするかとか、コンテナが終了したり失敗した時に起動し直すのかどうかとか(他にも色々)を設定する。docker-compose.ymlファイルでタスク定義ができる。

Taskとは

Task Definitionを元に起動した各コンテナ(またはコンテナの集まり)のこと。

例えば、Railsでよくあるコンテナの構成のappとnginxで1タスクみたいなイメージ。
docker-composeでタスク定義を作成するのであれば、appとnginxのサービスを並列で定義する。作成したタスク定義を元にecs-cli compose service upとかすると、appコンテナとnginxコンテナが並列で起動する。アクセス増加でスケールアウトさせる時は、このappコンテナとnginxコンテナのセットが増える。

Fargateとは

Fargateはサーバーの管理が不要なコンテナ向けのサーバーレスコンピューティングエンジン。EC2を利用した場合、自分でサーバーを起動してecs起動してと言うことをしていたが、Fargateを利用した場合は、ECSのServiceの状態によってTaskを自動的に起動したり終了したり、設定によってTask数を増やしたり減らしたりといったことを自動でしてくれる。EC2では起動していた分だけ課金されるが、Fargateの場合はリソースに対しての従量課金となっているため、コスパがいい。

Discussion