Amazon Web Services ブログ

Tag: Amazon ECS

Amazon ECSイベントストリームで、クラスタの状態を監視

今までは、実行中のAmazon ECSクラスタの状態の更新を取得するためには、AWS CLIやSDKを使ってコンテナインスタンスとタスクの状態を定期的にポーリングする必要がありました。新しいAmazon ECSイベントストリーム機能によって、これからはAmazon ECSのタスクとコンテナインスタンスの状態更新を準リアルタイムにイベント駆動で受け取ることが可能になりました。イベントはAmazon CloudWatch Eventsを通して配送され、AWS Lambda関数やAmazon SNSトピックといった、あらゆるCloudWatch Eventsのターゲットに向けることができます。 この記事では、簡単なサーバレスアーキテクチャを作って、イベントストリームの更新を受け取り、処理し、そして保存する方法をお見せします。まず最初にLambda関数を作成し、入ってきた全てのイベントをスキャンして実行中のタスクに関連したエラーが無いかを探し、もしあれば即座にSNSの通知を送ります。その後、関数は全てのメッセージをAmazon Elasticsearch Serviceを使ったElasticsearchのクラスタにドキュメントとして保存することで、皆さんや開発チームの方がKibanaのインタフェースを通じてクラスタの状態を監視したり、ユーザから報告された問題に返答するための診断情報を検索することができます。

Read More

強力なAWSプラットフォームの特徴、コンテナ向けに

