AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説

2023-02-02
AWS グラレコ解説

Author : 米倉 裕基 (監修 : 落水 恭介)

※ 本連載では、様々な 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 を利用することでより運用負荷を軽減する形でコンテナを実行できます。


ECS の主な機能や特徴を、以下の項目に分けてご説明します。

それでは、項目ごとに詳しく見ていきましょう。


コンテナサービスプラットフォーム

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) を利用して、特定のユーザーからの利用のみを許可するアクセス制限を設定することもできます。

その他 ECS と統合された AWS サービスについて詳しくは、「Amazon ECS と統合された AWS のサービス」をご覧ください。


ECS の主要なコンポーネント

ECS は、主に「クラスター」、「タスク」、「サービス」の 3 つのコンポーネントで構成されています。

コンポーネント 説明
クラスター コンテナを配置する複数の Fargate、EC2 インスタンス、または外部インスタンス群で構成される概念です。クラスター内には複数のタスクが配置され、それぞれが独自のコンテナを実行します。
タスク クラスター上で実行されるコンテナ群で構成される概念です。タスクは特定のクラスター上で実行され、複数のコンテナを含むことができます。タスクの内容は、タスク定義と呼ばれる JSON 形式の設定ファイルで定義します。
サービス 特定のクラスター上で複数のタスクを管理し、スケーリングと冗長性を提供します。

AWS マネジメントコンソールからこれら 3 つのコンポーネントを作成することで、簡単にコンテナアプリケーション環境をセットアップできます。

  1. クラスターの作成
    クラスター名、インスタンスやネットワーキングなどを設定し、クラスターを作成します。

  2. タスクの作成
    タスク定義でコンテナの詳細、リソースの割り当て、環境変数などを設定し、タスクを作成します。

  3. サービスの作成
    サービス名を指定し、作成したタスク定義とロードバランサーなど必要なオプションを選択し、サービスを作成します。

ECS の開始方法について詳しくは、「Amazon ECS の開始方法」をご覧ください。

ECS サービス

ECS サービスは、クラスター内で起動するタスクの状態を管理します。サービススケジューラを使って、長期間稼働しているタスクをモニタリングし、タスクが失敗した場合、新しいタスクを再実行するなどの使い方ができます。

ECS サービスについて詳しくは、「Amazon ECS サービス」をご覧ください。

ECS タスク

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

タスク定義について詳しくは、「Amazon ECSの タスク定義」をご覧ください。

ツール

ECS を操作・管理するために、以下のようなデベロッパーツールが提供されています。

ツール 操作内容
AWS CloudFormation テンプレートファイルを使って、ECS クラスターやタスクなどのリソースを自動で作成・管理できます。
AWS マネジメントコンソール ブラウザから、ECS クラスターやタスク、サービスの作成、監視、管理などコンテナ操作全般を行います。
AWS CLI コマンドラインから、ECS リソースの管理やタスクを実行します。
AWS SDK Java、Python、Ruby、C#、JavaScript などのプログラム言語から、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 CodeBuildAWS CodePipeline と連携し、AWS CodeCommit リポジトリが変更されたタイミングで ECS を使ったコンテナアプリケーションの自動デプロイを実現する CI/CD 環境を構築することが可能です。

本記事を読んで ECS に興味を持たれた方、実際に使ってみたいと思われた方は、ぜひ製品ページの「Amazon Elastic Container Service (Amazon ECS)」も合わせてご覧ください。

AWS グラレコ解説のその他の記事はこちら

選択
  • 選択
  • 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
  • サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
  • 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
  • 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
  • AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
  • コンテナを使ってモノリスを分割する方法をグラレコで解説 »
  • クラウドへ移行する理由とそのステップをグラレコで解説 »
  • Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
  • サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
  • サーバーレスで SaaS を構築する方法をグラレコで解説 »
  • 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
  • クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
  • 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
  • アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
  • わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
  • 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
  • Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
  • 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
  • ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
  • 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
  • カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
  • GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
  • IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
  • 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
  • サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
  • データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
  • 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
  • リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
  • アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
  • データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
  • アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
  • AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
  • 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
  • キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
  • 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
  • ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
  • AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
  • リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
  • ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
  • オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
  • 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター

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

監修者プロフィール

落水 恭介
アマゾン ウェブ サービス ジャパン合同会社
コンピュート事業本部 ソリューションアーキテクト

ベンチャーで Web サービスの開発に従事し、2018 年に Amazon Web Services Japan に入社。現在はソリューションアーキテクトとして活動中。主に Amazon ECS や Amazon EKS を中心とした、コンテナ関連の課題解決を支援している。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する