Quantcast
Channel: Amazon Web Services ブログ
Viewing all articles
Browse latest Browse all 906

EC2 Container Service実践

$
0
0

 AWS re:Invent にて、Amazon EC2 Container Service(ECS)をアナウンス・プレビューをご案内してから、多くのお客様から反響をいただきました。プレビューとしては非常に高いサインアップを頂いており、感謝しています。今年も終わりに近づいてますが、お客様のこの高い要望のペースに沿えるように、今までにプレビューの申し込みをいただいたお客様全てにプレビューをお渡しするとともに、今後の新しいプレビューリクエストに関しては現状24時間程度でお届けできるようになりました。

以前のエントリーで書いたように、ECSはDockerベースのアプリケーションのビルド、実行とそしてスケールを助けるためのサービスです。利点としては、より簡単なクラスターマネージメント、ハイパフォーマンス、柔軟なスケジューリング、拡張性、ポータビリティ、そしてAWSの他サービスや機能とのインテグレーションです。勿論他のAWSでの実行環境がセキュアで効率的なのは周知の事実かと思います。

ECSの基礎
詳細に行く前に、まずはECSの用語と基本コンセプトについておさらいしましょう。

  • Cluster - Taskを実行するためのContainer Instanceの論理的なグループの事です
  • Container Instance - ECSエージェントが稼働しているEC2インスタンスで、かつClusterに登録されているものです。Cluster内で動いているインスタンスの集合はTaskを実行するために使われるリソースプールとして作成されます。
  • Task Definition - Task DefinitionはContainerの集合の定義です。この定義にはTask Descriptionが含まれており、1つかそれ以上のContainerを定義します。あるTask Definitionで定義された全てのContainerは同一のContainer Instanceで稼働します。
  • Task - Task Definitionの実態です。
  • Container - Taskの一部として生成されたDockerコンテナーです。

ECS Container AgentはContainerインスタンスの中で動くエージェントです。このエージェントはECSにかわって、Containerを開始する役割を持ちます。エージェント自身もDockerコンテナとして稼働しており(Docker Hubから利用可能です)、インスタンス内で動くDockerデーモンとコミュニケーションします。

クラスターおよびコンテナーサービスの文脈では、"スケジューリング"はインスタンスにタスクをアサインするプロセスとなります。ECSは、以下の3つのスケジューリングオプションを提供します。

  1. オート - RunTaskファンクションはCluster上でTask(Task Definitionで定義)をランダムなプレースメントで開始します。
  2. マニュアル - StartTaskファンクションは特定のContainer Instance(またはインスタンス)でTask(Task Definitionで定義するのは同じ)を開始します。
  3. カスタム - ListContainerInstancesおよびDescribeContainerInstancesを使う事で、Cluster内の利用可能なリソースの情報を収集する事が出来るので、スケジューラの"核"を構築する事が出来るので(言い換えれば、最適なContainer Instanceを選ぶために利用できる情報を使って)、その後StartTaskを実行してインスタンス上でタスクを実行します。これを実施するという事は、事実上、自分独自のRunTaskを実装するのと同じ意味合いになります。

EC2 Container Service実践

ECSを実際に試してみるために、プレビューに登録して、AWS CLIのプレビューバージョンをダウンロード、インストール、設定しておきます。その後、IAM RoleとVPCを作成して、クラスターを作るための準備をします(ECSは現状 US Eastリージョンで利用可能となっており、今後他リージョンも徐々にサポートします)。下記のコマンドを実行してMyClusterという名前のClusterを作成してみましょう。

$ aws ecs create-cluster --cluster-name MyCluster --profile jbarr-cli

コマンドはJSONの記法で、新規に生成したClusterの情報を返します。

{"cluster":{"clusterName":"MyCluster","status":"ACTIVE","clusterArn":"arn:aws:ecs:us-east-1:348414629041:cluster/MyCluster"}}

次にプレビューのプロセスの一環で共有されているはずのECS用AMI(中身はAmazon Linux AMIの軽量バージョンで、ECS向けに最適化されています)を使って、自分のVPCの中で複数のEC2インスタンスをロウンチします。EC2をロウンチするときに、ECS向けに作成したIAM Role(ecsという名前です)を選択しておきます。

 

また、EC2のユーザデータ設定で自分のCluster(MyCluster)内に起動するように、ECSの設定を少しだけ記載します(defaultクラスターの場合、いりません)。

インスタンス起動後、自分のClusterに入ったかどうかをlist-container-instancesコマンドで確認する事が出来ます。登録されたContainer InstanceはそれぞれにARNが割り振られます。

$ aws ecs list-container-instances --cluster MyCluster --profile jbarr-cli
{"containerInstanceArns":["arn:aws:ecs:us-east-1:348414629041:container-instance/4cf62484-da62-49a5-ad32-2015286a6d39","arn:aws:ecs:us-east-1:348414629041:container-instance/be672053-0ff8-4478-b136-7fae9225e493"]}

Cluster内のインスタンスを選択して、登録されて利用可能なCPUとメモリーのリソースに関してクエリーを実行して探し出す事が出来ます。

$ aws ecs describe-container-instances --cluster MyCluster \
  --container-instances arn:aws:ecs:us-east-1:348414629041:container-instance/4cf62484-da62-49a5-ad32-2015286a6d39 \
  --profile jbarr-cli

