Amazon Elastic Container Service の特徴

AWS にコンテナ化したワークロードを容易にデプロイすることができる。単一の Docker コンテナから、エンタープライズアプリケーションのポートフォリオ全体を管理するまでに成長できる。コントロールプレーンやノードの複雑な管理手順に煩わされることなく、クラウドやオンプレミスのアベイラビリティーゾーンわたってコンテナワークロードを実行し、スケーリングする。

Azure の Container Instances 相当

Amazon ECS の主な特徴

  • AWS Fargate を用い、デフォルトでサーバーレス
    • AWS Fargate が組み込まれているため、サーバーを管理したり、容量計画を扱う心配をしたり、安全性の面からコンテナワークロードを分離させる方法を検討する必要がない。 アプリケーションの要件を定義し、コンソールまたは Command Line Interface (CLI) で起動タイプとして Fargate を選択すると、コンテナ実行に必要なすべてのスケーリングとインフラストラクチャ管理が Fargate によって処理される。
  • Amazon ECS Anywhere
    • ECS Anywhere により、使い慣れた Amazon ECS コンソールとオペレーターツールを使い、オンプレミスのコンテナワークロードを管理でき、コンテナベースのアプリケーション全体で一貫したエクスペリエンスを実現する。
    • AWS Systems Manager (SSM) の統合で、オンプレミスのハードウェアと AWS コントロールプレーン間には、自動的に安全な信頼関係が確立する。
  • 設計による安全性と分離
    • 信頼済みのセキュリティ、ID、管理、ガバナンスのツールがネイティブで統合されているため、すばやくかつ確実に本番環境に移行することができる。 コンテナそれぞれにきめ細かく許可を割り当てることができるため、アプリケーション構築時には高度な分離が可能になる。
  • 自律型コントロールプレーンの運用
    • 完全マネージド型コンテナオーケストレーションサービスであり、AWS の設定と運用上のベストプラクティスが組み込まれているため、コントロールプレーン、ノード、アドオンを管理する必要がない。ネイティブで AWS とサードパーティーのツールのどちらも統合されているため、チームはアプリケーションの構築のみに集中でき、環境に気を散らされることはない。

開発

  • Docker のサポート
    • Docker をサポートしているため、Docker コンテナの実行および管理が可能。Docker Compose CLI に統合されているため、複数のコンテナから成るアプリケーションを定義し、実行することができる。コンテナとしてローカルでパッケージされたアプリケーションは、設定を変更することなく Amazon ECS でデプロイして実行できる。
  • Windows コンテナとの互換性
    • Amazon ECS は、Windows コンテナの管理をサポートしている。Amazon ECS 向けに最適化された Windows Amazon マシンイメージ (AMI) により、インスタンスおよびコンテナの作成時間のパフォーマンスを強化することや、CPU、メモリ使用量、予約メトリクスを確認することが可能になる。
  • AWS Copilot
    • Amazon ECS および AWS Fargate で本番環境対応のコンテナ化アプリケーションを構築、リリース、および操作できるようにするツール。インフラストラクチャから継続的デリバリーまでのベストプラクティスを取り入れており、お客様がコマンドラインで快適に利用できるようにする。また、サービスのステータスやログを表示してサービスの状態を監視したり、本番サービスをスケールアップまたはスケールダウンしたり、自動テスト用の新しい環境を起動したりすることもできる。AWS Copilot をダウンロードする。
  • リポジトリのサポート
    • Docker Hub や Amazon Elastic Container Registry (ECR) といった、サードパーティーがホストする Docker イメージリポジトリやアクセス可能なプライベート Docker レジストリで使用できる。 お客様がタスク定義でリポジトリを指定するだけで、Amazon ECS でアプリケーションに最適なイメージが取得される。

