Amazon Elastic Container Service とは - Amazon Elastic Container Service

Amazon Elastic Container Service とは

Amazon Elastic Container Service (Amazon ECS) は、クラスターでコンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。コンテナは、個々のタスクを実行したり、サービスとして使用したりするタスク定義で定義されます。AWS Fargate によって管理されるサーバーレスインフラストラクチャでタスクとサービスを実行できますが、インフラストラクチャの制御を強化する場合は、管理する Amazon EC2 インスタンスのクラスターでタスクとサービスを実行することもできます。

Amazon ECS を使用すると、単純な API 呼び出しでコンテナベースのアプリケーションを起動および停止できます。また、一元化されたサービスからクラスターの状態を取得し、Amazon EC2 既存ユーザーの場合、多くの使い慣れた Amazon EC2 機能にアクセスすることもできます。

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

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

AWS コンテナサービスチームは、GitHub でパブリックロードマップを維持しています。ロードマップには、チームが取り組んでいる内容に関する情報が含まれており、AWS のお客様が直接フィードバックを提供することができます。詳細については、AWS Containers Roadmap を参照してください。

Amazon ECS の機能

Amazon ECS は、リージョン内の複数のアベイラビリティーゾーン間で可用性の高い方法でコンテナを実行する方法を簡易化するリージョナルサービスです。新規または既存の VPC 内に Amazon ECS クラスターを作成できます。クラスターが稼働したら、クラスター全体で実行するコンテナイメージを指定するタスク定義を作成できます。タスク定義は、タスクの実行またはサービスの作成に使用されます。コンテナイメージは、コンテナレジストリに格納され、Amazon Elastic Container Registry などのコンテナレジストリからプルされます。

次の図は、AWS Fargate で実行される Amazon ECS 環境のアーキテクチャを示します。


                Fargate 起動タイプを使用する Amazon ECS 環境のアーキテクチャを示す図。

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

コンテナとイメージ

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

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


                    Amazon ECS 環境内での Docker イメージの作成と登録を示す図。

タスク定義

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

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

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

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

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

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


                    Fargate 起動タイプを使用する Amazon ECS 環境内でのタスクスケジューリングと配置を示す図。

クラスター

Amazon ECS クラスターは、タスクまたはサービスの論理グループです。1 つ以上の Amazon EC2 インスタンス (コンテナインスタンスとも呼ばれます) をクラスターに登録してタスクを実行することも、Fargate が提供するサーバーレスインフラストラクチャを使用することもできます。タスクが Fargate で実行されると、クラスターリソースは Fargate によって管理されます。

Amazon ECS の初回使用時には、デフォルトのクラスターが作成されますが、アカウントに複数のクラスターを作成して、クラスター別にリソースを分けることができます。

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

コンテナエージェント

コンテナエージェントは 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 Elastic Container Service の Identity and Access Management を参照してください。

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 マネジメントコンソール

AWS マネジメントコンソール は Amazon ECS リソースを管理するためのブラウザーベースのインターフェイスです。コンソールでは、サービスの概要を目で見て確認できます。追加のツールを必要とせずに、新しい Amazon ECS 機能を確認しながら、チュートリアルやウォークスルーを簡単に実行できます。コンソールに関するチュートリアルについては、「Amazon ECS の開始方法」を参照してください。

AWS CloudFormation または Terraform

AWS CloudFormation または Amazon ECS 用の Terraform は、インフラストラクチャをコードとして定義する強力な方法です。これにより、実行中のテンプレートまたは AWS CloudFormation スタックのバージョンをいつでも簡単に追跡し、前バージョンにロールバックできます。インフラストラクチャとアプリケーションのデプロイを、同じ自動化された方法で実行できるため、AWS CloudFormation と Terraform の一般的なフォーマットを作成し、継続的デリバリーパイプラインから Amazon ECS にワークロードをデプロイできます。

AWS CloudFormation の詳細については、「AWS CloudFormation での Amazon ECS リソースの作成」を参照してください。

AWS Copilot CLI

