3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECSについて理解した事をまとめた

Last updated at Posted at 2024-05-17

概要

ECSの基本的な概念を理解していなかったので、自分なりにまとめてみました。

ECS(Amazon Elastic Container Service)の特徴

  • ECSは、コンテナ化されたアプリケーションの管理・運用を自動化する為の技術。この技術の事をコンテナオーケストレーションと言う
  • 他のAWSサービスと連携する事で、コンテナを使用した大規模なサービスの構築が容易
  • フルマネージドでコンテナを管理してくれる

AWS上でのコンテナ実行における選択肢

コンテナオーケストレーションは、「コントロールプレーン」と「データプレーン」という2つの概念から成り立っている

コントロールプレーン : コンテナを管理する為のサービス

  • ECS
  • EKS

データプレーン : コンテナを稼働させる為のサービス

  • EC2
  • AWS Fargete

どの起動タイプも、コンテナオーケストレーションを実現する為に、コンテナオーケストレータECSコンテナエージェントと言うミドルウェアが必要となる。

  • EC2タイプの場合は、コンテナオーケストレータとECSコンテナエージェントが組み込まれたEC2が起動する
  • Fargateの場合は、Fargateコンテナエージェントが導入されている。AWS側で管理されている為、意識する必要は無い

コンテナオーケストレーション.png

ECSEKSの違い

ECS : AWSが独自で構築して開発したコンテナオーケストレーションシステム
EKS : Kubernetes(K8s)を基盤に構築して開発したコンテナオーケストレーションシステム

補足

コンテナオーケストレーションツールは、Docker Swarm(Docker社)、OpenShift(Red Hat)、Rancher(OSS(オープンソース))、Mesos/Marathon等がある

コンテナオーケストレータ

  • 設定に基付いて、コンテナの状態を維持、管理する様にECSコンテナーエージェントに指示を出す機能
  • サービスディスカバリ、ローリングアップデート、自動スケーリング、ロードバランシング等を設定に基付いて行う

補足

サービスディスカバリ : ECSクラスタ内で他のコンテナへアクセスする為のAレコード登録を自動的にECSRoute 53にお願いできる
ローリングアップデート : 全てのタスク(コンテナのインスタンス)を同時に更新するのではなく、一部のタスクだけを順次更新していく方法
Aレコード : IPアドレス(IPv4形式)とドメイン名の関連付けを定義するレコード(書き方は以下)

hp-shizuoka.jp. IN A 192.168.0.1
www.hp-shizuoka.jp. IN A 192.168.0.1

ECSコンテナエージェント 

  • コンテナの中で動作している
  • オーケスレータからの指示を基に、エージェントを通して、コンテナの維持、管理を行う機能
  • クラスタの所属場所、コンテナの起動状況、コンテナのCPUやメモリの情報等をオーケストレータに送信している
  • Amazon ECS-optimized AMIを元に起動した場合、事前にインストール済み
  • 自前で用意したEC2に対して、ECSコンテナエージェントをインストールして使用する事も可能
  • ECSエージェントのイメージ図を以下に記載

ecs-agent.png

ECSエージェントのGitHub

コンテナオーケストレータ(Orchestrator)とエージェント(Agent)用いた場合の仕組み

管理者とサーバーの間いに、OrchestratorAgentと言う仕組みを設置する。

  1. サーバーの管理者 or コンテナの管理者は、Orchestratorに対して何らかの指示(API call)を行う
  2. Orchestratorは、サーバーの中で動作しているAgentに対してコマンドを送る
  3. Agentは、Container Runtime(Docker Engine)に対してコマンドを送る
  4. イメージレジストリーにあるコンテナイメージをダウンロードする
  5. コンテナイメージを元に、コンテナが立ち上がる

スクリーンショット 2024-05-14 17.30.12.png

コンテナオーケストレーションの重要性

コンテナオーケストレーションを使用していない

  • 多数のコンテナを複数台のサーバで運用していると、どのサービスのどのコンテナがどのサーバで動いているのかを常に意識し、管理し続ける必要があり、運用負荷が高まる
  • 運用の複雑化は、ヒューマンエラーを引き起こしかねない

上記の問題から、コンテナ運用が上手くいかなくなり、サービスの維持が難しくなる

スクリーンショット 2024-05-14 22.37.27.png

コンテナオーケストレーションを使用している

  • オーケストレータがある事で、管理者の指示をオーケスレータが受け取り、オーケスレータがコンテナホスト(クラスタ)に対してまとめて指示を出せる
  • 各コンテナホストで動いているAgentがコンテナの状態を確認し、あるべき状態を維持、管理したり、設定した状態を維持、管理したりする
  • コンテナオーケストレーションを用いて構築したコンテナは、複数のコンテナホストがある場合でも安全にサーバ運用が実現できる

補足

コンテナホスト : コンテナ化されたアプリケーションを実行する為のサーバーまたは仮想マシン
コンテナオーケストレーション : コンテナの管理・運用を自動化して運用する技術
スクリーンショット 2024-05-14 22.36.37.png

ECSの起動タイプ

ECSではコンテナを動かす為の実行環境(データプレーン)として「AWS Fargate」と「ECS on EC2」、「ECS Anywhere」の3つの起動タイプがある

  • AWS Fargate」と「ECS on EC2」は、AWS上の仮想サーバ上で起動させる
  • ECS Anywhere」は、オンプレミス環境でコントロールプレーンとしてECSを使用する為の機能
    (今回は、ECS Anywhereについての詳細は割愛する)

ECS on EC2

EC2(Elastic Compute Cloud)インスタンスを使った仮想サーバ上でコンテナを起動するタイプ

