EC2 Container ServiceはDockerコンテナをサポートしたスケーラビリティの高いコンテナ管理サービスで、Amazon Elastic Compute Cloud(EC2)インスタンスのクラスタ上でアプリケーションを走らせることが簡単にできます。我々はAWS re:Inventでプレビューを開始しこれまでたくさんの素晴らしいフィードバックを頂いてきました。
Amazon ECSは、お客様の多くがDockerを使ってアプリケーションやサービスをカプセル化していたり、1つまたは典型的には複数のアプリケーションをEC2インスタンスで組んだクラスタ上で動かす際にクラスタの管理に悩みたくないという話を受けて作られました。安定してスケールできて、既に利用しているEC2の高度な機能の利便性も享受できる様なサービスがお客様から求められていました。
また、EC2インスタンスやコンテナの状態を含むクラスタ管理はトリッキーになり得て、特に環境が増えてくるとそうなりがちという話しも聞きました。例えばどのインスタンスが利用可能で必要なキャパシティを持っているかといった状態の情報に、正確にタイミングよくアクセスする必要があり、それができて初めてコンテナの配置場所の決定が行えます。状態の追跡は、インスタンスやコンテナの数が数千や数万に増えていくと、どんどんと難しくなっていきかつ重要度がもっと増していきます。
Amazon ECSはこれらすべての要求以上を満たす様にデザインされています。お客様自身でクラスタ管理基盤をインストールしたり運用したりスケールしたりする必要はありません。単純なAPI呼び出しだけで、コンテナ化されたアプリケーションを起動したり止めたりできますし、クラスタの状態も知ることもできます。Amazon EC2や他のAWSサービスを組み合わせて使うこともできますし、Elastic Load Balancing、EBSボリューム、EC2 セキュリティグループやIAMロールといった有名な機能のメリットを活かすこともできます。
加えて、コンテナのスケジューリングにはいくつかの選択肢があり、幅広い種類のアプリケーションを走らせることや、コンテナやアプリケーションやサービスの配置や利用率を管理することもできます。
今日、一般利用可能に 東京リージョンでも利用が可能に
Amazon ECSが一般利用可能になったことをお伝えできることを非常に嬉しく思います。合わせて動き続けるアプリケーションのサポート、新しい素敵なAmazon ECSコンソール、そしてCloudTrailとの連携という新しいいくつかの強力な機能追加も行いました。また、Amazon ECSがAsia Pacific(東京)リージョンでも利用可能になりました。
それでは新機能を1つずつ見てみましょう。
ロングランニングアプリケーション
これまでAmazon ECSはクラスタ上のDockerコンテナのスケジュールに2つの手段を提供していました。1つはバッチジョブの様に1回実行するようなもので、終わったら終了します。もう1つはAmazon ECSのAPIからクラスタの状態情報を取得して、サードパーティやカスタムのスケジューラに渡すことができます。
本日のリリースから、ロングランニングアプリケーションやサービスを管理するために、新しくAmazon ECS サービススケジューラが利用できます。サービススケジューラは、アプリケーションの可用性の管理を助けてくれ、キャパシティの要求にあう様にコンテナを起動したり停止したりしてスケールすることができます。以下が提供される機能一覧です:
- ロードバランシング - サービススケジューラによって、Elastic Load Balancingを使ったコンテナをまたがったトラフィックの分散が可能になります。Amazon ECSは関連するロードバランサに自動的に登録・解除を行います。
死活管理 - サービススケジューラは正常でなくなった(ELBのヘルスチェックが失敗した)コンテナを自動で復活させたり停止したりします。それによってアプリケーションを走らせるのに必要な指定した数の正常なコンテナが維持されることを保証してくれます。
スケールアップとスケールダウン - サービスを稼働させるコンテナの数を変更することで、アプリケーションをスケールアップさせたりスケールダウンさせることができます。
更新管理 - アプリケーションの定義を変えたり新しいイメージを使うことで、アプリケーションの更新もできます。スケジューラは新しい定義で自動的にコンテナ群を起動して、過去のバージョンが動いているコンテナを止めます。ELBが使われている時には、ELBのコネクションをドレインさせて待ってくれます。
これらの新しい機能を使って基本的なサービスディスカバリを実装することもできます。クラスタ上で動いているサービスを一覧することができて、ELBをそのサービスのエンドポイントとしてつかうことができます。
Giltの言葉
オンラインの小売を展開するGiltは、顧客に今日のトップブランドや体験への内部的な情報を提供しています。共同創設者のPhong Nguyenはこの様なことを言ってくれました:
“私達はDockerのアーリーアダプターでした。Dockerを使うことで高速な開発ができ、マイクロサービスアーキテクチャのエンドツーエンドの継続的デリバリを改善し単純化することができました。私達のすべてのサービスがDocker化されているので、デプロイを高速化しサービスを自動化しもっと効率を良くできるプラットフォームを持つことが重要です。新しいサービススケジューラとELBの連携によってAmazon ECSが私達のサービスには非常に優れたプラットフォームとなり、AWSと私達のDockerプラットフォームのパートナーシップが非常に楽しみです。"
Amazon ECSコンソール
新しいAmazon ECSコンソールでクラスタをセットアップしたり動かしたりするプロセスが単純になります。ここでは単純なPHPのアプリケーションをデプロイするサービスを作る手順を紹介します。アプリケーションはリンクしたコンテナから渡されるコンテンツ(メッセージと時刻)を表示します。
まずコンソールを開き、カスタムタスク定義(1つのEC2インスタンス上で一緒に動かしたいコンテナの集合)を作成する方を選びます。
そして、自分用のタスク定義を作ります。視覚的に1コンテナずつ作っていくことができます。
または、既存のJSON定義を貼り付けることもできます(これはドキュメントのDockerベーシックセクションからそのまま来ています)
Create a serviceをクリックし、次のステップではすべてデフォルト値を使います。
これでサービスが定義され、それを動かすためのクラスタを作成できます(この例では3つのt2.microインスタンスを使います)。Select/Create Rolesボタンを使って必要なIAMロールを1クリックでセットアップします。
選択肢をレビューして意図通りであることを確認したら、Amazon ECSは標準クラスタ内にEC2インスタンスを起動します。進捗はコンソールで見ることができます。
数分ですべてが起動するので、これらを見てみることができます。はじめにクラスタのリスト(今は1つのみ)を見てみましょう。
より近くでクラスタを見るためにズームしてみます。
そこからサービスをチェックすることもできます。
必要であれば変更することもできます。
もちろんこれらすべての操作や情報取得は、ECS APIやCommand-Line Interface (CLI)を経由して行うことができます。
CloudTrail 連携
ECS APIの呼び出しがAWS CloudTrailでロギングされるようになりました。
もう一つのリージョン
本日より、Amazon ECSはAsia Pacific(東京)リージョンで利用可能になりました。他にはUS East(Northern Virginia)、US West(Oregon)、Europe(Ireland)リージョンで利用可能です。
今日から使えます
もしコンテナベースの計算機やAmazon ECSが初めてであれば、What is Amazon EC2 Container Serviceを読む所から始めると良いと思います。
-- Jeff; (翻訳: 岩永)