メニュー
Amazon Elastic Container Service
開発者ガイド (API Version 2014-11-13)

Amazon Elastic Container Service とは

Amazon Elastic Container Service (Amazon ECS) は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのクラスターで Docker コンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。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 インフラストラクチャの内にある場合も外にある場合もあります。

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

コンテナとイメージ

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

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

タスク定義

Amazon ECS でアプリケーションを実行する準備をするには、タスク定義を作成する必要があります。タスク定義とは、アプリケーションを構成する 1 つ以上のコンテナを記述する JSON 形式のテキストファイルです。アプリケーションの設計図と考えることができます。タスク定義はアプリケーションのさまざまなパラメーターを指定します。たとえば、使用するコンテナやそれが位置するリポジトリ、アプリケーションのコンテナインスタンスで開くポート、タスクのコンテナが使用するデータボリュームなどです。タスク定義の作成方法については、「Amazon ECS タスク定義」を参照してください。

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

{
      "family": "webserver",
      "containerDefinitions": [
      {
              "name": "web",
              "image": "nginx",
              "cpu": 99,
              "memory": 100,
              "portMappings": [{
                      "containerPort": 80,
                      "hostPort": 80
              }]
      }]
}

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

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

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

クラスター

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

クラスターの作成の詳細については、「Amazon ECS クラスター」を参照してください。コンテナインスタンスの作成の詳細については、「Amazon ECS コンテナインスタンス」を参照してください。

コンテナエージェント

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

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

初めて Amazon ECS を使用する場合、Amazon ECS の AWS マネジメントコンソールは、手順を追ってウェブサーバーのタスク定義を定義し、サービスを設定して最初のクラスターを起動する初回実行ウィザードを提供します。Amazon ECS を使用したことがないユーザーには、初回実行ウィザードを強く推奨します。詳細については、「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 ECS IAM ポリシー、ロール、アクセス権限」を参照してください。

Auto Scaling

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

Elastic Load Balancing

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

Amazon EC2 Container Registry

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

AWS CloudFormation

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

Amazon ECS へのアクセス

次のいずれかの方法で Amazon ECS を使用できます。

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

コンソールは Amazon ECS リソースを管理するためのブラウザーベースのインターフェイスです。コンソールに関するチュートリアルについては、「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 については、「アマゾン ウェブ サービスのツール」を参照してください。