ECSについて

ECSとは

Amazon Elastic Container Service(ECS)は、AWSが提供するマネージドコンテナオーケストレーションサービス。
Dockerコンテナのデプロイ、管理、スケーリングを簡単に行えるプラットフォームで、開発者はインフラ管理の負担を減らしつつ、アプリケーションに集中することが可能に。

ECSの特徴

  • フルマネージド:ECSはインフラストラクチャの管理が不要で、AWSが自動的にコンテナのオーケストレーションやスケーリングを行う。
  • 柔軟なスケーリング:ECSは、アプリケーションの負荷に応じて自動的にコンテナ数を増減させ、効率的なリソース利用を実現。
  • AWSとの統合:他のAWSサービス(Amazon EC2、Fargate、CloudWatch、IAMなど)とシームレスに統合でき、セキュリティやモニタリング、スケーリングが容易。

ECSの実行オプション

Fargateモード:Fargateはサーバーレスなコンテナ実行オプションで、インフラ管理が不要。アプリケーションのコードだけに集中したいときに便利。

EC2モード:ユーザーがEC2インスタンスを用意し、その上でコンテナを実行。リソースやコストをきめ細かく制御したい場合に適している。

つまり

AWSがいい感じにコンテナを管理してくれるサービスのこと!

コンテナとは

そもそもコンテナって何だろう。。

コンテナは、アプリケーションやその依存関係をまとめてパッケージ化し、異なる環境でも一貫した動作を保証する技術。

仮想マシン(EC2等)と異なり、コンテナはホストOSのカーネルを共有するため、より軽量で起動も高速になる。

コンテナの特徴

  • 軽量性:コンテナはホストのリソースを効率的に活用し、メモリやストレージの消費を抑えることができる。
  • 移植性:コンテナでパッケージ化されたアプリケーションは、どんな環境でも同じ動作をするため、開発環境と本番環境の差異を気にする必要がない。
  • スケーラビリティ:コンテナを使用すると、アプリケーションを複数の環境に迅速に展開しやすく、負荷に応じて簡単にスケールが可能。

コンテナと仮想マシンの違い

コンテナは仮想マシンのようにOS全体を仮想化するわけではなく、アプリケーションの実行環境だけを分離して実行する。
このため、仮想マシンと比較して軽量で、起動や停止が速いのが特徴。

イメージ

濃い青の部分がコンテナにあたる。
OSの上に複数PCを立ち上げ、オーケストレーションサービス(ECS)で管理しているイメージ。

ECSの主要機能

クラスター (Cluster)

クラスターは、ECSでタスクを実行するための論理的なグループのこと。クラスターには、EC2インスタンスまたはAWS Fargateのようなコンテナを実行する環境が含まれる。複数のクラスターを使用して、異なるアプリケーションやサービスのタスクを分離して管理が可能。

タスク定義 (Task Definition)

タスク定義は、実行したいコンテナの設定情報を定義したテンプレート。どのDockerイメージを使用するか、必要なリソース(CPUやメモリ)、環境変数、ネットワーク設定などを記述する。タスク定義は1つのコンテナのみならず、複数のコンテナの組み合わせ(タスク)を定義することも可能。

タスク (Task)

タスクは、タスク定義に基づいて作成される実行中のコンテナインスタンス。タスクは一度限り実行されるものや、サービスによって管理される継続的なものがある。ECSは、タスクのライフサイクルを管理し、適切なリソースにデプロイする。

サービス (Service)

サービスは、指定された数のタスクを常に実行し続けるよう管理する機能。タスクが異常終了した場合、サービスは自動的に再起動して設定された数を維持する。また、ロードバランサーと連携して、高可用性のWebアプリケーションやAPIを提供する際に使用される。

コンテナにアプリをデプロイするには

1.Dockerイメージの作成

アプリケーションのソースコードと必要な依存関係をまとめてDockerfileを作成。
Dockerfileは、ベースイメージやインストールするパッケージ、実行するコマンドなどを定義する。
コマンド例:
docker build -t my-app .

2.Dockerイメージのプッシュ

作成したイメージをコンテナレジストリ(例: Amazon ECR, Docker Hub)にプッシュする。
これにより、ECSやFargateからイメージにアクセスできるように。
コマンド例:docker tag my-app:latest <レジストリURL>/my-app:latest docker push <レジストリURL>/my-app:latest

3.タスク定義の作成

ECSのコンソールまたはCLIを使って、デプロイするコンテナの設定を含むタスク定義を作成。
使用するイメージ、メモリやCPUのリソース、ポート設定を指定する。

4.クラスターの作成

ECSクラスターを作成。Fargateを選択する場合は、EC2インスタンスの管理が不要になる。
EC2を選択する場合は、インスタンスを指定する必要がある。

5.サービスの作成

サービスを作成し、デプロイしたいタスク定義を指定する。サービスは常に指定した数のタスクが実行されるように管理。
必要に応じてオートスケーリングやロードバランサーも設定する。

6.デプロイと監視

サービスが稼働し、指定したコンテナが起動。ECSのコンソールでログやタスクの状態を確認し、正常に動作しているか監視していく。


おすすめハンズオン教材

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-ECS-2022-reg-event.html?trk=aws_introduction_page
AWS公式のもの。実際に手を動かすことでよりイメージが持てるように!

疑問点

Q1 . Fargateはアプリケーションを動かしている間はずっと起動しているイメージ?
例えば、バックエンドコンテナだとAPIを送るたびにサーバがきどうしてコンテナ立ち上がるイメージで合ってる?

A .

Fargateを利用する場合、APIリクエストに応じてコンテナを立ち上げるのではなく、常にコンテナを稼働させておく設定が一般的。

Q2. 常時起動しているのであれば、EC2起動時とあまり変わらないのでは?

A.

基本は管理の面で差が出てくる。下記詳細。

稼働状況:

  • Fargate: コンテナが常時稼働している設定が一般的。コンテナのリソースに基づいて、必要なときだけコンテナを起動することも可能であるが、実際には多くのアプリケーションが常時稼働するように設計されている。
  • EC2: EC2インスタンスも常時稼働させることができるが、必要なときだけ起動・停止するような設定も可能。

管理の手間:

  • Fargate: コンテナの管理やインフラのプロビジョニングが不要で、サーバーのメンテナンスやアップデートをAWSが行ってくれる。これにより、開発者はアプリケーションのコードに集中できる環境が整っている。
  • EC2: インスタンスの設定やメンテナンス、セキュリティパッチの適用、スケーリング設定など、管理業務が必要になる。

運用の柔軟性:

  • Fargate: コンテナベースのアーキテクチャに特化しているため、マイクロサービスやサーバーレスアプローチに適している。
    スケーリングが容易で、自動的にリソースを管理してくれるのも大きな利点。
  • EC2: より高度なカスタマイズが可能だが、その分管理が複雑になることがある。

まとめ

ECSは、コンテナ管理をシンプルにしてくれる便利なツールで、特にFargateを使えばサーバーの管理を気にせずコンテナを動かせるのが大きな魅力。一方で、EC2で自由度高くコントロールしたい場面もあるので、プロジェクトに合わせて選択肢を使い分けるのがポイントに。
システムのニーズに合わせて柔軟に使い分けていきたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です