数多く台頭しているDockerの運用管理に関する製品/サービスの特長、使い方を徹底解説する特集。今回は、AWSが提供するECSの概要や主な機能、環境構築方法、オーケストレーション設定やスケーリングを行う手順など使い方などについて。
数多く台頭しているDockerの運用管理に関する製品/サービスの特長、使い方を徹底解説する本特集「Docker運用管理製品/サービス大全」。今回は、AWSが提供するAmazon EC2 Container Service(以下、ECS)の概要と使い方を解説します。
なお本稿の内容は、ECSが2015年5月当時のものです。環境構築手順の紹介で扱うDocker自体のバージョンは1.6を使っています。
AWSが提供するDockerオーケストレーションツールのSaaSです。Dockerコンテナーの情報はECS上に永続化されています。
ECSの構成は下記のようになります(参考)。
ECS Agent(Dockerコンテナー)が動作しているEC2インスタンスです。このEC2インスタンス上でTaskが動作します。
Container instance上で動作するTask Definitionのアプリケーション定義をプロセス化したものです。
単一または複数のコンテナー定義が含まれているアプリケーション定義です。ECSでは上記のアプリケーションをTaskという単位で管理します。
1つのServiceは1つのTask Definitionにひも付けられます。Task Definitionから作成されたTaskの同時実行数を管理します。
個々のServiceのグルーピングです。
特定のAWSリージョンのServicesとContainer instance(EC2インスタンス)の論理的なグルーピングです。
各Clusterにひも付けられ、Taskを実際のContainer instance(EC2インスタンス)に割り当てます。
ECSは下記の機能を持っています。
ECSは単一または複数のコンテナーを「Task」という形で管理します。Container instanceのリソースに余裕がある場合は同一Taskを複数動作させることが可能です。
またECSは、下図のようにTask Definitionの中でDockerfileのバージョン管理ができます。
そして、このRivisionごとにServiceにTaskとして登録することができます。
ClusterはSchedulerによるTaskの自動配備/自動復旧機能を持ちます。ECSのSchedulerはServiceに定義に従い設定された数のTaskをContainer instanceに自動配備しようとします。また、Taskが異常な状態(ELBのヘルスチェックが失敗した)になった場合は自動で削除し、再作成します。
またClusterは、Serviceのアップデートによるコンテナーの自動アップデートもできます。ECSのServiceのTask定義をアップデートするとリソースに余裕のあるときは徐々にTaskをアップデートしていきます(「ECSで使用しているDockerイメージが更新された場合の対応手順」の章で検証しています)。
ECSは、Elastic Load Balancing(以下、ELB)と連携することで、Taskのロードバランシングが可能です。
「Auto Scaling」がContainer instanceの管理を行っているため、ECSはAmazon CloudWatch(以下、CloudWatch)のアラートでContainer instanceの増減が可能です(「ECSでスケーリングを行う手順」の章で詳細を解説しています)。
ECSのクラスター構成を行う場合は、自動でAmazon Virtual Private Cloud(以下、VPC)を作り、ネットワークACL(アクセスコントロールリスト)やセキュリティグループで管理を行うため、AWSのセキュリティ管理がそのまま適用できます(「ECSのオーケストレーション設定」の章で自動生成されるコンポーネントを解説しています)。
ECSへのAPI実行はAWS CloudTrailにログが残ります。APIの証跡は下記のように取得可能です。
また、ECSのコンテナー情報はCloudWatchには対応していません(ただし、カスタムメトリクスでコンテナーのログやContainer instanceを監視することは可能です)。
ECSの各コンポーネントの上限数を解説します(参考)。
リソース | 上限 | 備考 |
---|---|---|
アカウントのリージョンごとのCluster数 | 1000 | |
ClusterごとのContainer instance数 | 1000 | |
ServiceごとのLoad balancer数 | 1 | |
ServiceごとのTask数 | 1000 | |
run-taskコマンドごとのTaskの実行数 | 10 | run-task:Schedulerを使用したTaskを実行 |
start-taskコマンドごとのContainer instance数 | 10 | start-task:Schedulerを使用せずにTaskを実行 |
run-taskコマンドのごと秒に割り当てるContainer instance数 | 5 | クラスターごとに5 |
Container instanceの登録レート | 1 | 毎秒1 |
ServiceごとのTask数 | 1000 | |
Task Definitionのサイズ | 32kb | |
Task Definitionの最大コンテナー数 | 10 | |
Task Definitionの登録レート | 1 | 毎秒1 |
Copyright © ITmedia, Inc. All Rights Reserved.