Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

Amazon Elastic Container Service とは

Amazon Elastic Container Service (Amazon ECS) は、クラスターで Docker コンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。Amazon ECS が管理するサーバーレスインフラストラクチャにクラスターをホストするには、Fargate 起動タイプを使用してサービスまたはタスクを起動します。また、EC2 起動タイプを使用して、現在管理している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのクラスターにタスクをホストすることで、さらに強力な統制力を得ることができます。起動タイプの詳細については、「Amazon ECS 起動タイプ」を参照してください。

Amazon ECS を使用すると、シンプルな API コールでコンテナベースのアプリケーションを起動および停止したり、一元サービスからクラスターの状態を取得したり、多くの使い慣れた Amazon EC2 機能にアクセスしたりできます。

Amazon ECS を使用して、リソースの需要、分離ポリシー、可用性要件に基づいて、クラスター間でコンテナの配置をスケジュールできます。Amazon ECS があれば、独自のクラスター管理システムや設定管理システムを運用する必要も、管理インフラストラクチャのスケーリングを心配する必要もなくなります。

Amazon ECS は、一貫したデプロイおよび構築機能の作成、バッチおよび抽出、変換、ロード (ETL) ワークロードの管理とスケーリング、マイクロサービスモデルでの洗練されたアプリケーションアーキテクチャの構築に使用できます。Amazon ECS のユースケースおよびシナリオの詳細については、コンテナのユースケースを参照してください。

AWS Elastic Beanstalk を使用して、アプリケーションインフラストラクチャの他のコンポーネントと組み合わせ、Docker コンテナを迅速に開発、テスト、デプロイすることもできます。しかし、Amazon ECS を使用することで、より幅広いユースケースのセットに対して、よりきめ細かい制御とアクセスが直接提供されます。詳細については、AWS Elastic Beanstalk 開発者ガイドを参照してください。

Amazon ECS の機能

Amazon ECS は、リージョン内の複数のアベイラビリティーゾーン間で可用性の高い方法でアプリケーションコンテナを実行する方法を簡易化するリージョナルサービスです。新規または既存の VPC 内に Amazon ECS クラスターを作成できます。クラスターが稼働したら、クラスター全体で実行する Docker コンテナのイメージを指定するタスク定義とサービスを定義できます。コンテナのイメージは、コンテナレジストリに保存され引き出されます。これは AWS インフラストラクチャの内にある場合も外にある場合もあります。

以下の図は、Fargate 起動タイプを使用する Amazon ECS 環境のアーキテクチャを示しています。

次のセクションでは、Amazon ECS アーキテクチャの個別の要素を詳しく見ていきます。

コンテナとイメージ

Amazon ECS にアプリケーションをデプロイするには、アプリケーションコンポーネントがコンテナで実行されるように設計する必要あります。Docker コンテナは標準化されたソフトウェア開発用のユニットであり、コード、ランタイム、システムツール、システムライブラリなど、ソフトウェアアプリケーションの実行に必要なものがすべて含まれています。コンテナは、イメージと呼ばれる読み取り専用テンプレートから作成されます。

イメージは通常、Dockerfile から構築されます。これは、コンテナに含まれるすべてのコンポーネントを指定するプレーンテキストファイルです。これらのイメージはその後レジストリに保存され、そこからクラスターにダウンロードして実行できます。コンテナ技術の詳細については、「Amazon ECS における Docker の基本」を参照してください。

タスク定義

Amazon ECS でアプリケーションを実行する準備をするには、タスク定義を作成する必要があります。タスク定義とは、アプリケーションを構成する 1 つ以上 (最大 10 個) のコンテナを記述する JSON 形式のテキストファイルです。アプリケーションの設計図と考えることができます。タスク定義はアプリケーションのさまざまなパラメータを指定します。タスク定義パラメータには、使用するコンテナ、使用する起動タイプ、アプリケーションのコンテナインスタンスで開くポート、タスクのコンテナが使用するデータボリュームなどがあります。タスク定義で利用できる具体的なパラメータは、使用する起動タイプに応じて変化します。タスク定義の作成方法については、「Amazon ECS タスク定義」を参照してください。

以下に、NGINX ウェブサーバーを実行する単一コンテナを含む、Fargate 起動タイプを使用したタスク定義の例を示します。タスク定義で複数のコンテナを使用する拡張例については、「タスク定義の例」を参照してください。

