Traffine I/O

日本語

2022-12-02

Elastic Container Service (ECS)

ECSとは

Amazon Elastic Container Service(ECS)、はAWSが提供するフルマネージド型のコンテナオーケストレーションサービスです。これは、マイクロサービスのアーキテクチャの人気が高まる中で、開発者やIT専門家が複数のコンテナを効果的に管理し、デプロイするためのツールとして位置づけられています。

コンテナ技術は、アプリケーションとそれに必要なランタイム、ライブラリ、システムツールを一つのパッケージにまとめることができるため、開発からデプロイ、そしてスケールまでの一貫した環境を提供します。しかし、これらのコンテナを効果的に管理するには、適切なオーケストレーションツールが必要となります。これが、ECSの役割となります。

ECSのコンポーネント

ECSのアーキテクチャは、コンテナ化されたアプリケーションのデプロイとランタイムの管理を行うための各コンポーネントから成り立っています。

ECS architecture

Task

ECSにおいて、アプリケーションの実行単位は「Task」として知られています。Taskは、一つ以上のコンテナから構成される実行単位で、ECS上でアプリケーションを起動する際の基本単位となります。

Task Definition

Task Definitionは、Taskの作成と設定のためのテンプレートとして機能します。このテンプレートはJSON形式で記述され、どのコンテナイメージをデプロイするか、各タスクやコンテナにどのようなリソースやIAMロールを割り当てるか、CloudWatch Logsへの出力先など、多くの詳細設定を含むことができます。

一つのTask Definition内には、複数のコンテナ定義を含めることが可能で、それにより一つのTask内で複数の関連するコンテナを効果的に管理することができます。

JSONサンプル

json
{
  "family": "my-task-def",
  "networkMode": "awsvpc",
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "256",
  "memory": "512",
  "containerDefinitions": [
    {
      "name": "backend",
      "image": "xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/backend:latest",
      "essential": true,
      "portMappings": [
        {
          "hostPort": 8080,
          "protocol": "tcp",
          "containerPort": 8080
        }
      ]
    },
    {
      "name": "frontend",
      "image": "xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/frontend:latest",
      "essential": true,
      "environment": [],
      "portMappings": [
        {
          "hostPort": 8000,
          "protocol": "tcp",
          "containerPort": 8000
        }
      ],
      "command": [
        "run",
      ]
    }
  ]
}

Service

指定した数だけTaskを維持するスケジューラで、オーケストレータのコア機能にあたる要素です。Service作成時は、起動するTaskの数や関連づけるロードバランサーやTaskを実行するネットワークを指定します。また、Taskが何らかの理由で終了した場合は、Task定義をベースに新しいTaskを生成して指定したTask数を維持します。

Serviceは、オーケストレーションのコア機能としての役割を果たします。Taskが何らかの理由で終了した場合は、Task Definitionをベースに新しいTaskを生成して指定したTask数を維持します。Serviceは、関連するロードバランサーやネットワーク、そして実行するTaskの数などの設定を持っています。

Cluster

Clusterは、ECSにおける論理的なグルーピングの単位で、複数のServiceやTaskを管理するためのものです。Cluster内で、利用可能なリソースやタスクの状態、サービスの状態などを一元的に確認することができます。

データプレーン

データプレーンは、ECSのコンポーネントと連携して、コンテナが実際に動作する環境やリソースを提供する部分です。AWSが提供するデータプレーンは以下の二つです。

  • Amazon Elastic Compute Cloud (EC2)
  • AWS Fargate

Amazon Elastic Compute Cloud (EC2)

Amazon EC2は、AWSが提供する仮想プライベートサーバーです。ECSにおけるデータプレーンの一部として、EC2はコンテナの実行環境としての役割を果たします。ユーザーは、必要に応じてインスタンスタイプやリソース量を選択することができ、EC2上で直接コンテナを起動、管理することが可能です。さらに、EC2はAWSの広範なサービス群との統合が容易であり、セキュリティやネットワーク、ストレージの面での高い拡張性と柔軟性を持っています。

AWS Fargate

AWS Fargateは、サーバーレスのコンテナ実行環境であり、EC2のようにインスタンスの選択や管理の必要がありません。ユーザーは単にコンテナを指定し、Fargateが必要なリソースの確保やスケーリングを自動的に行います。これにより、開発者はインフラの管理から解放され、アプリケーションのコードやビジネスロジックに集中することができます。

参考

https://aws.amazon.com/ecs/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!