マネジメント

  • タスク定義
    • タスク定義と呼ばれる宣言型の JavaScript Object Notation (JSON) テンプレートを使用してタスクを定義できる。タスク定義では、Docker のリポジトリとイメージ、メモリと CPU の要件、共有データボリューム、コンテナ同士のリンク方法といった、タスクに必要なコンテナを 1 つ以上指定できる。サービスに登録できる単一のタスク定義ファイルから必要な数だけタスクを起動できる。また、タスク定義ファイルを使用すると、アプリケーション仕様のバージョン管理を行うこともできる。
  • プログラムによる制御
    • 簡単な一連の API アクションでサービスを統合および拡張できる。この API アクションにより、クラスターの作成および削除、タスクの登録および登録解除、Docker コンテナの起動および終了、クラスターおよびクラスター内インスタンスの詳細なステータス情報の取得が可能。Amazon ECS クラスターのプロビジョニング、タスク定義の登録、コンテナのスケジューリングに AWS CloudFormation を使用することもできる。
  • コンテナのデプロイメント
    • コンテナを新しいバージョンに更新できる。アプリケーションのタスク定義を新しいバージョンに更新してアップロードすると、Amazon ECS スケジューラにより、更新されたイメージを使用して新しいコンテナが自動的に開始され、前のバージョンを実行しているコンテナは自動的に停止する。Amazon ECS では、コンテナは、関連する Application Load Balancer から自動的に登録および登録解除される。
  • Blue/Green デプロイ
    • AWS CodeDeploy を使用した Blue/Green デプロイでは、アプリケーションの更新中のダウンタイムを最小限に抑えることができる。Amazon ECS サービスの新しいバージョンと古いバージョンを一緒に起動し、トラフィックを再ルーティングする前に新しいバージョンをテストすることができる。デプロイプロセスをモニタリングし、問題がある場合は迅速にロールバックすることもできる。
  • コンテナの自動復旧
    • 異常のあるコンテナが自動的に復旧し、アプリケーションをサポートするのに必要な数のコンテナを確実に使用できる。
  • Capacity Providers
    • Capacity Providers は、コンテナ化されたワークロードをさまざまな種類のコンピューティング能力で実行する方法について柔軟なルールを定義し、容量のスケーリングを管理する。キャパシティープロバイダーは、Amazon Elastic Compute Cloud (Amazon EC2) と AWS Fargate のどちらでも動作する。タスクとサービスの実行時に、それらを複数の Capacity Providers に分割でき、Fargate と Fargate Spot 全体で事前に定義した分割割合でサービスを実行するなど、新たな機能を有効にすることができる。
  • ストレージ
    • Amazon Elastic File System (Amazon EFS) はシンプルでスケーラブルなフルマネージドの伸縮自在なファイルシステムで、最新アプリケーションの構築、Amazon ECS と AWS Fargate のデプロイのデータとステートを持続および共有などに使用できる。接続性を含め、コンテナを用いた Amazon EFS 使用のあらゆる側面に対応し、管理は不要です。アプリケーションのみに集中でき、インフラストラクチャに注意が削がれることはない。永続ファイルストレージの詳細を確認する。

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

Amazon ECS には、リソースニーズ (CPU、RAM など) と可用性要件に基づいてクラスター全体にコンテナを配置するスケジューリングストラテジーが複数用意されている。利用可能なスケジューリングストラテジーを使用して、バッチジョブ、実行時間の長いアプリケーションやサービス、デーモンプロセスをスケジューリングできる。

  • タスクスケジューリング
    • バッチ処理ジョブなど、作業の実行と停止を含むプロセスを実行できる。
    • タスクスケジューリングを使用したタスクの開始方法には、ジョブのキューから自動で行う方法、設定した時間間隔に基づいて行う方法がある。
  • サービススケジューリング
    • ステートレスなサービスとアプリケーションを実行できる。
    • 指定した数のタスクが常に実行され、失敗した場合は再度開始される。
    • タスクを Elastic Load Balancing ロードバランサーに登録することや、実行中のタスクに対してユーザーが定義したヘルスチェックを実行することができる。
  • デーモンスケジューリング
    • ECS クラスター内の選択した各インスタンスで同じタスクが自動的に実行される。
    • ログ記録、モニタリング、バックアップなど、サービスに共通の管理機能を担うタスクを簡単に実行できる。
  • Task Placement
    • ユーザーは、インスタンスタイプ、アベイラビリティーゾーン、ユーザーが定義するカスタム属性といった組み込みの属性に基づいて、Amazon EC2 インスタンスのクラスターへのタスクの配置方法をカスタマイズすることができる。
    • environment=production のような属性を使用してリソースにラベルを付与したり、これらのリソースを検索するためにリスト API アクションを使用したりする。
    • RunTask および CreateService API アクションを使用して、これらのリソースにタスクをスケジューリングする。

Amazon ECS では、ビンパックや分散などの配置戦略を使用して、タスクの配置場所を詳細に定義する。複数のポリシーを連鎖させることで、コードを記述することなく高度な配置機能を実現できる。

