【AWS】Amazon Elastic Container Service(ECS)について解説します。
近年、ビジネスを成功させるには、ソフトウェアやサービスをいかにスピーディーに開発するか、どのように効率良くシステムを運用するかが重要となってきました。そのような開発の高速化とサービスの進化を実現するためには、短期間で要件定義からリリースまでを反復させるシステムの導入や、サービスの停止時間をできる限り削減しながら、継続的にサービスを提供、運用することが求められます。そのような取り組みを実現するためのテクノロジーとして、「コンテナ技術」やコンテナ実行環境「Docker」が人気となっています。AWSではAmazon Elastic Container Service(Amazon ECS)というコンテ管理サービスがあります。ここではAmazon ECSについて紹介していきます。
■そもそもコンテナとは
ホストとなる1台のコンピュータにインストールされているOSの上に、仮想的なユーザー空間であるコンテナを構築することができる技術です。利用目的は仮想化とほとんど同じなため混同する場合が多いですが、それぞれ以下のような特徴があります。
- 【仮想化の特徴】
- ・ゲストマシンごとにOSをインストールしなければいけない。
- ・物理的に複数のコンピュータを動かしていることになるため、ゲストマシンの数だけリソースが要求される。
- ・ホストコンピュータに対して、メモリやストレージなどのハードウェア環境にそれなりのコストをかけなければいけない。
- ・個々のゲストマシンの起動にも時間がかかる。
- 【コンテナの特徴】
- ・OSをインストールする必要がないため、メモリなど大量に消費することがない。
- ・OS自体を共有しているため、それぞれの環境の起動も仮想化と比べて迅速に行うことができる。
- ・Dockerエンジンさえあれば基本どこでも動くため、可搬性が高い。
- ・1台のコンピュータで異なる複数のOSを使い分けることができない。
- ・コンテナが攻撃を受けると、ほかのコンテナにも危険にさらされる。
■Amazon Elastic Container Service(Amazon ECS)
Amazon Elastic Container Serviceは、フルマネージド型のコンテナオーケストレーションサービスです。現在では、多くの企業がECSを使用して、セキュリティ、信頼性、スケーラビリティを実現するために最も機密性が高くミッションクリティカルなアプリケーションの実行を可能にしています。
- 【ECSのユースケース】
- ハイブリッドデプロイ
- OutpostsでECS を使用すれば、オンプレミスシステムへの特別に低いレイテンシーを必要とするコンテナ化したアプリケーションを実行でき、クラウドでコンテナを管理するように簡単にオンプレミスのコンテナを管理できます。
- AWS Outposts:AWSのインフラストラクチャ、AWSのサービス、APIおよびツールを、実質的にすべての接続サイトに拡張する完全マネージド型サービス。
- Machine Learning
- AWS Deep Learning Containersを使って、様々な機械学習ライブラリのモデルをトレーニングし提供できます。ECSの深層学習推論ワークロードを加速することもできます。
- バッチ処理
- AWS Batchを使ってECS のシーケンシャルまたは並行バッチのワークロードを実行でき、送信したバッチジョブのボリュームと特定のリソース要件に基づいて、最適な量と種類のコンピューティングリソースを動的にプロビジョニングすることで、数十万単位のバッチコンピューティングジョブを簡単かつ効率的に実行できます。
- ウェブアプリケーション
- 複数のAZにわたって可用性の高い設定で、自動的にスケールアップ/ダウンするウェブアプリケーションを構築できます。ECS上で実行することにより、ウェブアプリケーションは AWSの高いパフォーマンス、規模、信頼性、可用性の利点を活用することができます。
■Amazon Elastic Container Serviceの利点
- ▼サーバーレス
- ECSはFargateをサポートしているため、コンテナにサーバーレスコンピューティングを提供できます。Fargateではサーバーのプロビジョンと管理が不要で、アプリケーションごとにリソースを指定してその分のみ料金を支払うことができるだけでなく、設計段階からのアプリケーション分離によりセキュリティを強化します。
- ・Fargate:Amazon Elastic Container Service(ECS)とAmazon Elastic Kubernetes Service(EKS)の両方で動作する、コンテナ向けサーバーレスコンピューティングエンジン。
- ▼Capacity Providersでアプリケーション第一
- ECS Capacity Providersで、インフラストラクチャではなくアプリケーションの構築と管理に集中できるようになります。Capacity Providersを使用すれば、アプリケーションの要求によって割り当てられるコンピューティング能力が決まるため、EC2とFargateを組み合わせたスポットとオンデマンドの料金設定オプションをアプリケーションに柔軟に適用できます。
- ・ECS Capacity Providers:コンテナのコンピューティングキャパシティーを管理する新しい方法。
- ▼スケールに応じたパフォーマンス
- Amazonのいくつかの主要サービスを強化してきた ECSは、長年にわたりスケーラビリティの高いサービスを運用してきた経験から培った技術で構築されています。ECSにより複雑になることなく、数千個のコンテナを迅速に起動できます。
- ▼安全性
- ECSではお客様独自のAmazon VPCでコンテナを起動するため、お客様のVPCセキュリティグループおよびネットワークACLが使用可能です。他のお客様とコンピューティングリソースを共有することはありません。IAMを使用して、各コンテナに対するアクセス権限をきめ細かく割り当て、各サービスへのアクセスや、コンテナがアクセスできるリソースを制限することもできます。この高い隔離性により、ECSを使用して極めて安全なアプリケーションを作成できます。
- ・IAM:AWS Identity and Access Management(IAM)は、AWS リソースへのアクセスを安全に管理するためのウェブサービス。
- ▼信頼性
- ECSは22(国)のリージョンで69か所のアベイラビリティーゾーン(AZ)を備えた最高のグローバルインフラストラクチャで実行されます。AWSは2番目に大きいクラウドプロバイダーよりも2倍以上のアベイラビリティーゾーンを提供しています。ECSはAWS Compute SLAがサポートしているため、ECSの月間稼働率が少なくとも 99.99% であることが保証されます。
- ・AWS Compute SLA:Service Level Agreementの略で、定義された可用性以上で使用できるようにするため商業的に合理的な努力をAWSがするという合意。
- ▼コストのために最適化
- ECSでFargateスポットタスクまたは EC2スポットインスタンスを使用すれば、ステートレスかつフォールトトレラントなアプリケーションを実行するためのオンデマンド料金と比較して、最大で90%の割引を実現できます。Saving Planを使用すると、永続的なワークロードに対して最大50%の割引となります。スポットインスタンスをオンデマンドインスタンスやリザーブドインスタンスと組み合わせることで、ECSクラスターの大規模な実行を簡単に行うことが可能となります。
■Amazon Elastic Container Serviceの特徴
- 【開発】
- ▼Dockerのサポート
- ECSではDockerがサポートされているため、ローカルでコンテナとしてパッケージされたアプリケーションは、設定を変更することなくECSでデプロイして実行できます。
- ▼Windowsコンテナとの互換性
- ECSはWindowsコンテナの管理をサポートしているため、ECS向けに最適化されたAMIにより、インスタンスおよびコンテナ作成時間の効率や、CPU、メモリ使用量、予約メトリクスを確認することが可能です。
- ▼ローカル開発
- Amazon ECS CLIを使用すると、ローカルでの開発を簡素化することができるため、ECS上でコンテナを容易に設定して実行できます。CLIでは、マルチコンテナアプリケーションを定義し、運用するためのオープンソースツールであるDocker Composeがサポートされています。
- ・Amazon ECS CLI:コマンドラインインターフェイス(CLI)
- ▼リポジトリのサポート
- ECSは、Docker HubやAmazon ECRといった、サードパーティーがホストするDockerイメージリポジトリやアクセス可能なプライベートDockerレジストリで使用できます。タスク定義でリポジトリを指定するだけで、ECSでアプリケーションに最適なイメージが取得されます。
- ・Amazon ECR:マネージドAWS Dockerレジストリサービス。
- 【管理】
- ▼タスク定義
- ECSを使用すると、タスク定義と呼ばれる宣言型のJSONテンプレートを使用してタスクを定義できます。Dockerのリポジトリとイメージ、メモリとCPUの要件、共有データボリューム、コンテナどうしのリンク方法といった、タスクに必要なコンテナを1つ以上指定でき、サービスに登録できる単一のタスク定義ファイルから必要な数だけタスクを起動したり、バージョン管理を行うことが可能です。
- ▼プログラムによる制御
- ECSでは、簡単な一連のAPIアクションでサービスを統合および拡張できます。このAPIアクションにより、クラスターの作成および削除、タスクの登録および登録解除、Dockerコンテナの起動および終了、クラスターおよびクラスター内インスタンスの詳細なステータス情報の取得が可能です。
- ▼コンテナのデプロイメント
- アプリケーションのタスク定義を新しいバージョンに更新してアップロードすると、ECSスケジューラにより、更新されたイメージを使用して新しいコンテナが自動的に開始され、前のバージョンを実行しているコンテナは自動的に停止します。コンテナは、関連するロードバランサーから自動的に登録および解除されます。
- ▼Capacity Providers
- Capacity ProvidersはEC2とFargateのどちらでも動作し、コンテナ化されたワークロードをさまざまな種類のコンピューティング能力で実行する方法について柔軟なルールを定義し、容量のスケーリングを管理します。
- ▼ストレージ
- ECSタスク定義の中にEFSの設定があり、接続を含めコンテナとEFSを使用するためのすべての側面はコントロールされていて管理は不要です。ECS、Fargate、EFSはすべて高可用性、セキュア、スケーラブル、高パフォーマンスといった特徴を備えています。これらは互いの価値の上に構築されるため、デベロッパーはこれらの特性を設計する必要がなくなり、インフラストラクチャではなくアプリケーションに集中することができるようになります。
- ・EFS:Amazon Elastic File Systemはフルマネージドの伸縮自在なファイルシステム。最新アプリケーションの構築、ECSとFargateのデプロイデータとステートを持続および共有などに使用可能。
■まとめ
コンテナ技術は奥が深く、大変利便性の高いサービスです。AWSへ移行すれば様々なサービスに関連付けられ、業務の効率化が図れます。プロジェクトに最適な構成を考えて、この機会に導入検討はいかがでしょうか。