下記が返却されたデータのサンプルです。

{"registeredResources":[{"integerValue":1024,"longValue":0,"type":"INTEGER","name":"CPU","doubleValue":0.0},{"integerValue":3768,"longValue":0,"type":"INTEGER","name":"MEMORY","doubleValue":0.0}]}

プレビュー版で配布されるECSのデベロッパーガイドに従って、次にシンプルなTask Definitionを作成して登録してみます。

$ aws ecs register-task-definition --family sleep360 \
  --container-definitions file://$HOME/tmp/task.json \
  --profile jbarr-cli

そして、タスクとして10個実行してみます。

aws ecs run-task --cluster MyCluster --task-definition sleep360:1 --count 10 --profile jbarr-cli

実行中のタスクは下記のようにlist-tasksコマンドで見る事ができます。

$ aws ecs list-tasks --cluster MyCluster --profile jbarr-cli

下記のように実行中のコンテナが返ってきます。

{"taskArns":["arn:aws:ecs:us-east-1:348414629041:task/0c949733-862c-4979-b5bd-d4f8b474c58e","arn:aws:ecs:us-east-1:348414629041:task/3ababde9-08dc-4fc9-b005-be5723d1d495","arn:aws:ecs:us-east-1:348414629041:task/602e13d2-681e-4c87-a1d9-74c139f7335e","arn:aws:ecs:us-east-1:348414629041:task/6d072f42-75da-4a84-8b68-4841fdfe600d","arn:aws:ecs:us-east-1:348414629041:task/6da6c947-8071-4111-9d31-b87b8b93cc53","arn:aws:ecs:us-east-1:348414629041:task/6ec9828a-cbfb-4a39-b491-7b7705113ad2","arn:aws:ecs:us-east-1:348414629041:task/87e29ab2-34be-4495-988b-c93ac1f8b77c","arn:aws:ecs:us-east-1:348414629041:task/ad4fc3cc-7e80-4681-b858-68ff46716fe5","arn:aws:ecs:us-east-1:348414629041:task/cdd221ea-837c-4108-9577-2e4f53376c12","arn:aws:ecs:us-east-1:348414629041:task/eab79263-087f-43d3-ae4c-1a89678c7101"]}

ここまでで、タスクを実行してインスタンスをシャットダウンしましたので、まとめます。これら全てを通してみた結果として、下記の3つの点だけちょっとしたTipsを記載しておきます。

  1. VPCが外部コネクティビティがあるか確認しておいてください
  2. ECSが利用可能な適切なAMIを使ってください(プレビュー段階)
  3. IAM Roleが必要ですので、こちらも上記AMIでロウンチ時にセットしてください

ECSクイックスタートテンプレート
更にスピード早くECSを実行できるように、CloudFormationを使った、ECSクイックスタートテンプレートを作成しましたのでご活用ください。このテンプレートはIAM RoleとそのロールのためのInstance Profileを生成します。このロールはECSエージェントがECSとコミュニケーションを取ることを許可するためのものです。テンプレートでは、このロールを使ってインスタンスをロウンチして、結果としてインスタンスにアクセスできるSSHコマンドを生成して返します。既存のクラスターへインスタンスをロウンチして登録する事も出来ますし、"default"という名前のデフォルトクラスターを利用することも出来ます。このテンプレートを使った場合、インスタンスはDefault VPCを使ってロウンチするようになっています。

Contain Yourself
ECS、ぜひ始めていただければと思いますが、その場合はまずはプレビューに登録してみてください。出来るだけすぐに利用可能になるように致します。

ECSについて更に知りたい場合には、re:Inventの下記セッションをみていただければと思います。大体30分程度になります(注意点として、ECS自体が凄い勢いで進化していますので、若干変更されています。例えばTask Definitionはバージョニングはされなくなったなどの変更点があります。)。

更に、来年のAmazon EC2 Container Service Deep Dive (2015年1月14日、US現地時間)というウェビナーをやります。このウェビナーでは、我々の同僚でECS Sr.ManagerのDeepak Singhが何故我々がECSを作ったのか、コアコンセプトは何か、お客様のアプリケーションでECSをどのように使えばよいか、などを発表します。ぜひご参加いただければ幸いです。

また、ここで発表があります。CoreOS はモダンなインフラストラクチャスタックのニーズを満たすように設計された新しいディストリビューションですが、このたび CoreOS AMI がECSをサポートしたことをお知らせ致します!詳細については、こちらのドキュメント(Amazon ECS on CoreOS)をご覧ください。このサポートで、CoreOSを使って、ECSエージェントをインストールしてECS内部をCoreOSディストリビューションを利用する事ができます。

最後に、いつもの通りではありますが、AWSとして我々は常にお客様からフィードバックを頂きたいと考えています。ECSはまだプレビューモードですので、お客様のニーズや要望をお聞きするには最高のタイミングです。フィードバックはECSフォーラムに頂ければと思います。また、ECSに関して何かサポートが必要な場合、お近くのソリューションアーキテクトかAWSサポートへケースとしてあげてください。

P.S. 既に満杯ではありますが、 次回Docker Meetup Tokyo #4にて、Amazon ECSについて発表させていただきます。

 

 


Viewing all articles
Browse latest Browse all 906

Trending Articles