はじめに
※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。
builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、AWS 上で コンテナを簡単に実行、停止、管理できるコンテナオーケストレーションサービス「Amazon Elastic Container Service (以下 ECS)」をご紹介します。
現在、AWS が提供する代表的なコンテナオーケストレーションサービスは、ECS 以外に Amazon Elastic Kubernetes Service (EKS) があります。AWS 上でコンテナを動かす際にどちらのサービスを利用するかはケースバイケースですが、コンテナ管理システム「Kubernetes」を前提とした構成でなければ、ECS を利用することでより運用負荷を軽減する形でコンテナを実行できます。
builders.flash メールメンバー登録
コンテナサービスプラットフォーム
ECS は AWS 上でコンテナを管理するためのサービスと説明しましたが、そもそもコンテナ技術とは何なのでしょうか。初めに、コンテナとは何か、何ができる技術なのかについて見ていきます。
コンテナ
コンテナとは、1 台のマシン上で複数の仮想環境を実行する仮想化技術です。仮想化というとサーバー仮想化を連想しますが、コンテナはサーバー仮想化とは少し異なります。
サーバー仮想化では、一つのサーバー上に複数の仮想サーバーが起動します。個々の仮想サーバーは個別の OS とミドルウェアを搭載し、ホスト OS や他の仮想サーバーから論理的に分離された環境でプロセスを実行します。
一方、コンテナでは、1 台のサーバー上に展開された複数のコンテナがホスト OS のカーネルを共有するため、各コンテナにはプロセスの実行に必要な最低限のデータのみが格納されます。
コンテナを利用する利点の一つは、その可搬性 (ポータビリティ) の高さです。仮想サーバーのようにゲスト OS を起動する必要がないため、パッケージ化されたアプリケーションをどのような環境でも同じように実行でき、環境の移行や復元を簡単に行えます。
なお、このコンテナを実行する代表的なソフトウェアが Docker です。

コンテナイメージ
コンテナイメージは、コンテナの中身を記録したスナップショットのようなものです。コードやランタイムを含む、アプリケーションの実行に必要なソフトウェアをカプセル化し、保持しています。
コンテナランタイムである Docker さえインストールされている環境であれば、即座にコンテナイメージを展開し、コードと依存関係をポイントインタイム (特定時点の状態) で復元できます。この環境の再利用性の高さも、コンテナの大きな魅力の一つです。コンテナレジストリと呼ばれるコンテナイメージ保存用のサービスで、安全に管理、共有することができます。
ECS で利用するコンテナイメージの作成ついて詳しくは「Amazon ECS で使用するコンテナイメージの作成」をご覧ください。
コンテナの実行環境
ECS はコンテナの起動やリソースの管理などを担うコンテナオーケストレーションサービスであり、実際にコンテナのワークロードを実行する環境は別に用意する必要があります。ECS では現在、以下の 3 つの起動タイプをコンテナの実行環境としてサポートしています。
-
AWS Fargate
フルマネージド型のサーバーレスコンピューティングサービスです。コンテナを実行する上で必要なインフラは AWS 側が管理するため、ユーザーはホストサーバーの管理が不要です。
-
Amazon EC2
ユーザー自身がコンテナ上の OS や Docker ランタイムの設定やセキュリティパッチの適用など、ホストサーバーである EC2 の管理を行います。ホストサーバーの構成やインスタンスタイプの選定など、要件に応じてユーザーが柔軟に選択できます。
-
外部
AWS 外のオンプレミスのインフラストラクチャをホストサーバーとして ECS クラスターに登録できます。この ECS の機能である「 Amazon ECS Anywhere 」を利用すれば、既存のオンプレミスの環境で実行されるコンテナアプリケーションを ECS で簡単に管理することができます。
ユーザーは、要件に従い自由に起動タイプを選択できます。
AWS サービスとの統合
ECS を利用する利点として、他の AWS サービスとの連携が容易という点が挙げられます。例えば、下記のような AWS サービスと統合されています。
-
Amazon ECR
コンテナイメージを保存、共有できるコンテナレジストリサービスです。ローカル環境で作成したコンテナイメージを Amazon ECR へプッシュして保存し、ECS を使用してコンテナをデプロイするといった利用が可能です。 AWS Identity and Access Management (IAM) を利用して、特定のユーザーからの利用のみを許可するアクセス制限を設定することもできます。
-
Amazon CloudWatch
ECS のコンテナをモニタリングし、メトリクスデータを取得します。ECS リソースのモニタリングについて詳しくは、「 Amazon ECS のモニタリング 」をご覧ください。
その他 ECS と統合された AWS サービスについて詳しくは、「Amazon ECS と統合された AWS のサービス」をご覧ください。
ECS の主要なコンポーネント
ECS は、主に「クラスター」、「タスク」、「サービス」の 3 つのコンポーネントで構成されています。
AWS マネジメントコンソールからこれら 3 つのコンポーネントを作成することで、簡単にコンテナアプリケーション環境をセットアップできます。
-
クラスターの作成
クラスター名、インスタンスやネットワーキングなどを設定し、 クラスター を作成します。
-
タスクの作成
タスク定義 でコンテナの詳細、リソースの割り当て、環境変数などを設定し、 タスク を作成します。
-
サービスの作成
サービス名を指定し、作成したタスク定義とロードバランサーなど必要なオプションを選択し、 サービス を作成します。
ECS の開始方法について詳しくは、「Amazon ECS の開始方法」をご覧ください。
ECS サービス
ECS サービスは、クラスター内で起動するタスクの状態を管理します。サービススケジューラを使って、長期間稼働しているタスクをモニタリングし、タスクが失敗した場合、新しいタスクを再実行するなどの使い方ができます。
ECS サービスについて詳しくは、「Amazon ECS サービス」をご覧ください。