コンテナは素晴らしいのですが、それを管理することは非常に難しい問題です。私達のお客様は、マイクロサービスからバッチジョブにいたるまで、多くのワークロードでコンテナをAWS上で使ってきました。彼らが私達に教えてくれたのは、EC2インスタンスやコンテナの状態を含むクラスタ管理はトリッキーで、特に環境が大きくなってくると問題になってくるということでした。また、AWSプラットフォームで利用可能な、ロードバランサー、スケーリング、セキュリティ、モニタリング等の機能とコンテナとの連携は重要な要件であるとも教えてくれました。Amazon ECSはこれら全ての要求とそれ以上に応えるために設計されました。 我々はお客様がコンテナ化したアプリケーションを本番環境で稼働させることを簡単にするためにAmazon ECSを作りました。コンテナ管理のためのソフトウェアをインストールしたり運用したりする必要は全くなく、これらは全てサービスとして提供されます。必要となるEC2のキャパシティをクラスタに追加して、使いたいコンテナイメージをアップロードするだけで良いです。Amazon ECSが残りの面倒をみてくれて、EC2インスタンスのクラスタ上にコンテナをデプロイしてそのヘルス状態を監視してくれます。ExpediaやRemind等のお客様は、Amazon ECSを開発ワークフローに組み込み、その上にPaaSプラットフォームを構築しています。他には、PreziやShippableはECSを使ってコンテナを実行するための運用の複雑さを削減し、より多くの時間をアプリケーションの機能を提供することに使えるようにしています。 AWSは高い信頼性とスケーラビリティを持ったフルマネージドのサービスとして、ロードバランサー、Auto Scaling、IAM、ロギング、そしてモニタリングを提供してます。この1年間、EC2インスタンスで利用できるものと同じものを利用できるように、ECSを通じたこれらAWSプラットフォームの機能とのネイティブな連携を続けてきました。 Amazon ECSはここ最近で、アプリケーションロードバランサーの対応(本日)、IAMロールの対応(7月)、そしてAuto Scalingの対応(5月)に提供しました。これからも、より多くのAWSプラットフォームをコンテナに持ってくることを楽しみにしています。 それでは、新しい特徴を見てみましょう! アプリケーションロードバランサー 負荷分散とサービスディスカバリは、どのマイクロサービスアーキテクチャでも必要不可欠なものです。Amazon ECSはElastic Load Balancingを使っているので、負荷分散のレイヤーで管理やスケールをする必要はありません。またELBをサポートする他のAWSサービスも直接扱うことができます。例えば、AWS Certificate Manager (ACM)でサービスの証明書を自動的に管理したり、Amazon API Gatewayで呼び出しの認証を行ったりできます。 本日、ECSは新しいアプリケーションロードバランサーをサポートすることを発表できることをとても嬉しく思います。高いパフォーマンスを持ったアプリケーションレイヤで行われる負荷分散の選択肢で、コンテントベースのルーティングルールを定義することができます。アプリケーションロードバランサーは、マイクロサービスの実行を簡潔にしてくれる2つの機能を含んでいます: 動的ポートと、複数サービスで1つのロードバランサーを共有できる機能です。 動的ポートによって、ポートの衝突を心配する必要がなくなるので、クラスタ上でのタスクの開始がとても簡単になります。以前は、Elastic Load Balancerをアプリケーションのトラフィックのルーティングに使っていると、ECSタスクではホスト側のポートを固定で定義する必要がありました。これは、各アプリケーションが使っているポートを管理しなければならないという運用の複雑さを招き、また1つのタスクしか1つのインスタンスに配置できないのでクラスタの効率も下げていました。これからは、ECSのタスク定義では動的ポートを指定することができ、EC2インスタンスがスケジュールされた時に未使用のポートが割り当てられます。ECSスケジューラは自動的にそのタスクをアプリケーションロードバランサーのターゲットグループに登録する時にこのポートを使います。使いはじめるには、アプリケーションロードバランサーをEC2コンソールやAWS Command Line Interface (CLI)で作成できます。そしてECSコンソールでタスク定義を作る時にコンテナのホストポートを0としておきます。このコンテナはスケジュールされた時に自動的にエフェメラルポートのレンジからポートを受け取ります。 以前は、ECSサービスとロードバランサーの間には1対1のマッピングしかありませんでした。これからは、パスベースのルーティングを使うことで、複数のサービスでロードバランサーを共有できます。各サービスがそれぞれのURIを定義することで、サービスにトラフィックを向けることができます。加えて、基本的なサービスディスカバリをサポートするために、そのサービスのDNS名を環境変数に指定することができます。例えば、株価のサービスを http://example.com/stock で、天気のサービスを http://example.com/weather で、同一のロードバランサーから提供することができれば、ニュースポータルは株価と天気のサービスのどちらにもロードバランサー経由でアクセスすることができます。 ECSタスクのIAMロール Amazon ECSでは、EC2コンテナインスタンスのIAMロールを使って、コンテナからのAPIリクエストを簡略化することはいつでもできます。これによって、AWSのベストプラクティスである、AWSの認証情報をコードや設定ファイル内に保存しない、が実現できますし、同時に自動的なキーローテーションといった利点も得ることができます。 最近発表したECSタスクのIAMロールを使うことで、EC2コンテナインスタンスではなくECSタスクに直接IAMロールを紐付けられ、基盤をよりセキュアにすることができます。このやり方であれば、例えばS3にアクセスするためのIAMロールを指定されたタスクと、DynamoDBテーブルにアクセスするためのIAMロールを使っている別のタスクを、同一のEC2インスタンス上で実行することができます。 サービスAuto Scaling 3つ目の強調したい特徴が、サービスのAuto Scalingです。サービスAuto ScalingとAmazon CloudWatchアラームを使うことで、EC2インスタンスを増やしたり減らしたりするのと同じやり方で、ECSサービスをスケールさせるポリシーを定義することができます。サービスAuto Scalingによって、負荷が上がった時にはスケールアウトすることで高い可用性を維持したり、負荷が下がったサービスとクラスタをスケールインすることでコストを最適化することができ、これらは全て自動的かつリアルタイムで起こります。 タスクの希望数、最小数、そして最大数を選び、1つ以上のスケーリングポリシーを作成するだけで、あとはサービスAuto Scalingが処理してくれます。サービススケジューラはアベイラビリティゾーンを意識してくれるので、ECSタスクが複数のゾーンに渡って分散しているかを気にする必要もありません。 今日から利用可能です これらの特徴は既に利用可能なので、今日から使いはじめることができます! — Jeff; 原文: Powerful AWS […]

Read More

ECSタスクのためのIAMロールによってコンテナ利用アプリケーションをより安全にする