仕組み

  • クラスタ(コンテナホスト群)の中で多数のEC2が動作し、各EC2の中でコンテナを動作させる
  • ECSで立ち上げたEC2には、OS(Operating System)ecc-agentDocker Enginが組み込まれている

スクリーンショット 2024-05-16 13.20.45.png

Amazon ECS-optimized AMI(仮想マシンイメージ)

  • ECC on EC2は、Amazon ECS-optimized AMIのイメージを使用して、ECSの環境を作成する
    (OSの指定は行う必要がある)
  • Amazon ECS-optimized AMIは、DockerデーモンやECSコンテナエージェント等、コンテナインスタンスとして必要な物が全て組み込まれている仮想マシンのイメージ

特徴

  • ホストOSを柔軟に選択できる(Amazon Linux、 Windows、 Bottlerocket等)
  • EC2インスタンスのスペック(CPU コア数、メモリ、ストレージ等)が柔軟に選択できる
  • 実稼働リソースのOSに直接介入する事が出来る(カーネルパラメータ等のチューニングが可能)
  • コンテナイメージをEC2内にキャッシュできるのでAWS Fargateに比べてデプロイが早い
  • ホストOSに対して、SSH接続が可能

課題

  • OSやソフトウェアエージェント類へのパッチ当てや更新を自前で行う必要がある
  • コンテナ環境のOSDocker Engine等、ホストマシンの管理や運用が必要

補足

ソフトウェアエージェント : 特定のタスクを自動的に実行する為のソフトウェア。一定のルールに基づいて動作し、ユーザーの代わりに様々なタスクを自動的に行う
(例 : メールクライアントのスパムフィルター、ウェブクローラー)

AWS Fargate

保守管理が不要なコンテナ向けサーバレスコンピューティングエンジン。AWS上でコンテナを動かす為のサーバー(例:EC2)に対して、何の設定も行わないでコンテナを実行する事が出来る機能。

仕組み

クラスターの中にあるAWS Fargateが、複数のタスクを管理して動作させる

スクリーンショット 2024-05-16 17.43.55.png

特徴

  • AWSが実行環境(コンテナを動かしている環境 : EC2)の保守、運用、管理を行うので、バージョンアップやセキュリティ対策等を気にしなくて良い
  • コンテナのCPUとメモリを決まった組み合わせから選択出来る
  • コンテナ数をオートスケールできる

課題

  • コンテナホスト(EC2)に対してSSH接続は不可能 (コンテナ内に入る事は可能)
  • ホストの管理をAWS側で管理してくれる為、EC2より価格が高額になる
  • パブリックIPの固定割り当てができない
    (EC2インスタンスへのIPが自動割り当ての為、パブリックIPの固定割り当てができない。これにより、外部アクセスの為のIP許可や、API運用時に不便を感じる場合がある)

ECSの主要な構成要素

スクリーンショット 2024-05-15 23.59.08.png

タスク定義

タスク(コンテナ)を構成する為の定義書。

タスク定義の主な設定項目

  • コンテナの定義 : イメージ場所の指定
  • コンテナ全体のCPU、メモリの設定または、コンテナ毎のCPU、メモリの設定
  • タスクに割り当てるIAM : タスクが行う操作権限の範囲をタスク単位で決める事が可能
  • マウントの設定 : EFSに接続する等
  • ボリュームの設定 : データを永続化する為の機能
  • ネットワークモードの選択
    Fargate : avsvpc
    EC2 : host(非推奨)、 bridge(Dockerの標準)、 none(特殊パターン)、 default(=bridge), awsvpc(AWS推奨)

タスク

タスク定義に基づいて起動するコンテナの集まり。1つのタスクに対して、1つ以上のコンテナで構成されている。

タスクの主な設定項目

  • バッチ処理を行う場合は、タスクからの起動となる

サービス

複数のタスクを束ねる概念。もう少しわかり易く書くと実行中のタスクを管理する機能。下記の設定はサービスから起動する場合しか行えない為、常に起動させたいコンテナがある場合は、サービスから立ち上げる

サービスの主な設定項目

  • タスクの実行数の維持、管理
  • 起動後に動作しているタスクの維持、管理
  • ALB、ELB(ロードバランサ)との連携
  • Auto Scalingの設定が可能
  • EC2 or Fargateの起動タイプを選択できる
    (クラスタの設定によっては、選択できない場合もある)

クラスタ

コンテナホストを束ねる概念。もう少しわかり易く書くとサービスとタスクを実行する基盤

クラスタの主な設定項目

  • 実行環境の境界 : 本番環境や開発環境を論理的に分ける事が可能
  • IAM権限の境界 : クラスタが行う操作権限の範囲をクラスタ単位で決める事が可能
  • スケジュールされたタスクの実行が設定可能 : コンテナの起動時間の設定が可能

補足

サーバー上でコンテナを動作させる仕組み(dockerの場合)

ローカル環境にて、dockerを使用して動作させるのと殆ど同じ挙動となる

  1. サーバーの管理者 or コンテナの管理者がコンテナを実行したいサーバーにssh等でログインする
  2. docker run等のdockerコマンドを実行する
  3. dockerコマンドが入力された事で、Docker Engineがイメージレジストリーにあるコンテナイメージをダウンロードする
  4. コンテナイメージを元に、コンテナが立ち上がる

スクリーンショット 2024-05-14 17.20.32.png

参考資料

まとめ

いろんなサイトを見て、自分なりに分かりやすくまとめてみました。もし、気になる点や間違ってる部分がありましたら、ご連絡頂ければと思います。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?