AWS Copilot CLI は、パッケージ化されたアプリケーションを Amazon ECS のコンテナおよび環境にデプロイし、またこうしたアプリケーションを操作できるコマンドラインインターフェイスです。これは、Application Load Balancer、パブリックサブネット、タスク、サービス、クラスタなどの AWS および Amazon ECS プリミティブを理解しなくても、ソースコードから直接アプリケーションをデプロイできる総合的ツールです。AWS Copilot はユーザーに代わって、負荷分散されたウェブサービスやバックエンドサービスなど、コンテナ化されたアプリケーション用にすぐに使用できる運用環境を提供するサービスパターンから AWS リソースを作成します。AWS CodePipeline パイプラインを介して、複数の環境、アカウント、またはリージョンにまたがってデプロイでき、これらすべてを CLI 内で管理できます。AWS Copilot を使用すると、ログの表示やサービスの健全性など、オペレーターのタスクも実行できます。

AWS Copilot は、ユーザーがまずアプリケーションに集中できる単一のツールです。詳細については、「AWS Copilot コマンドラインインターフェイスの使用」を参照してください。

AWS CDK

AWS クラウド開発キット (AWS CDK) は、使い慣れたプログラミング言語を使用してクラウドアプリケーションリソースをモデル化およびプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです。AWS CDK は、AWS CloudFormation により安全かつ反復可能な方法でリソースのプロビジョニングを行います。CDK を使用すると、環境を生成するのに必要なコード行を減らし、アプリケーションと同じ言語を使用することができます。Amazon ECS は、共通のアーキテクチャを作成する ecs-patterns という名前の CDK 上のモジュールを提供します。使用可能なパターンは ApplicationLoadBalancedFargateService() で、このパターンはクラスター、タスク定義、AWS Fargate で負荷分散された Amazon ECS サービスを実行するための追加リソースを作成します。詳細については、AWS クラウド開発キット (AWS CDK) 開発者ガイドの「AWS CDK を使用して AWS Fargate サービスで Amazon ECS を作成する」を参照してください。

AWS CLI

AWS Command Line Interface (AWS CLI) は、AWS サービスを管理するための統合ツールです。1 つのツールをダウンロードおよび設定するだけで、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこうしたサービスを自動化することができます。AWS CLI の Amazon ECS コマンドは、Amazon ECS API を反映しています。AWS CLI を使用することは、コマンドラインツールとスクリプトの使用を好むが Amazon ECS リソースに対して実行するアクションを正確に把握しているユーザーや、Amazon ECS API について詳しく知りたいユーザーにとって有益です。

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

Amazon ECS CLI を使用すると、ユーザーは Docker Compose ファイル形式を使って AWS Fargate 上で Amazon ECS アプリケーションを実行できます。Amazon ECS を使用して、リソースのプロビジョニング、イメージのプッシュとプルを迅速に行い、Amazon ECR または AWS Fargate で実行中のアプリケーションを監視することができます。また、ローカルで実行されているコンテナと、クラウド内のコンテナを CLI 内でテストすることもできます。詳細については、「Amazon ECS コマンドラインインターフェイスの使用」を参照してください。

Amazon ECS 用の Docker CLI プラグイン

AWS と Docker が提携して、Docker ツールから直接 Amazon ECS にコンテナをデプロイして開発できる簡素化されたデベロッパーエクスペリエンスを実現しました。これで、Docker Desktop と Docker Compose を使用してコンテナをローカルで構築およびテストした後、同じ CLI を介して Amazon ECS の Fargate にコンテナをデプロイできるようになりました。

Amazon ECS 用の Docker CLI プラグインは現在ベータ版です。詳細については、GitHub 上の「Amazon ECS 用の Docker CLI プラグイン」を参照してください。

AWS SDK

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

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

  • リクエストの再試行

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

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

料金

Amazon ECS の料金は、コンテナ化されたワークロードをホストするために AWS Fargate または Amazon EC2 インフラストラクチャを使用しているかどうかによって異なります。AWS Outposts で Amazon ECS を使用する場合、料金は Amazon EC2 を使用する場合と同じモデルに従います。詳細については、「Amazon ECS 料金表」を参照してください。

Amazon ECS と Fargate は Savings Plans も提供しており、AWS の使用量を大幅に節約できます。詳細については、Savings Plans ユーザーガイドを参照してください。

請求を表示するには、AWS Billing and Cost Management コンソール請求およびコスト管理ダッシュボードに移動します。請求書には、料金の明細が記載された使用状況レポートへのリンクが記載されています。AWS アカウント請求の詳細については、「AWS Account Billing」を参照してください。

AWS の請求、アカウント、イベントについてご質問がある場合は、AWS サポートにお問い合わせください

AWS 環境のコスト、セキュリティ、およびパフォーマンスを最適化できるサービスである Trusted Advisor の概要については、「AWS Trusted Advisor」を参照してください。