Amazon ECSでは、コンテナから簡単にAPIリクエストを行うために、Amazon EC2のIAMロールをいつでも使うことができます。これによって、AWSの認証情報をコードや設定ファイルに保存しないというAWSのベストプラクティスに従うことができる上に。鍵の自動ローテーションといった利点も得られます。 例えば、ECSとAmazon S3を使った秘匿情報管理システムを作ったり、Amazon DynamoDBを使って状態管理したり、S3を使ってコンテナによって生成された成果物を保存したり、ということがロールによって可能であり、全てにおいてAWSの認証情報をコードの中に全く持つ必要がありません。 今までは、Amazon EC2のIAMロールを使う必要がありました。つまり、ECSクラスタのEC2インスタンスに紐付いたIAMポリシーは同一クラスタ内で実行されるタスクが必要な全てのIAMポリシーを含んでいる必要がありました。これは、もし1つのコンテナが特定のS3バケットへのアクセスが必要で、他のコンテナがDynamoDBテーブルへのアクセスが必要であった時、同一のEC2インスタンスに両方のIAM権限を与える必要があることを意味しています。 新しく公開されたECSタスクのためのIAMロールの導入によって、EC2コンテナインスタンスではなくECSタスクに直接IAMロールを紐付けることで、基盤をより安全に保つことができます。この手法によって、1つのタスクはS3にアクセスする特定のIAMロールを使いながら他のタスクはDynamoDBテーブルへにアクセスするIAMロールを使うことができます。 この機能によって、ECSクラスタインスタンスのIAMポリシーも最小限にすることが可能です。なぜなら、ECSサービスとやり取りするために必要な2,3のIAM権限を与えるだけで良いからです。 この記事で、タスクIAMロールのセットアップを眺めてみましょう。 必要条件 もしまだであればECSクラスタを作成し、最低でも1つのEC2インスタンスをクラスタ内に起動します。EC2インスタンスを起動するとき、Container instance IAM roleとして、AmazonEC2ContainerServiceforEC2RoleポリシーがアタッチされたIAMロールを選択します。 もし既存のクラスタがあれば、ECS最適AMIの2016.03.eを使い、この機能を使うために2016年7月13日リリースかそれより新しいSDKを使います。 デモンストレーション このデモでは、Amazon S3バケットを作成し’Hello World’ファイルをアップロードするだけの簡単なNode.jsアプリケーションを使います。アプリケーションのソースコードはaws-nodejs-sampleのGitHubレポジトリにあります。 Dockerイメージをビルドしプッシュする ターミナルアプリケーションで、以下のコマンドを実行します: $ git clone https://github.com/awslabs/aws-nodejs-sample すると現在のディレクトリの下にaws-nodejs-sampleという名前のディレクトリが作られ、サンプルアプリのコードが配置されます。そのディレクトリでDockerfileというファイルを作成し、以下のテキストを貼り付け保存します。 FROM node:argon # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY […]

Read More

Amazon ECSでAuto Scaling

Amazon EC2 Container Service (Amazon ECS)のClusterを自動的にスケールさせる方法はありましたが、本日Auto ScalingとAmazon CloudWatchのAlarmに追加された新機能により、ECSのServiceにScaling Policyを利用することができます。ServiceのAuto Scalingにより、需要が高まった時にスケールアウトさせて高い可用性を実現したり、需要が下がったらServiceとClusterをスケールインさせることでコストを最適化するのを、全て自動でリアルタイムに行うことができます。 この記事では、Clusterを需要に合わせて自動的にリサイズさせつつ、この新しい機能がどうやって利用できるかをお見せします。 Service Auto Scalingの概要 すぐに利用できるECS Serviceのスケーリング機能はずっと一番要望を受けていて、ついに今日この機能をアナウンスでき嬉しいです。自動でスケールするServiceの作成手順はとても簡単で、ECSコンソールやCLI、SDKでもサポートされています。希望するTaskの数とその最小・最大数を選択し、1つ以上のScaling Policyを作成すると、後はService Auto Scalingが面倒を見てくれます。Service SchedulerはAvailability Zoneを意識してくれるので、ECSのTaskを複数のZoneに渡って分散するように心配する必要もありません。 それに加えて、ECS Taskを複数AZ Cluster上で実行することも非常に簡単です。ECS ClusterのAuto Scaling Groupが、複数Zoneに渡る可用性を管理してくれるので、必要とされる回復力や信頼性を持つことができ、ECSがTaskのZone間の分散を管理してくれるので、皆さんはビジネスロジックに集中することができます。 利点: 来ているアプリケーションの負荷にキャパシティを対応させる: ECS ServiceとECS ClusterのAuto Scaling Groupを両方にScaling Policyを使います。必要に応じて、Cluster InstanceとService Taskをスケールアウトさせ、需要が落ち着いたら安全にスケールインさせることで、キャパシティの推測ゲームから抜け出せます。これによって、ロングランな環境で低コストな高可用性を実現できます。 複数AZのClusterでECSの基盤に高い可用性を持たせる: Zone障害という可能性から守ることができます。Availability Zoneを考慮しているECS SchedulerはCluster上のTaskを管理し、スケールし、分散してくれるので、アーキテクチャは高い可用性を持ちます。 Service Auto Scalingのデモ この記事では、これらの機能を使い真にスケーラブルで高い可用性を持ったMicroservicesアーキテクチャを作成する手順を辿りたいと思います。このゴールに到達するために、以下の様な手順をお見せします: Auto Scaling Groupで2つ以上のZoneにECS Clusterを作成する。 そのCluster上にECS Serviceを設定し、希望するTaskの数を定義する。 ECS Serviceの前段にElastic Load Balancingのロードバランサを設定する。これが負荷の入り口になります。 […]

Read More