ネットワーク

  • サービス検出

    • AWS Cloud Map と統合されているため、コンテナ化されたサービスを互いに簡単に検出して接続することができる。 AWS Cloud Map は、アプリケーションリソースにカスタム名を定義付けるクラウドリソースの検出サービスです。ウェブサービスが、これらの動的に変化するリソースの最新ロケーションを常に検出するため、アプリケーションの可用性が向上する。
  • サービスメッシュ

    • サービスメッシュでは、アプリケーション内のマイクロサービスにおける通信方法を標準化することで、複雑なマイクロサービスアプリケーションを簡単に構築および実行できる。
    • AWS App Mesh は、エンドツーエンドの可視性と高可用性を得るためにアプリケーションの一部を簡単に構成できるサービス。
    • App Mesh を使用するには、Envoy プロキシイメージを ECS タスク定義に追加する。App Mesh は、サービスメッシュ機能を提供するように、Envoy の設定を管理する。App Mesh は、提供された Envoy ブートストラップ構成で指定されたエンドポイントに、メトリクス、ログ、およびトレースをエクスポートする。App Mesh では、メッシュ対応のマイクロサービス間で、トラフィックルーティング、回路遮断、再試行などの制御を設定するための API を使用できる。
  • タスクネットワーキング

    • Docker ネットワーキングをサポートしており、Amazon VPC と統合してコンテナを分離できる。これにより、コンテナをその他のサービスや外部トラフィックと接続する方法をコントロールできる。
    • さまざまなユースケースを対象としたコンテナ用の 4 種類のネットワーキングモードから選択できる。
      • タスクネットワーキング/awsvpc
        • 実行中の各 ECS タスクに専用の伸縮自在なネットワーキングインターフェイスが割り当てられるため、VPC 内のコンテナで EC2 インスタンスのようなフルネットワーキング機能を利用できる。
      • ブリッジ
        • ローカルの仮想ネットワーク内のホストで実行しているすべてのコンテナを接続する Linux ブリッジが作成される。これには、ホストのデフォルトネットワーク接続でアクセスできる。
      • ホスト
        • ホストのネットワークスタックにコンテナが直接追加され、分離せずにホストのネットワークにコンテナが公開される。
      • なし
        • コンテナの外部ネットワーキングが無効になる。
  • ロードバランシング

    • Elastic Load Balancing と統合されているため、ユーザーは Application Load Balancer または Network Load Balancers を使用して、コンテナ全体でトラフィックを分散できる。
    • タスク定義とロードバランサーを使用するよう指定すると、ロードバランサーに対するコンテナの追加と削除が自動的に実行される。
    • タスク定義でダイナミックポートを指定し、これにより、EC2 インスタンスで予定されている場合に、コンテナに未使用のポートが提供される。
    • パスベースのルーティングを使用して、複数のサービスでロードバランサーを共有する。

モニタリングとロギング

  • モニタリング
    • Amazon CloudWatch を使用して、コンテナおよびクラスターをモニタリングする機能を提供している。タスク定義、サービスまたはクラスターごとのグループで、実行タスクの CPU とメモリ使用の平均値と合計量をモニタリングできる。コンテナやクラスターのスケールを拡張または縮小する際に、CloudWatch アラームを設定して警告する。
  • ロギング
    • すべての Amazon ECS API コールを記録し、そのログファイルが AWS CloudTrail を通じて配信されるよう設定できる。記録される情報には、API 呼び出し元の ID、API コールの時間、API 呼び出し元のソース IP アドレス、リクエストのパラメータ、および Amazon ECS から返された応答の要素が含まれる。CloudTrail により、AWS マネジメントコンソール、AWS SDK、AWS CLI から行われた API コールの履歴が提供される。これで、セキュリティ分析、リソース変更履歴、コンプライアンスの監査が可能になる。
  • AWS Config
    • AWS Config が統合され、AWS アカウントで AWS リソースの設定を可視化する。AWS Config により、ユーザーは、リソースがどのように設定されているのか、互いにどのように関連しているのか、継続的に設定や関係性はどのように変化するのかをモニタリングし、追跡することができる。AWS Config を使用することで、コンプライアンス、セキュリティ、運用上のトラブルシューティング、リソース管理を簡素化できる。

ハイブリッドデプロイ

  • AWS Outposts
    • AWS Outposts で Amazon ECS を使用すると、オンプレミスシステムへの特別に低いレイテンシーを必要とするコンテナ化したアプリケーションを実行できる。Outposts は、AWS のインフラストラクチャ、AWS のサービス、API、およびツールを、実質的にすべての接続サイトに拡張する完全マネージド型サービス。Outposts で Amazon ECS を使用すれば、クラウドでコンテナを管理するように簡単にオンプレミスのコンテナを管理できる。