ECS タスク
ECS タスクは、タスク定義に基づいて起動される複数のコンテナのグループです。タスク定義では、起動タイプ (Fargate / EC2 / 外部) やメモリ/CPU の割り当て、ネットワーク設定など、コンテナの起動内容を定義します。
タスク定義について詳しくは、「Amazon ECSの タスク定義」をご覧ください。

ツール
ECS を操作・管理するために、以下のようなデベロッパーツールが提供されています。
デベロッパーツールについて詳しくは、「Amazon ECS デベロッパーツールの概要」をご覧ください。
コスト
起動タイプ (Fargate / EC2 / 外部) によって、料金体系が異なります。EC2 を利用する場合は、利用したインスタンスタイプに応じた料金が課金されます。Fargate を利用する場合は、コンテナスペックに応じた従量課金です。ECS 自体の追加料金は発生しません。
ECS の利用料金について詳しくは、「Amazon Elastic Container Service の料金」をご覧ください。
タスク配置戦略
タスク配置戦略は、ECS がタスクをクラスター上のどのコンテナホストに配置するかを決定するためのアルゴリズムです。
EC2 起動タイプを使用するタスクでは、ユーザーが任意のタスク配置戦略を選択できます。なお、Fargate 起動タイプでは、タスク配置戦略を指定する必要はありません。
ECS では現在、以下の 5 種類のタスク配置戦略が提供されています。「カスタム」を選択すると、プリセットのテンプレートの代わりに、任意のタスク配置戦略を指定することができます。
コンテナインスタンスごとのワークロードを最適化し、コンテナアプリケーションを安定的に稼働させるために、最適なタスク配置戦略を選択します。
タスク配置テンプレート |
内容 |
AZ バランススプレッド |
アベイラビリティゾーン間およびアベイラビリティゾーン内のコンテナインスタンス間でタスクを分散します。 |
AZ バランスビンパック |
利用可能な最小メモリで、アベイラビリティーゾーン間およびコンテナインスタンス間でタスクを分散します。 |
ビンパック |
CPU またはメモリの最小利用可能量に基づいてタスクを配置します。 |
ホストごとに 1 つのタスク |
各コンテナインスタンスのサービスから最大 1 タスクを配置します。 |
カスタム |
独自のタスク配置戦略を定義します。 |
タスク配置戦略について詳しくは、「Amazon ECS タスク配置戦略」をご覧ください。

