皆さんはソフトウェア開発における「コンテナ」という言葉をご存知でしょうか。コンテナ化は、アプリケーション開発を効率化するための手段として注目を集めています。しかし、便利な一方で管理の煩雑さなどの課題を抱えています。「Amazon ECS」は、AWS上でのコンテナ管理に役立つサービスです。Amazon ECSを活用することで、コンテナ管理の効率化を簡単に実現でき、開発者は最も重要な開発業務に専念できるでしょう。今回の記事では、Amazon ECSの基本的なサービス概要や料金体系、Amazon ECSを利用するメリットなどをコンテナの特性を交えながら、初心者向けに解説していきます。
目次
Amazon ECSとは
まず、Amazon ECSのサービス概要から確認していきましょう。
Amazon ECSとは、「Amazon Elastic Container Service」の略称で、AWS上でDockerコンテナの実行・停止などの管理を行えるコンテナオーケストレーションサービスです。(コンテナオーケストレーションサービスについては、次章で詳しく説明しています)
簡単にいうと、アプリケーション運用に必要なリソースが詰め込まれた、箱(コンテナ)を管理するサービスです。従来は、大きな部屋(サーバー仮想化)を使ってアプリケーションを開発・運用していたのですが、コンテナという箱で代用することにより、効率的にスペースを活用し、処理速度なども早めながら、複数の環境を同時に動かせるようになりました。
しかし、複数のコンテナを運用・管理するのは容易ではありません。そこでAmazon ECSを使うことで、コンテナの管理について頭を悩ませることなく、アプリケーションの開発や運用を効率化できます。
そもそもコンテナとは
続いて、コンテナの具体的な仕組みや性質について解説していきます。コンテナを動かすためには、コンテナエンジンが必要です。そのコンテナエンジン(プラットフォーム)の種類は複数あり、現在の事実上の標準(デファクトスタンダード)として世界中の開発者に利用されているものが「Dockerコンテナ」です。今回は、このDockerコンテナ利用をベースとしながら解説します。
コンテナとは
コンテナは、サーバー仮想化技術の一つで、アプリケーションおよびその実行環境をひとまとめにした箱のようなものです。ここでいうサーバーの仮想化とは、物理的なマシンの中に仮想的なコンピュータを作り、一台のマシン上で複数のOSを動かせる技術のことです。テスト環境の構築や異なるアプリケーションの同時運用など、サーバー環境を効率的に使用したいときに重宝します。
従来のサーバー仮想化は、「ハイパーバイザー」と呼ばれる仮想化ソフトウェアを用いたやり方が一般的でした。しかし、このやり方では、それぞれの仮想マシンにOS全体をインストールする必要があり、結果として設定が複雑化して多くの容量が必要になる、といった問題が発生していました。
この問題の解決策として登場したのが、コンテナです。コンテナでは、ハイパーバイザーの代わりに「コンテナエンジン」を使って、OSのリソースを直接利用します。コンテナ内には、アプリケーションとその実行に必要なライブラリや設定ファイルのみが含まれており、OS自体は含まれていません。これにより、コンテナの容量は非常に軽量化し、起動も速くなったことで、より少ないリソースで多くのコンテナを稼働できるようになりました。
コンテナの抱える課題
コンテナ利用時の原則として「1コンテナ1プロセス」というものがあります。これに従ってアプリケーションの開発・運用環境を構築すると、数多くのコンテナが必要となり、コンテナの管理が煩雑になりがちです。管理が大変になると、ヒューマンエラーも起こりやすくなるため、コンテナ使用時の課題となっています。
また、対障害性もコンテナの抱える課題の一つです。ホストOSに何かしらの障害が発生してシステム起動に問題が起きると、連動してコンテナも影響を受けます。コンテナが影響を受けると、サービス停止やパフォーマンス低下などビジネス上のリスクとなり、企業にとっては大きな損失につながってしまいます。このような事態を防ぐためにも複数のサーバーにコンテナを分散させる必要がありますが、コンテナ管理が煩雑になるという悪循環に陥ってしまいます。
コンテナオーケストレーションサービスとは
このコンテナ問題の解決に役立つのが、「コンテナオーケストレーションサービス」です。コンテナオーケストレーションサービスは、コンテナの管理を自動化するサービスで、ロードバランサー(トラフィックの分散装置)としての機能を果たしています。これにより、一つひとつのコンテナが、どのサーバーにあるかを意識して管理する必要がなくなり、運用コストを大幅に削減できます。本記事で解説しているAmazon ECSも、コンテナオーケストレーションサービスの一つです。
また、類似サービスとして、AWS上でKubernetesを利用するためのサービス「Amazon EKS(Elastic Kubernetes Service)」についても触れておきましょう。Kubernetesとは、コンテナ化したアプリケーションを大規模に管理するためのオープンソースのコンテナオーケストレーションシステムです。規模が大きく複雑なアプリケーションのデプロイなどに適しており、多くの企業がアプリケーション開発に利用しています。Amazon EKSは、AWS上でKubernetesを使ってシステムを構築するにあたって、コンテナ管理を効率化してくれるサービスです。本記事で紹介しているAmazon ECSのKubernetes版であると覚えておきましょう。
Amazon ECSの構成要素と起動タイプ
続いて、Amazon ECSの4つの構成要素と3つの起動タイプを解説します。
Amazon ECSを構成する4つの要素
タスク
タスクは一つ以上のコンテナで構成され、特定のタスク定義に従って動作する要素のことです。
タスク定義
タスク定義はタスクを作成するための設計図のようなもので、テンプレート定義として設定して、使用コンテナやそのコンテナをどう動かすかの細かく設定できます。
サービス
サービスとは実行中のタスクの稼働数を維持して、障害時には自動でタスクを再起動します。そのほかロードバランサーの指定やタスクを実行するネットワーク設定などの役割も担っています。
クラスター
クラスターはタスクやサービスが実行される基盤です。複数のクラスターを設定することで、本番環境とテスト環境などの異なる環境を分離できます。
Amazon ECSの3種類の起動タイプ
Amazon ECSは、コンテナを動かすための環境として、3つの起動タイプを用意しています。それぞれの概要は下記の通りです。
AWS Fargate
AWS Fargateは、サーバーレス環境でコンテナを動かす起動タイプです。フルマネージドサービスのため、アップデートなどは自動で行ってくれ、サーバーの管理を気にせず、コンテナの設定に集中できます。
Amazon EC2
Amazon EC2は、EC2インスタンス上でコンテナが実行される起動タイプです。このタイプは、OSやミドルウェアなどのサーバー管理を行う必要がありますが、設定や運用の自由度が高く、必要に応じて直接サーバーにアクセスできる利点があります。
なお、Amazon EC2については以下の記事で詳しく解説しております。併せてご覧ください。
おさえておきたい基本サービス Amazon EC2とは?|AWS活用法
Amazon ECS Anywhere
Amazon ECS Anywhereは、上記2つと異なり、AWSのクラウド以外のオンプレミス環境でもコンテナを実行できる起動タイプです。これにより、自社のデータセンター内のリソースを利用してコンテナを管理できます。
Amazon ECSを利用するメリット
ここからは、Amazon ECSを導入するメリットを3つ紹介します。
コンテナの管理業務を効率化できる
コンテナ管理は、コンテナの数が多くなるほど管理も大変になっていきます。しかし、Amazon ECSを使えば、複数のサーバー上のコンテナを簡単に管理が可能となります。タスクのスケジューリングと管理を自動化できたり、自動的にスケールアップおよびスケールダウンできたり、多数の機能を備えているからです。これによって開発者は、煩雑な管理業務に時間を割くことなく、開発業務により専念できるようになるでしょう。
処理速度が高速
先述の通り、コンテナはハイパーバイザーによるサーバー仮想化に比べて、少ないリソースや容量で稼働できます。その結果、処理も高速になり、起動にも時間がかからず、アプリケーションのパフォーマンスの向上が期待できます。
環境移行を簡単に行える
Amazon ECSではコンテナをパッケージ化して管理するので、必要に応じて異なるサーバーへの移行が簡単に行えます。コンテナごと移行できるため、リソース不足時の別サーバーへ移行も迅速に対応可能です。
Amazon ECSの料金体系
最後に、Amazon ECSの料金体系について紹介します。Amazon ECSの利用料金は、起動タイプによって異なります。起動タイプとは、コンテナを実行するための基盤となる環境の種類です。そもそもAmazon ECS自体は、追加料金なく利用できるため、料金が発生する場合はどの起動タイプを利用するかによって料金も異なります。起動タイプごとの料金内容は、以下の通りです。
AWS Fargate
Fargateは、サーバー管理をAWSに完全に任せられるマネージドサービスです。コンテナが使うCPUやメモリといったリソースの量に応じて料金が発生します。次に解説するAmazon EC2に比べて、手軽に利用しやすくサーバーのセットアップや管理の手間も省けます。
Amazon EC2
EC2インスタンスの使用料やEBSボリュームの使用料、データ転送料金などが発生します。Amazon EC2は、自分で立ち上げたEC2インスタンス上でコンテナを実行します。AWS Fargateに比べて手軽さは劣りますが、高度なカスタマイズが可能です。
Amazon ECS Anywhere
オンプレミス環境などで実行されたタスク分にのみ料金が発生します。Amazon ECS Anywhereは、AWS FargateやAmazon EC2と違い、オンプレミスなどの自社既存サーバーを利用してコンテナを実行できるため、オンプレミスとクラウドのハイブリッド環境での運用に適しています。
まとめ
Amazon ECSは、AWS上でコンテナを効率的に管理するためのサービスです。コンテナの中に開発・運用環境を構築することで、処理速度も早くなり、移行もコンテナごと簡単に行えるなど、さまざまなメリットを得られます。コンテナを使った開発環境の構築は管理が煩雑化するなどの課題がありますが、Amazon ECSを使えば、たくさんのコンテナを効率的に管理でき、開発者は最も重要な開発業務に集中できるでしょう。この機会に、コンテナ化を取り入れてみてはいかがでしょうか。
また、AWS上でのコンテナ運用を検討されている方、Amazon ECS導入時のお悩みをお持ちの方は、当社までお気軽にご相談 ください。AWS導入経験豊富な弊社のスペシャリストが貴社の状況やご希望に合わせたAWSサポートを提供いたします。
関連サービス
おすすめ記事
-
2020.06.23
Amazon Connectで在宅勤務でも対応できる問合せ窓口を立ち上げてみた
-
2020.08.17
Datadogで実現するモニタリングとオペレーションのオートメーション化
-
2020.04.27
Amazon FSx for Windows ファイルサーバーへの移行と活用方法
-
2020.06.11
Amazon WorkSpacesとは?その特長をまとめてみた
-
2020.06.23
AWSのDevOpsサービスと当社マネージドサービスを活用したDevOpsの実装①~概念編~