{ "family": "webserver", "containerDefinitions": [ { "name": "web", "image": "nginx", "memory": "100", "cpu": "99" }, ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "memory": "512", "cpu": "256", }

タスクとスケジューリング

タスクはクラスター内のタスク定義のインスタンス化です。Amazon ECS でアプリケーションのタスク定義を作成した後、クラスターで実行するタスクの数を指定できます。

Fargate 起動タイプを使用する各タスクには独自の分離境界があり、基盤となるカーネル、CPU リソース、メモリリソース、または Elastic Network Interface は別のタスクと共有されません。

Amazon ECS タスクスケジューラは、クラスターへのタスク配置を担当します。いくつかの異なるスケジュールオプションを使用できます。たとえば、指定された数のタスクを同時に実行および保持するサービスを定義できます。使用できるさまざまなスケジューリングオプションの詳細については、「Amazon ECS タスクのスケジューリング」を参照してください。

クラスター

Amazon ECS を使用してタスクを実行する場合、リソースの論理グループ化であるクラスターにタスクを配置します。クラスター内のタスクで Fargate 起動タイプを使用する場合、Amazon ECS がクラスターリソースを管理します。EC2 起動タイプを使用する場合、クラスターはユーザー自身が管理するコンテナインスタンスのグループです。Amazon ECS コンテナインスタンスは Amazon ECS コンテナエージェントを実行している Amazon EC2 インスタンスです。Amazon ECS は指定されたレジストリからコンテナイメージをダウンロードし、そのイメージをクラスター内で実行します。

クラスターの作成の詳細については、「Amazon ECS クラスター」を参照してください。 EC2 起動タイプを使用している場合のコンテナインスタンス作成の詳細については、「Amazon ECS コンテナインスタンス」を参照してください。

コンテナエージェント

コンテナエージェントは、Amazon ECS クラスター内の各インフラストラクチャリソース上で実行されます。リソースの現在実行中のタスクおよびリソース使用状況に関する情報を Amazon ECS に送信し、Amazon ECS からリクエストを受信したときはいつでもタスクを開始および停止します。詳細については、「Amazon ECS コンテナエージェント」を参照してください。

Amazon ECS の使用を開始する方法

初めて Amazon ECS を使用する場合、Amazon ECS の AWS マネジメントコンソール は、手順を追ってウェブサーバーのタスク定義を定義し、サービスを設定して最初の Fargate タスクを起動する初回実行ウィザードを提供します。Amazon ECS を使用したことがないユーザーには、初回実行ウィザードを強く推奨します。詳細については、「Fargate を使用した Amazon ECS の使用開始」のチュートリアルを参照してください。

あるいは、AWS Command Line Interface (AWS CLI) をインストールして Amazon ECS を使用できます。詳細については、「Amazon ECS でのセットアップ」を参照してください。

Amazon ECS と併せて使用できる AWS サービスは次のとおりです。

AWS Identity and Access Management

IAM は、ユーザーに対して AWS リソースへのアクセスを安全に制御するためのウェブサービスです。IAM により、どのユーザーがお客様の AWS リソースを使用できるか (認証)、それらのユーザーがどのリソースをどのような方法で使用できるか (承認) を制御できます。Amazon ECS では、IAM ロールを使用したコンテナインスタンスレベルでのアクセス制御、および IAM タスクロールを使用したタスクレベルでのアクセス制御に IAM を使用できます。詳細については、「Amazon ECSIAM ポリシー、ロール、アクセス権限」を参照してください。

Amazon EC2 Auto Scaling

Auto Scaling は、ユーザー定義のポリシー、ヘルスステータスチェック、およびスケジュールに基づいて、タスクの自動的なスケールアウトやスケールインを可能にするウェブサービスです。Auto Scaling では、サービス内の Fargate タスクを使用して、メトリクスの数に応じてスケールインしたり、EC2 タスクを使用して、クラスター内のコンテナインスタンスをスケーリングできます。詳細については、「サービスの Auto Scaling」を参照してください。

Elastic Load Balancing

Elastic Load Balancing は、アプリケーションに着信するトラフィックを Amazon ECS サービスのタスクに自動的に分散します。これはアプリケーションの耐障害性の向上を可能にし、アプリケーショントラフィックの分散に必要な負荷分散能力をシームレスに提供します。Elastic Load Balancing を使用してクラスター内のサービス間でトラフィックを調整するエンドポイントを作成できます。詳細については、「サービスロードバランシング」を参照してください。

Amazon Elastic Container Registry

Amazon ECR は、安全性と信頼性に優れたスケーラブルなマネージド AWS Docker レジストリサービスです。Amazon ECR では、IAM を使用してプライベート Docker リポジトリにリソースベースのアクセス権限が付与されるため、特定のユーザーまたはタスクからリポジトリとイメージにアクセスできるようになります。開発者は、Docker CLI を使用してイメージをプッシュ、プル、および管理できます。詳細については、Amazon Elastic Container Registry ユーザーガイド を参照してください。

AWS CloudFormation

AWS CloudFormation は、関連する AWS リソースのコレクションを開発者やシステム管理者が容易に作成および管理し、整った予測可能な方法でプロビジョニングおよび更新できるようにします。AWS CloudFormation スクリプトのエンティティとしてクラスター、タスク定義、サービスを定義できます。詳細については、AWS CloudFormation テンプレートリファレンスを参照してください。

Amazon ECS へのアクセス

次の方法で Amazon ECS を使用できます。

AWS マネジメントコンソール

コンソールは Amazon ECS リソースを管理するためのブラウザベースのインターフェイスです。コンソールに関するチュートリアルについては、「Fargate を使用した Amazon ECS の使用開始」を参照してください。

AWS コマンドラインツール

AWS コマンドラインツールを使用して、システムのコマンドラインでコマンドを発行することで、Amazon ECS および AWS タスクを実行できます。この方法は、コンソールを使用するよりも便利で、短時間で実行できます。コマンドラインツールは、AWS のタスクを実行するスクリプトの作成にも便利です。

AWS には、AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell という 2 セットのコマンドラインツールが用意されています。詳細については、AWS Command Line Interface ユーザーガイド および AWS Tools for Windows PowerShell ユーザーガイドを参照してください。

Amazon ECS CLI

AWS CLI を使用して Amazon ECS リソースにアクセスする方法に加えて、Amazon ECS CLI を使用することもできます。これは、Docker Compose を使用したローカル開発環境からのクラスターおよびタスクの作成、更新、モニタリングを簡易化する高レベルコマンドを提供します。詳細については、「Amazon ECS コマンドラインインターフェイスの使用」を参照してください。

AWS SDK

さまざまなプログラミング言語から Amazon ECS にアクセスできる SDK も用意されています。SDK は、自動的に次のようなタスクを処理します。

  • サービスリクエストの暗号化された署名

  • リクエストの再試行

  • エラーレスポンスの処理

使用できる SDK については、「アマゾン ウェブ サービスのツール」を参照してください。