ALB と動的ポートマッピング
ECSは、AWSが提供するロードバランシングサービス「Elastic Load Balancing (ELB)」と完全に統合されており、ELB が受信したトラフィックをタスク間で分散させることができます。
コンテナのネットワークモードが「bridge」モードの場合、ELB の Applicaton Load Balancer (ALB) または Network Load Balancer (NLB) を ECS に連携すると、動的ポートマッピングが有効になります。「bridge」ネットワークモードでは、コンテナインスタンス内の複数のタスクに別々のポートが付与されますが、動的ポートマッピングにより、ALB (または NLB) のターゲットグループへのトラフィックはデフォルトポート番号に自動変換されて複数のターゲットに分散されるようになります。
なお、ECS のネットワークモードとはコンテナの通信方式を指し、「bridge」のほかに「host」と「awsvpc」を選択できます。「awsvpc」の場合、同じコンテナ内の各タスクに個別のプライベート IP アドレスが付与され、ポートではなく IP アドレスベースで複数のタスクを扱えるため、動的ポートマッピングは不要です。ネットワークモードについて詳しくは、「ネットワークモードの選択」をご覧ください。
その他 ELB と ECS の連携について詳しくは、「サービスの負荷分散」をご覧ください。

EC2 スポットフリートによるコスト最適化
起動タイプとして EC2 を利用した場合、コスト最適化のアプローチとして EC2 スポットフリートを利用する方法があります。
EC2 のスポットインスタンスは、オンデマンドインスタンスと比べて最大 90% の割引料金で利用できますが、指定したキャパシティプールの空きが不足すると、利用者への通知後 2 分間の猶予期間をもってインスタンスがシャットダウンします。そのため、ステートレスなど中断に強いコンテナアプリケーションであれば、スポットインスタンスを利用することでコストを最適化できます。
ただし、EC2 スポットフリートに ECS クラスターを構築した場合、スポットインスタンスのシャットダウン前 2 分間に ECS 接続ドレインを呼び出し、自動的にコンテナをフリート内の別のインスタンスに移動させることができます。
スポットフリートを利用することで、自動でオンデマンドインスタンス、リザーブドインスタンス、スポットインスタンスを使い分けることができ、低コストでスケーラブルなシステムを実現できます。
EC2 スポットフリートを使った構成について詳しくは、Amazon Web Services ブログ「Docker、Amazon ECS、スポットフリート: 素晴らしい組み合わせ」をご覧ください。

まとめ
最後に、本記事で紹介した機能の全体図を見てみましょう。
今回紹介した以外にも、ECS とさまざまな AWS サービスを組み合わせることで、さらに快適なコンテナアプリケーションの環境を構築できます。たとえば、AWS CodeBuild や AWS CodePipeline と連携し、AWS CodeCommit リポジトリが変更されたタイミングで ECS を使ったコンテナアプリケーションの自動デプロイを実現する CI/CD 環境を構築することが可能です。
本記事を読んで ECS に興味を持たれた方、実際に使ってみたいと思われた方は、ぜひ製品ページの「Amazon Elastic Container Service (Amazon ECS)」も合わせてご覧ください。
全体図
著者・監修者プロフィール

著者プロフィール
米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター
日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

監修者プロフィール
落水 恭介
アマゾン ウェブ サービス ジャパン合同会社
コンピュート事業本部 ソリューションアーキテクト
ベンチャーで Web サービスの開発に従事し、2018 年に Amazon Web Services Japan に入社。現在はソリューションアーキテクトとして活動中。主に Amazon ECS や Amazon EKS を中心とした、コンテナ関連の課題解決を支援している。
Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages