ECS/EKSを使用する1dayイベントがあるのですが、インフラ周りの知識が全くなく、ECS/EKSが何かも全然わかっていないので、軽く勉強してメモしておこうと思います。
ECS/EKSとは
EKS:
Amazon Web Services (AWS) 上で、独自の Kubernetes コントロールプレーンをインストール、運用、保守する必要がないマネージド型サービス。EKSはとにかく運用コストが高い。ちなみにKubernetes は、コンテナ化されたアプリケーションの管理、スケーリング、デプロイを自動化するオープンソースシステム
ECS:
AWSが開発したコンテナ管理サービス
webアプリケーションとDBを動かすときのAWSの構成
(ref: udemyのAWSコンテナサービス入門―AWSの基本からECS・Copilot CLI・CI/CD・App Runnerまで)
VPC(ネットワーク)の中にEC2(サーバ)を1台用意して、その中でwebアプリとDBを動かす
→パッチやバックアップなど、対応すべきことが非常に多いAWSにはRDSというデータベースのサービスがある
→RDSを使うとDBのパッチ適用などをAWSに任せることができる
RDSのようにAWSなどのクラウド事業者に管理を任せられるサービスを「マネージドサービス」という。EC2を並列稼働させ、webアプリの処理能力を高める(スケールアウト) →CPU使用率などに応じて、自動でスケールさせることが可能
EC2を並列稼働させる場合は、前段にELB(ユーザからのリクエストをEC2などに分配するロードバランサのマネージドサービス)を配置するのが一般的
→最近はEC2をECS on Fargateに置き換えた構成が非常に一般的
なぜECS on Fargateを使うのか
そもそもコンテナを使うわけ
環境構築済みのイメージを運搬して実行するため、他の環境でテストした動作を本番でも保証しやすいこと、サーバよりも軌道が高速で開発サイクルの高速化やオートスケールといった面で有利なこと、サーバ内で環境を分離でき1つのサーバ内でさまざまなアプリケーションを動かしても競合しにくいなどの利点がある
↓
1台のサーバを増強してたくさんのコンテナを動かす方針では、サーバのスペックの限界がある。また、サーバが1台停止するだけで、その中でコンテナとして動いているwebアプリケーションなどにアクセスできなくなる
↓
複数台のサーバでたくさんのコンテナを使えば、コンテナの数が増えても、その分サーバを増やすことで対応可能。サーバ間でコンテナを冗長化させておけば、サーバが1台停止してもwebアプリケーションは全体としては停止しない
↓
複数のサーバでたくさんのコンテナを使うためには、どのサーバにどのコンテナを配置するのが適切か考えるのが大変
↓
コンテナオーケストレーションのツールを使えば、クラスタに対して、コンテナを適当に配置してくれる
コンテナオーケストレーションのツール
AWSを使う場合は、以下の2つの選択肢がある
EKS : k8sのマネージドサービス
ECS:AWS独自のコンテナオーケストレーションサービス
↓
ECS on EC2を使う場合、コンテナとサーバの両方の考慮が必要
↓
ECS on Fargateを使うと、サーバ管理なしでコンテナを実行できる
ECSの基本概念
クラスタ :
まとめて扱う複数のコンピュータの集まりのこと。ECSではクラスタという単位でサーバをまとめておいて、そのサーバに対して適当にコンテナを配備してもらう。ECS on Fargateを使うとき、サーバはAWSが管理してくれるので空のクラスタを作成する
タスク: アプリケーションの実行単位。1つ以上のコンテナから構成される。 タスク定義としては、CPUやメモリのサイズ、コンテナのポートや環境変数がある。 ECSでコンテナを実行するときは、タスク定義という設定をもとにタスクを起動する
サービス: タスク定義からタスクを起動する方法の一つ。起動するタスクの数やロードバランサーなどを設定
ELB
ロードバランサーのサービスで、HTTPなどのアクセスを複数のサーバやコンテナに負荷分散できる。webアプリの場合、HTTPに特化したALBを使うことが多い
ref:
EKSとECSの違い #AWS - Qiita
Amazon EKS とは - Amazon EKS
今さら聞けないAWS ECSとは?Fargateとは? #AWS - Qiita
AWS入門 - ECS・Fargate 使ってみる
AWSのロードバランサ機能・使い分けについて(ALB作成手順付き)|クラウドテクノロジーブログ|ソフトバンク